The SSR1 register can have bits set that don't match to bits in the MSR
authorkettenis <kettenis@openbsd.org>
Thu, 15 Apr 2021 07:28:37 +0000 (07:28 +0000)
committerkettenis <kettenis@openbsd.org>
Thu, 15 Apr 2021 07:28:37 +0000 (07:28 +0000)
commit2207c4325726fdc5c4bcd0011af0fdf7d3dab137
treeb9a97df0a7b9c06952f4ec43eee241d73a0b8b9b
parent011266892ad7dd5849a5f48ff5788886487688fb
The SSR1 register can have bits set that don't match to bits in the MSR
register.  We would set the sc_ps member of struct sigcontext to SSR1
when entering a signal handler, and compare it to PSL_USER in sigreturn(2)
to make sure that the user code didn't set any bits it shouldn't set.
If non-MSR bits are set that comparison would fail and sigreturn(2) would
fail.  Fix this by initializing sc_ps to PSL_USER instead of taking its
value from SSR1.  On OpenBSD we always run processes with the same MSR
value.

ok deraadt@
sys/arch/powerpc64/powerpc64/machdep.c