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 =