Skip to content

syscall: add Landlock support for execve() on Linux#20

Open
hbrooks wants to merge 2 commits into
masterfrom
demo/pr-77630
Open

syscall: add Landlock support for execve() on Linux#20
hbrooks wants to merge 2 commits into
masterfrom
demo/pr-77630

Conversation

@hbrooks
Copy link
Copy Markdown

@hbrooks hbrooks commented May 28, 2026

Mirror of golang/go#77630 by @gnoack

gnoack added 2 commits May 4, 2026 13:14
* In forkAndExecInChild1() on Linux, when SysProcAttr.NoNewPrivs is
  set, call prctl(PR_SET_NO_NEW_PRIVS).
* Define the necessary constant unexported as _PR_SET_NO_NEW_PRIVS.

When the no_new_privs flag is set, execve() does not grant additional
permissions through execve() (e.g., through the set-user-ID bit).

The no_new_privs flag is a prerequisite for enabling a Landlock policy
in an unprivileged (non-CAP_SYS_ADMIN) thread.

The no_new_privs flag is described in PR_SET_NO_NEW_PRIVS(2const).

Updates landlock-lsm/go-landlock#45
Updates golang#68595
* Extend SysProcAttr on Linux to optionally store the ruleset FD and
  flag arguments for landlock_restrict_self(2).
* Extend forkAndExecInChild1() to invoke the system call.
* The test case exercises the logic and demonstrates that it works
  (provided that the host Linux system has the Landlock LSM enabled).
* Define the necessary unexported _SYS_landlock_restrict_self constant.

As it is customary in forkAndExecInChild1(), system calls need to be
invoked with RawSyscall(), and their system call numbers are defined
in the same package.  (Depending on internal/syscall/unix would create
an import loop.)

The Landlock API is described in
https://docs.kernel.org/userspace-api/landlock.html

Updates landlock-lsm/go-landlock#45
Fixes golang#68595
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants