Module Name: src Committed By: rin Date: Mon Nov 18 10:25:48 UTC 2019
Modified Files: src/sys/compat/netbsd32: netbsd32_signal.c Log Message: When converting siginfo, examine si_code at the beginning, as explained in siginfo(2). - If it is SI_NOINFO, there's no additional information. - If it is non-positive, i.e., codes described in siginfo(2), we need to fill in _rt. XXX Description for SA_ASYNCIO in siginfo(2) seems outdated; neither si_fd nor si_band are filled in with that code. XXX pullup to netbsd-9 To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/sys/compat/netbsd32/netbsd32_signal.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/netbsd32/netbsd32_signal.c diff -u src/sys/compat/netbsd32/netbsd32_signal.c:1.48 src/sys/compat/netbsd32/netbsd32_signal.c:1.49 --- src/sys/compat/netbsd32/netbsd32_signal.c:1.48 Mon Nov 18 10:14:52 2019 +++ src/sys/compat/netbsd32/netbsd32_signal.c Mon Nov 18 10:25:48 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_signal.c,v 1.48 2019/11/18 10:14:52 rin Exp $ */ +/* $NetBSD: netbsd32_signal.c,v 1.49 2019/11/18 10:25:48 rin Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.48 2019/11/18 10:14:52 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.49 2019/11/18 10:25:48 rin Exp $"); #if defined(_KERNEL_OPT) #include "opt_ktrace.h" @@ -195,6 +195,11 @@ netbsd32_ksi32_to_ksi(struct _ksiginfo * si->_code = si32->_code; si->_errno = si32->_errno; + if (si32->_code == SI_NOINFO) + return; + else if (si32->_code <= 0) /* codes described in siginfo(2) */ + goto fill_rt; + switch (si32->_signo) { case SIGILL: case SIGFPE: @@ -240,6 +245,7 @@ CTASSERT(sizeof(si->_reason._ptrace_stat case SIGVTALRM: case SIGPROF: default: /* see sigqueue() and kill1() */ +fill_rt: si->_reason._rt._pid = si32->_reason._rt._pid; si->_reason._rt._uid = si32->_reason._rt._uid; si->_reason._rt._value.sival_int = @@ -278,6 +284,11 @@ netbsd32_ksi_to_ksi32(struct __ksiginfo3 si32->_code = si->_code; si32->_errno = si->_errno; + if (si->_code == SI_NOINFO) + return; + else if (si->_code <= 0) /* codes described in siginfo(2) */ + goto fill_rt; + switch (si->_signo) { case SIGILL: case SIGFPE: @@ -323,6 +334,7 @@ CTASSERT(sizeof(si32->_reason._ptrace_st case SIGVTALRM: case SIGPROF: default: /* see sigqueue() and kill1() */ +fill_rt: si32->_reason._rt._pid = si->_reason._rt._pid; si32->_reason._rt._uid = si->_reason._rt._uid; si32->_reason._rt._value.sival_int =