git: d2b558281aad - main - Revert "Pass the syscall number to capsicum permission-denied signals"
David Chisnall
theraven at FreeBSD.org
Sat Jul 10 19:26:39 UTC 2021
The branch main has been updated by theraven:
URL: https://cgit.FreeBSD.org/src/commit/?id=d2b558281aadc266807e42ffb27d2108d308de46
commit d2b558281aadc266807e42ffb27d2108d308de46
Author: David Chisnall <theraven at FreeBSD.org>
AuthorDate: 2021-07-10 19:25:38 +0000
Commit: David Chisnall <theraven at FreeBSD.org>
CommitDate: 2021-07-10 19:26:01 +0000
Revert "Pass the syscall number to capsicum permission-denied signals"
This broke the i386 build.
This reverts commit 3a522ba1bc852c3d4660a4fa32e4a94999d09a47.
---
lib/libc/sys/procctl.2 | 10 ----------
share/man/man3/siginfo.3 | 2 --
sys/amd64/amd64/trap.c | 1 -
sys/amd64/cloudabi32/cloudabi32_sysvec.c | 1 -
sys/amd64/cloudabi64/cloudabi64_sysvec.c | 1 -
sys/amd64/ia32/ia32_syscall.c | 1 -
sys/amd64/include/proc.h | 1 -
sys/amd64/linux/linux_sysvec.c | 1 -
sys/amd64/linux32/linux32_sysvec.c | 1 -
sys/arm/arm/syscall.c | 1 -
sys/arm/cloudabi32/cloudabi32_sysvec.c | 1 -
sys/arm/include/proc.h | 1 -
sys/arm64/arm64/elf32_machdep.c | 1 -
sys/arm64/arm64/trap.c | 1 -
sys/arm64/cloudabi32/cloudabi32_sysvec.c | 1 -
sys/arm64/cloudabi64/cloudabi64_sysvec.c | 1 -
sys/arm64/include/proc.h | 1 -
sys/arm64/linux/linux_sysvec.c | 1 -
sys/i386/cloudabi32/cloudabi32_sysvec.c | 1 -
sys/i386/i386/trap.c | 1 -
sys/i386/include/proc.h | 1 -
sys/i386/linux/linux_sysvec.c | 1 -
sys/kern/subr_syscall.c | 1 -
sys/mips/include/proc.h | 1 -
sys/mips/mips/trap.c | 1 -
sys/powerpc/include/proc.h | 1 -
sys/powerpc/powerpc/trap.c | 1 -
sys/riscv/include/proc.h | 1 -
sys/riscv/riscv/trap.c | 1 -
sys/sys/signal.h | 7 -------
30 files changed, 46 deletions(-)
diff --git a/lib/libc/sys/procctl.2 b/lib/libc/sys/procctl.2
index ce7a2be5d5e4..432ed5919a81 100644
--- a/lib/libc/sys/procctl.2
+++ b/lib/libc/sys/procctl.2
@@ -454,16 +454,6 @@ and the
.Va si_code
member is set to
.Dv TRAP_CAP .
-The system call number is stored in the
-.Va si_syscall
-field of the
-.Fa siginfo
-signal handler parameter.
-The other system call parameters can be read from the
-.Fa ucontext_t
-but the system call number is typically stored in the register
-that also contains the return value and so is unavailable in the
-signal handler.
.Pp
See
.Xr capsicum 4
diff --git a/share/man/man3/siginfo.3 b/share/man/man3/siginfo.3
index 7f8a809cdfa5..acc8785b2f0d 100644
--- a/share/man/man3/siginfo.3
+++ b/share/man/man3/siginfo.3
@@ -85,8 +85,6 @@ timer overrun count
.It Vt int Ta Va si_mqd Ta
.Tn POSIX
message queue ID
-.It Vt int Ta Va si_syscall Ta
-system-call number for system calls blocked by Capsicum
.El
.Pp
The
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index b08495f3f139..55649687ce50 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -1059,7 +1059,6 @@ cpu_fetch_syscall_args(struct thread *td)
sa = &td->td_sa;
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
if (__predict_false(sa->code == SYS_syscall ||
sa->code == SYS___syscall ||
diff --git a/sys/amd64/cloudabi32/cloudabi32_sysvec.c b/sys/amd64/cloudabi32/cloudabi32_sysvec.c
index 26924ed5a980..164f87e90e91 100644
--- a/sys/amd64/cloudabi32/cloudabi32_sysvec.c
+++ b/sys/amd64/cloudabi32/cloudabi32_sysvec.c
@@ -101,7 +101,6 @@ cloudabi32_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI32_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi32_sysent[sa->code];
diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
index c08d912e84d4..d3893902b08e 100644
--- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c
+++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
@@ -98,7 +98,6 @@ cloudabi64_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI64_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi64_sysent[sa->code];
diff --git a/sys/amd64/ia32/ia32_syscall.c b/sys/amd64/ia32/ia32_syscall.c
index 9294ef8ce741..6c9399d1a52f 100644
--- a/sys/amd64/ia32/ia32_syscall.c
+++ b/sys/amd64/ia32/ia32_syscall.c
@@ -150,7 +150,6 @@ ia32_fetch_syscall_args(struct thread *td)
params = (caddr_t)frame->tf_rsp + sizeof(u_int32_t);
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
/*
* Need to check if this is a 32 bit or 64 bit syscall.
diff --git a/sys/amd64/include/proc.h b/sys/amd64/include/proc.h
index 0f8cf50e326d..59796e729ac4 100644
--- a/sys/amd64/include/proc.h
+++ b/sys/amd64/include/proc.h
@@ -92,7 +92,6 @@ struct mdproc {
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[8];
};
diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c
index 566af6de29e7..c5538932b1e3 100644
--- a/sys/amd64/linux/linux_sysvec.c
+++ b/sys/amd64/linux/linux_sysvec.c
@@ -191,7 +191,6 @@ linux_fetch_syscall_args(struct thread *td)
sa->args[4] = frame->tf_r8;
sa->args[5] = frame->tf_r9;
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
if (sa->code >= p->p_sysent->sv_size)
/* nosys */
diff --git a/sys/amd64/linux32/linux32_sysvec.c b/sys/amd64/linux32/linux32_sysvec.c
index 7dfd57a74a1e..504d57e418a5 100644
--- a/sys/amd64/linux32/linux32_sysvec.c
+++ b/sys/amd64/linux32/linux32_sysvec.c
@@ -662,7 +662,6 @@ linux32_fetch_syscall_args(struct thread *td)
sa->args[4] = frame->tf_rdi;
sa->args[5] = frame->tf_rbp; /* Unconfirmed */
sa->code = frame->tf_rax;
- sa->original_code = sa->code;
if (sa->code >= p->p_sysent->sv_size)
/* nosys */
diff --git a/sys/arm/arm/syscall.c b/sys/arm/arm/syscall.c
index a635de0ec716..a851db6e4556 100644
--- a/sys/arm/arm/syscall.c
+++ b/sys/arm/arm/syscall.c
@@ -108,7 +108,6 @@ cpu_fetch_syscall_args(struct thread *td)
nap = 4;
sa = &td->td_sa;
sa->code = td->td_frame->tf_r7;
- sa->original_code = sa->code;
ap = &td->td_frame->tf_r0;
if (sa->code == SYS_syscall) {
sa->code = *ap++;
diff --git a/sys/arm/cloudabi32/cloudabi32_sysvec.c b/sys/arm/cloudabi32/cloudabi32_sysvec.c
index 4df57b22e13d..a8c5da47d265 100644
--- a/sys/arm/cloudabi32/cloudabi32_sysvec.c
+++ b/sys/arm/cloudabi32/cloudabi32_sysvec.c
@@ -78,7 +78,6 @@ cloudabi32_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_r12;
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI32_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi32_sysent[sa->code];
diff --git a/sys/arm/include/proc.h b/sys/arm/include/proc.h
index 9566c264731e..a37ccd8f621c 100644
--- a/sys/arm/include/proc.h
+++ b/sys/arm/include/proc.h
@@ -75,7 +75,6 @@ struct mdproc {
*/
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[MAXARGS];
} __aligned(8);
diff --git a/sys/arm64/arm64/elf32_machdep.c b/sys/arm64/arm64/elf32_machdep.c
index 7cedbffc4d43..206413b45172 100644
--- a/sys/arm64/arm64/elf32_machdep.c
+++ b/sys/arm64/arm64/elf32_machdep.c
@@ -175,7 +175,6 @@ freebsd32_fetch_syscall_args(struct thread *td)
/* r7 is the syscall id */
sa->code = td->td_frame->tf_x[7];
- sa->original_code = sa->code;
if (sa->code == SYS_syscall) {
sa->code = *ap++;
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
index 2b2d2e433efa..744b646b31c8 100644
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -130,7 +130,6 @@ cpu_fetch_syscall_args(struct thread *td)
dst_ap = &sa->args[0];
sa->code = td->td_frame->tf_x[8];
- sa->original_code = sa->code;
if (__predict_false(sa->code == SYS_syscall || sa->code == SYS___syscall)) {
sa->code = *ap++;
diff --git a/sys/arm64/cloudabi32/cloudabi32_sysvec.c b/sys/arm64/cloudabi32/cloudabi32_sysvec.c
index b7be5cc0e5e3..889393560ede 100644
--- a/sys/arm64/cloudabi32/cloudabi32_sysvec.c
+++ b/sys/arm64/cloudabi32/cloudabi32_sysvec.c
@@ -75,7 +75,6 @@ cloudabi32_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_x[0];
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI32_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi32_sysent[sa->code];
diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
index 624d86693457..bdbd828b7b62 100644
--- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c
+++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
@@ -78,7 +78,6 @@ cloudabi64_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_x[8];
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI64_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi64_sysent[sa->code];
diff --git a/sys/arm64/include/proc.h b/sys/arm64/include/proc.h
index 3800798d79b7..bb933dc98241 100644
--- a/sys/arm64/include/proc.h
+++ b/sys/arm64/include/proc.h
@@ -49,7 +49,6 @@ struct mdproc {
#define MAXARGS 8
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[MAXARGS];
};
diff --git a/sys/arm64/linux/linux_sysvec.c b/sys/arm64/linux/linux_sysvec.c
index 7749c1cd7fc8..e1d3708b70e9 100644
--- a/sys/arm64/linux/linux_sysvec.c
+++ b/sys/arm64/linux/linux_sysvec.c
@@ -125,7 +125,6 @@ linux_fetch_syscall_args(struct thread *td)
sa = &td->td_sa;
sa->code = td->td_frame->tf_x[8];
- sa->original_code = sa->code;
/* LINUXTODO: generic syscall? */
if (sa->code >= p->p_sysent->sv_size)
sa->callp = &p->p_sysent->sv_table[0];
diff --git a/sys/i386/cloudabi32/cloudabi32_sysvec.c b/sys/i386/cloudabi32/cloudabi32_sysvec.c
index e0a50f6697a9..4f12d2b6cbce 100644
--- a/sys/i386/cloudabi32/cloudabi32_sysvec.c
+++ b/sys/i386/cloudabi32/cloudabi32_sysvec.c
@@ -96,7 +96,6 @@ cloudabi32_fetch_syscall_args(struct thread *td)
/* Obtain system call number. */
sa->code = frame->tf_eax;
- sa->original_code = sa->code;
if (sa->code >= CLOUDABI32_SYS_MAXSYSCALL)
return (ENOSYS);
sa->callp = &cloudabi32_sysent[sa->code];
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 07abac23c9da..045478149be5 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -1052,7 +1052,6 @@ cpu_fetch_syscall_args(struct thread *td)
#endif
sa->code = frame->tf_eax;
- sa->original_code = sa->code;
params = (caddr_t)frame->tf_esp + sizeof(uint32_t);
/*
diff --git a/sys/i386/include/proc.h b/sys/i386/include/proc.h
index 76e1ac611474..2950946ff155 100644
--- a/sys/i386/include/proc.h
+++ b/sys/i386/include/proc.h
@@ -64,7 +64,6 @@ struct mdproc {
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[8];
};
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c
index a0959d55b585..adb70fded6dc 100644
--- a/sys/i386/linux/linux_sysvec.c
+++ b/sys/i386/linux/linux_sysvec.c
@@ -756,7 +756,6 @@ linux_fetch_syscall_args(struct thread *td)
sa = &td->td_sa;
sa->code = frame->tf_eax;
- sa->original_code = sa->code;
sa->args[0] = frame->tf_ebx;
sa->args[1] = frame->tf_ecx;
sa->args[2] = frame->tf_edx;
diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c
index 2304e3e7f3f9..85a0814a2125 100644
--- a/sys/kern/subr_syscall.c
+++ b/sys/kern/subr_syscall.c
@@ -230,7 +230,6 @@ syscallret(struct thread *td)
ksi.ksi_signo = SIGTRAP;
ksi.ksi_errno = td->td_errno;
ksi.ksi_code = TRAP_CAP;
- ksi.ksi_info.si_syscall = sa->original_code;
trapsignal(td, &ksi);
}
}
diff --git a/sys/mips/include/proc.h b/sys/mips/include/proc.h
index 29d832a162e6..0cb1d433387c 100644
--- a/sys/mips/include/proc.h
+++ b/sys/mips/include/proc.h
@@ -84,7 +84,6 @@ struct mdproc {
#define MAXARGS 8
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[MAXARGS];
};
diff --git a/sys/mips/mips/trap.c b/sys/mips/mips/trap.c
index 9d7a07606373..96a2de4ee817 100644
--- a/sys/mips/mips/trap.c
+++ b/sys/mips/mips/trap.c
@@ -355,7 +355,6 @@ cpu_fetch_syscall_args(struct thread *td)
else
locr0->pc += sizeof(int);
sa->code = locr0->v0;
- sa->original_code = sa->code;
switch (sa->code) {
case SYS___syscall:
diff --git a/sys/powerpc/include/proc.h b/sys/powerpc/include/proc.h
index aac4e66b39fc..d4df3ccfefef 100644
--- a/sys/powerpc/include/proc.h
+++ b/sys/powerpc/include/proc.h
@@ -62,7 +62,6 @@ struct mdproc {
#define MAXARGS 8
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[MAXARGS];
};
diff --git a/sys/powerpc/powerpc/trap.c b/sys/powerpc/powerpc/trap.c
index ab5189a0f418..3a1bdf7cde07 100644
--- a/sys/powerpc/powerpc/trap.c
+++ b/sys/powerpc/powerpc/trap.c
@@ -667,7 +667,6 @@ cpu_fetch_syscall_args(struct thread *td)
sa = &td->td_sa;
sa->code = frame->fixreg[0];
- sa->original_code = sa->code;
params = (caddr_t)(frame->fixreg + FIRSTARG);
n = NARGREG;
diff --git a/sys/riscv/include/proc.h b/sys/riscv/include/proc.h
index 1c6c8d2919b5..4b5ae9ebe3ed 100644
--- a/sys/riscv/include/proc.h
+++ b/sys/riscv/include/proc.h
@@ -48,7 +48,6 @@ struct mdproc {
#define MAXARGS 8
struct syscall_args {
u_int code;
- u_int original_code;
struct sysent *callp;
register_t args[MAXARGS];
};
diff --git a/sys/riscv/riscv/trap.c b/sys/riscv/riscv/trap.c
index 8844638c8204..07d7f84a94e8 100644
--- a/sys/riscv/riscv/trap.c
+++ b/sys/riscv/riscv/trap.c
@@ -103,7 +103,6 @@ cpu_fetch_syscall_args(struct thread *td)
dst_ap = &sa->args[0];
sa->code = td->td_frame->tf_t[0];
- sa->original_code = sa->code;
if (__predict_false(sa->code == SYS_syscall || sa->code == SYS___syscall)) {
sa->code = *ap++;
diff --git a/sys/sys/signal.h b/sys/sys/signal.h
index 9dae3ce04745..8b45a521c3ee 100644
--- a/sys/sys/signal.h
+++ b/sys/sys/signal.h
@@ -255,12 +255,6 @@ typedef struct __siginfo {
struct {
long _band; /* band event for SIGPOLL */
} _poll; /* was this ever used ? */
- struct {
- int _syscall; /* Syscall number for signals
- * delivered as a result of
- * system calls denied by
- * Capsicum. */
- } _capsicum;
struct {
long __spare1__;
int __spare2__[7];
@@ -273,7 +267,6 @@ typedef struct __siginfo {
#define si_overrun _reason._timer._overrun
#define si_mqd _reason._mesgq._mqd
#define si_band _reason._poll._band
-#define si_syscall _reason._capsicum._syscall
#if defined(_WANT_LWPINFO32) || (defined(_KERNEL) && defined(__LP64__))
struct siginfo32 {
More information about the dev-commits-src-all
mailing list