aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Tomasz Napierala <trasz@FreeBSD.org>2021-07-03 07:41:59 +0000
committerEdward Tomasz Napierala <trasz@FreeBSD.org>2021-07-03 07:42:37 +0000
commit2f514e6f13de41aa9ad5f563ed0decc66e91f99c (patch)
treee2872ad3514ae70433c97c45446cdfa84a5175a1
parent45d99014ca3a57fcc6b603cf4494516b4dadda1b (diff)
downloadsrc-2f514e6f13de41aa9ad5f563ed0decc66e91f99c.tar.gz
src-2f514e6f13de41aa9ad5f563ed0decc66e91f99c.zip
linux(4): implement PR_SET_NO_NEW_PRIVS
This makes prctl(2) support PR_SET_NO_NEW_PRIVS, by mapping it to the native PROC_NO_NEW_PRIVS_CTL procctl(2). Sponsored By: EPSRC Differential Revision: https://reviews.freebsd.org/D30973
-rw-r--r--sys/compat/linux/linux_misc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index 65a5b0dd24d7..559eb6463da0 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -1982,7 +1982,7 @@ linux_capset(struct thread *td, struct linux_capset_args *uap)
int
linux_prctl(struct thread *td, struct linux_prctl_args *args)
{
- int error = 0, max_size;
+ int error = 0, max_size, arg;
struct proc *p = td->td_proc;
char comm[LINUX_MAX_COMM_LEN];
int pdeath_signal, trace_state;
@@ -2113,8 +2113,10 @@ linux_prctl(struct thread *td, struct linux_prctl_args *args)
error = EINVAL;
break;
case LINUX_PR_SET_NO_NEW_PRIVS:
- linux_msg(td, "unsupported prctl PR_SET_NO_NEW_PRIVS");
- error = EINVAL;
+ arg = args->arg2 == 1 ?
+ PROC_NO_NEW_PRIVS_ENABLE : PROC_NO_NEW_PRIVS_DISABLE;
+ error = kern_procctl(td, P_PID, p->p_pid,
+ PROC_NO_NEW_PRIVS_CTL, &arg);
break;
case LINUX_PR_SET_PTRACER:
linux_msg(td, "unsupported prctl PR_SET_PTRACER");