NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/59084 CVS commit: [netbsd-10] src
The following reply was made to PR kern/59084; it has been noted by GNATS.
From: "Martin Husemann" <martin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/59084 CVS commit: [netbsd-10] src
Date: Fri, 23 Oct 2026 15:41:49 +0000
Module Name: src
Committed By: martin
Date: Fri Oct 23 15:41:48 UTC 2026
Modified Files:
src/distrib/sets/lists/debug [netbsd-10]: mi
src/distrib/sets/lists/tests [netbsd-10]: mi
src/sys/arch/alpha/alpha [netbsd-10]: machdep.c
src/sys/arch/amd64/amd64 [netbsd-10]: machdep.c
src/sys/arch/hppa/hppa [netbsd-10]: machdep.c
src/sys/arch/i386/i386 [netbsd-10]: machdep.c
src/sys/arch/ia64/ia64 [netbsd-10]: machdep.c
src/sys/arch/m68k/m68k [netbsd-10]: m68k_machdep.c
src/sys/arch/mips/mips [netbsd-10]: mips_machdep.c
src/sys/arch/sh3/sh3 [netbsd-10]: sh3_machdep.c
src/sys/arch/vax/vax [netbsd-10]: trap.c
src/tests/kernel [netbsd-10]: Makefile
Added Files:
src/tests/kernel [netbsd-10]: h_execregs_unimpl.c t_execregs.c
src/tests/kernel/arch/aarch64 [netbsd-10]: execregs.c execregs.h
h_execregs.S
src/tests/kernel/arch/hppa [netbsd-10]: execregs.c execregs.h
h_execregs.S
src/tests/kernel/arch/i386 [netbsd-10]: execregs.c execregs.h
h_execregs.S
src/tests/kernel/arch/sh3 [netbsd-10]: h_execregs.S
src/tests/kernel/arch/vax [netbsd-10]: execregs.c execregs.h
h_execregs.S
src/tests/kernel/arch/x86_64 [netbsd-10]: execregs.c execregs.h
h_execregs.S
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1376):
sys/arch/vax/vax/trap.c: revision 1.139
tests/kernel/arch/aarch64/execregs.c: revision 1.1
tests/kernel/Makefile: revision 1.85
tests/kernel/Makefile: revision 1.86
distrib/sets/lists/tests/mi: revision 1.1359
tests/kernel/Makefile: revision 1.87
sys/arch/alpha/alpha/machdep.c: revision 1.380
tests/kernel/arch/aarch64/execregs.h: revision 1.1
sys/arch/m68k/m68k/m68k_machdep.c: revision 1.12
sys/arch/i386/i386/machdep.c: revision 1.844
sys/arch/i386/i386/machdep.c: revision 1.845
sys/arch/hppa/hppa/machdep.c: revision 1.22
sys/arch/sh3/sh3/sh3_machdep.c: revision 1.114
tests/kernel/arch/x86_64/execregs.c: revision 1.1
tests/kernel/arch/aarch64/h_execregs.S: revision 1.1
sys/arch/mips/mips/mips_machdep.c: revision 1.307
tests/kernel/h_execregs_unimpl.c: revision 1.1
tests/kernel/arch/aarch64/h_execregs.S: revision 1.2
tests/kernel/arch/x86_64/execregs.h: revision 1.1
tests/kernel/arch/hppa/execregs.h: revision 1.1
tests/kernel/arch/hppa/execregs.h: revision 1.2
tests/kernel/arch/hppa/execregs.c: revision 1.1
tests/kernel/arch/hppa/h_execregs.S: revision 1.1
tests/kernel/arch/hppa/execregs.c: revision 1.2
tests/kernel/arch/i386/execregs.h: revision 1.1
tests/kernel/arch/hppa/h_execregs.S: revision 1.2
tests/kernel/arch/vax/h_execregs.S: revision 1.1
tests/kernel/arch/i386/execregs.c: revision 1.1
sys/arch/amd64/amd64/machdep.c: revision 1.372
sys/arch/vax/vax/trap.c: revision 1.141
sys/arch/amd64/amd64/machdep.c: revision 1.373
distrib/sets/lists/debug/mi: revision 1.466
tests/kernel/arch/x86_64/h_execregs.S: revision 1.1
tests/kernel/arch/vax/execregs.c: revision 1.1
tests/kernel/arch/i386/h_execregs.S: revision 1.1
tests/kernel/t_execregs.c: revision 1.1
tests/kernel/t_execregs.c: revision 1.2
tests/kernel/arch/vax/execregs.h: revision 1.1
sys/arch/ia64/ia64/machdep.c: revision 1.46
tests/kernel/t_execregs.c: revision 1.3
tests/kernel/t_execregs.c: revision 1.4
tests/kernel/t_execregs.c: revision 1.5
tests/kernel/arch/sh3/h_execregs.S: revision 1.1
(all via patch)
Test whether exec/spawn will zero registers.
Currently implemented only for a handful of architectures; should
extend this to all the others, and extend as appropriate if we find
more register content is worth testing (like maybe vector registers,
but they are managed differently anyway and less likely to leak).
VAX test contributed (and tested) by Kalvis Duckmanton, with some
tweaks by me; the others written and tested by me. IA64 skipped,
even though I suspect it _would_ leak if the kernel code ran as is,
because I have no way to test it.
PR kern/59084: exec/spawn leaks register content
t_execregs: Test some more registers on hppa.
Looks like we're missing zeroing of floating-point registers too, as
well as the carry/borrow and divide step correction bits in the
semi-secret PSW register.
Unfortunately, while investigating this, I discovered that qemu's
hppa implementation doesn't implement fpu traps even if the fpu is
disabled (relevant bits of CR 10 `CCR', Coprocessor Control Register,
are cleared), which breaks fpu switching on NetBSD. So I can't test
properly this myself. We should maybe just change NetBSD from lazy
fpu switching to eager fpu switching anyway to thwart Spectre-class
attacks if there's any hppa hardware out there that does speculative
execution.
PR kern/59084: exec/spawn leaks register content
t_execregs: Make read failure nonfatal.
This way, the test will report when the helper program h_execregs has
crashed, which happens often during development because it's an
assembly routine with the barest possible runtime support in order to
get at registers immediately on startup before anything like libc
constructors have clobbered them.
PR kern/59084: exec/spawn leaks register content
Clear trapframe on exec.
Do this for all architectures, even if the trapframe is fully
initialized -- makes it easier to audit and be confident it's
correct, and most likely (with the exception of sh3 which has an
intermediate call to ufetch_int in the middle) the compiler can
eliminate redundant stores in these routines.
PR kern/59084: exec/spawn leaks register content
x86: Set tf_trapno = T_ASTFLT on exec.
In most cases, the caller will already have tf_trapno=T_ASTFLT and
tf_err=2 -- the latter being the size of the SYSCALL instruction for
ERESTART handling. ERESTART handling is not relevant after exec, but
checking for AST on userret may be.
Hoping this will fix the i386 test bed! Aside from padding fields,
these (tf_trapno and tf_err) are the only two members of trapframe
that were newly zeroed on i386. The corresponding amd64 changes --
which zeroed many other registers -- worked in my testing, but
evidently that wasn't enough testing.
PR kern/59084: exec/spawn leaks register content
vax: Set tf_psl to PSL_U|PSL_PREVU on exec.
This was previously inherited from the caller, which was not clear
from context, and the trapframe is now zeroed which broke exec on
vax.
PR kern/59084: exec/spawn leaks register content
h_execregs: Properly request to statically link this.
Adding -static to LDFLAGS doesn't work because we end up passing
various other flags that cause it to come out as a dynamic executable
anyway, which would crash on SIGSEGV early at startup -- except that
the entry point exits before calling the normal start routine, so by
accident it works.
PR kern/59084: exec/spawn leaks register content
t_execregs: On aarch64, make sure to align stack to 16 bytes.
Should avoid SIGBUS with strict alignment (SCTLR_EL0.A bit).
PR kern/59084: exec/spawn leaks register content
t_execregs: Make failure of child a little more obvious.
PR kern/59084: exec/spawn leaks register content
t_execregs: implement sh3 h_execregs helper
Just dumps mcontext __gregset_t for now.
Not yet hooked into the build.
To generate a diff of this commit:
cvs rdiff -u -r1.394.2.20 -r1.394.2.21 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.1238.2.26 -r1.1238.2.27 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.375 -r1.375.10.1 src/sys/arch/alpha/alpha/machdep.c
cvs rdiff -u -r1.366.2.1 -r1.366.2.2 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.18.4.2 -r1.18.4.3 src/sys/arch/hppa/hppa/machdep.c
cvs rdiff -u -r1.839 -r1.839.2.1 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.43.30.1 -r1.43.30.2 src/sys/arch/ia64/ia64/machdep.c
cvs rdiff -u -r1.10 -r1.10.30.1 src/sys/arch/m68k/m68k/m68k_machdep.c
cvs rdiff -u -r1.304 -r1.304.2.1 src/sys/arch/mips/mips/mips_machdep.c
cvs rdiff -u -r1.112 -r1.112.4.1 src/sys/arch/sh3/sh3/sh3_machdep.c
cvs rdiff -u -r1.137.2.1 -r1.137.2.2 src/sys/arch/vax/vax/trap.c
cvs rdiff -u -r1.70.2.2 -r1.70.2.3 src/tests/kernel/Makefile
cvs rdiff -u -r0 -r1.1.6.2 src/tests/kernel/h_execregs_unimpl.c
cvs rdiff -u -r0 -r1.7.6.2 src/tests/kernel/t_execregs.c
cvs rdiff -u -r0 -r1.1.6.2 src/tests/kernel/arch/aarch64/execregs.c \
src/tests/kernel/arch/aarch64/execregs.h
cvs rdiff -u -r0 -r1.2.6.2 src/tests/kernel/arch/aarch64/h_execregs.S
cvs rdiff -u -r0 -r1.2.4.2 src/tests/kernel/arch/hppa/execregs.c \
src/tests/kernel/arch/hppa/execregs.h \
src/tests/kernel/arch/hppa/h_execregs.S
cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/i386/execregs.c \
src/tests/kernel/arch/i386/execregs.h \
src/tests/kernel/arch/i386/h_execregs.S
cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/sh3/h_execregs.S
cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/vax/execregs.c \
src/tests/kernel/arch/vax/execregs.h \
src/tests/kernel/arch/vax/h_execregs.S
cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/x86_64/execregs.c \
src/tests/kernel/arch/x86_64/execregs.h \
src/tests/kernel/arch/x86_64/h_execregs.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index