---
name: "keyctl_update"
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_update"
---

# keyctl\_update(3)

update a key

## NAME

keyctl\_update - update a key

## SYNOPSIS

```
#include <keyutils.h>

long keyctl_update(key_serial_t key, const void *payload,
size_t plen);
```

## DESCRIPTION

**keyctl\_update**() updates the payload of a key if the key type permits it.

The caller must have **write** permission on a key to be able to update it.

*payload* and *plen* specify the data for the new payload. *payload* may be NULL and *plen* may be zero if the key type permits that.  The key type may reject the data if it's in the wrong format or in some other way invalid.

## RETURN VALUE

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

## ERRORS

- **ENOKEY**

  The key specified is invalid.

- **EKEYEXPIRED**

  The key specified has expired.

- **EKEYREVOKED**

  The key specified had been revoked.

- **EINVAL**

  The payload data was invalid.

- **ENOMEM**

  Insufficient memory to store the new payload.

- **EDQUOT**

  The key quota for this user would be exceeded by increasing the size of the key to accommodate the new payload.

- **EACCES**

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

- **EOPNOTSUPP**

  The key type does not support the update operation on its keys.

## 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)
