---
name: "keyctl_move"
section: "3"
platform: "linux"
package: "keyutils"
version: "1.6.3-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/keyctl_move"
---

# keyctl\_move(3)

Move a key between keyrings

## NAME

keyctl\_move - Move a key between keyrings

## SYNOPSIS

```
#include <keyutils.h>

long keyctl_move(key_serial_t key, key_serial_t from_keyring,
                 key_serial_t to_keyring, unsigned int flags);
```

## DESCRIPTION

**keyctl\_move**() atomically unlinks *key* from *from\_keyring* and links it into *to\_keyring* in a single operation.  Depending on the flags set, a link to any matching key in to\_keyring may get displaced.

*flags* is a bitwise-OR of zero or more of the following flags:

- **KEYCTL\_MOVE\_EXCL**

  If there's a matching key in to\_keyring, don't displace it but rather return an error.

The caller must have **write** permission on both keyring to be able to create or remove links in them.

The caller must have **link** permission on a key to be able to create a new link to it.

## RETURN VALUE

On success **keyctl\_move**() return **0**. On error, the value **-1** will be returned and *errno* will have been set to an appropriate error.

## ERRORS

- **ENOKEY**

  The key or one of the keyrings specified are invalid.

- **ENOKEY**

  A key with the same type and description is present in to\_keyring and KEYCTL\_MOVE\_EXCL is set.

- **EKEYEXPIRED**

  The key or one of the keyrings specified have expired.

- **EKEYREVOKED**

  The key or one of the keyrings specified have been revoked.

- **EACCES**

  The key exists, but is not **linkable** by the calling process.

- **EACCES**

  The keyrings exist, but are not **writable** by the calling process.

- **ENOMEM**

  Insufficient memory to effect the changes.

- **EDQUOT**

  Expanding to\_keyring would exceed the keyring owner's quota.

## LINKING

This is a library function that can be found in *libkeyutils*. When linking, **-lkeyutils** should be specified to the linker.

## SEE ALSO

[**keyctl**(1)](/keyctl/1.md), [**add\_key**(2)](/add_key/2.md), [**keyctl**(2)](/keyctl/2.md), [**request\_key**(2)](/request_key/2.md), [**keyctl**(3)](/keyctl/3.md), [**keyrings**(7)](/keyrings/7.md), [**keyutils**(7)](/keyutils/7.md)
