---
name: "KEYCTL_SESSION_TO_PARENT"
section: "2const"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/KEYCTL_SESSION_TO_PARENT"
---

# KEYCTL\_SESSION\_TO\_PARENT(2const)

set the parent process's session keyring

## NAME

KEYCTL\_SESSION\_TO\_PARENT - set the parent process's session keyring

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <linux/keyctl.h>  /* Definition of KEY* constants */
#include <sys/syscall.h>   /* Definition of SYS_* constants */
#include <unistd.h>
```

**long syscall(SYS\_keyctl, KEYCTL\_SESSION\_TO\_PARENT);**

## DESCRIPTION

Replace the session keyring to which the *parent* of the calling process subscribes with the session keyring of the calling process.

The keyring will be replaced in the parent process at the point where the parent next transitions from kernel space to user space.

The keyring must exist and must grant the caller *link* permission. The parent process must be single-threaded and have the same effective ownership as this process and must not be set-user-ID or set-group-ID. The UID of the parent process's existing session keyring (f it has one), as well as the UID of the caller's session keyring much match the caller's effective UID.

The fact that it is the parent process that is affected by this operation allows a program such as the shell to start a child process that uses this operation to change the shell's session keyring. (This is what the [**keyctl**(1)](/keyctl/1.md) **new\_session** command does.)

## RETURN VALUE

On success, 0 is returned.

On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EPERM**

  All of the UIDs (GIDs) of the parent process do not match the effective UID (GID) of the calling process.

- **EPERM**

  The UID of the parent's existing session keyring or the UID of the caller's session keyring did not match the effective UID of the caller.

- **EPERM**

  The parent process is not single-threaded.

- **EPERM**

  The parent process is [**init**(1)](/init/1.md) or a kernel thread.

## VERSIONS

A wrapper is provided in the *libkeyutils* library: [**keyctl\_session\_to\_parent**(3)](/keyctl_session_to_parent/3.md).

## STANDARDS

Linux.

## HISTORY

Linux 2.6.32.

## SEE ALSO

[**keyctl**(2)](/keyctl/2.md), [**keyctl\_session\_to\_parent**(3)](/keyctl_session_to_parent/3.md)
