138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/* 238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl> 338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl> 438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com> 538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl> 638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2001 John Hughes <john@Calva.COM> 738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2013 Denys Vlasenko <vda.linux@googlemail.com> 838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2011-2015 Dmitry V. Levin <ldv@altlinux.org> 938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com> 1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved. 1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without 1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions 1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met: 1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright 1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer. 1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * notice, this list of conditions and the following disclaimer in the 1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * documentation and/or other materials provided with the distribution. 2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * derived from this software without specific prior written permission. 2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */ 3438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 35537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "defs.h" 36537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 37a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#include DEF_MPERS_TYPE(siginfo_t) 38a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova 390e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include <signal.h> 40d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger#include <linux/audit.h> 410e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin 42a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#include MPERS_DEFS 43a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova 44a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#ifndef IN_MPERS 450e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include "printsiginfo.h" 46a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#endif 470e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin 48d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger#include "xlat/audit_arch.h" 49537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigbus_codes.h" 50537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigchld_codes.h" 51537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigfpe_codes.h" 52537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigill_codes.h" 53537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/siginfo_codes.h" 54537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigpoll_codes.h" 55537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigprof_codes.h" 56537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigsegv_codes.h" 57537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigsys_codes.h" 58537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigtrap_codes.h" 59537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 60537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SIGEMT 61537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin# include "xlat/sigemt_codes.h" 62537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 63537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 64537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifndef SI_FROMUSER 65537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin# define SI_FROMUSER(sip) ((sip)->si_code <= 0) 66537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 67537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 68537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void 69537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprintsigsource(const siginfo_t *sip) 70537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 713595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova tprintf(", si_pid=%u, si_uid=%u", 723595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova (unsigned int) sip->si_pid, 733595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova (unsigned int) sip->si_uid); 74537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 75537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 76537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void 77f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprintsigval(const siginfo_t *sip) 78537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 79484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin tprintf(", si_value={int=%d, ptr=", sip->si_int); 80d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printaddr(ptr_to_kulong(sip->si_ptr)); 81484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin tprints("}"); 82537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 83537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 84537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void 859134aab4073a8be6bb529aeb05e8c5f4be69540fDmitry V. Levinprint_si_code(int si_signo, unsigned int si_code) 86537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 87537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin const char *code = xlookup(siginfo_codes, si_code); 88537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 89537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (!code) { 90537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin switch (si_signo) { 91537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGTRAP: 92537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigtrap_codes, si_code); 93537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 94537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGCHLD: 95537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigchld_codes, si_code); 96537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 97537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGPOLL: 98537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigpoll_codes, si_code); 99537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 100537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGPROF: 101537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigprof_codes, si_code); 102537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 103537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGILL: 104537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigill_codes, si_code); 105537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 106537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SIGEMT 107537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGEMT: 108537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigemt_codes, si_code); 109537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 110537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 111537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGFPE: 112537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigfpe_codes, si_code); 113537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 114537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGSEGV: 115537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigsegv_codes, si_code); 116537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 117537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGBUS: 118537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigbus_codes, si_code); 119537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 120537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGSYS: 121537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin code = xlookup(sigsys_codes, si_code); 122537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 123537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 124537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 125537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 126537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (code) 127537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints(code); 128537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin else 129537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprintf("%#x", si_code); 130537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 131537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 132537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void 133f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprint_si_info(const siginfo_t *sip) 134537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 135537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_errno) { 136537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints(", si_errno="); 137537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if ((unsigned) sip->si_errno < nerrnos 138537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin && errnoent[sip->si_errno]) 139537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints(errnoent[sip->si_errno]); 140537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin else 141537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprintf("%d", sip->si_errno); 142537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 143537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 144537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (SI_FROMUSER(sip)) { 145537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin switch (sip->si_code) { 146537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SI_USER: 147537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsigsource(sip); 148537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 149537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SI_TKILL: 150537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsigsource(sip); 151537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 152537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#if defined HAVE_SIGINFO_T_SI_TIMERID && defined HAVE_SIGINFO_T_SI_OVERRUN 153537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SI_TIMER: 154537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprintf(", si_timerid=%#x, si_overrun=%d", 155537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin sip->si_timerid, sip->si_overrun); 156f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin printsigval(sip); 157537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 158537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 159537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin default: 160537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsigsource(sip); 161537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_ptr) 162f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin printsigval(sip); 163537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 164537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 165537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } else { 166537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin switch (sip->si_signo) { 167537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGCHLD: 168537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsigsource(sip); 169537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints(", si_status="); 170537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_code == CLD_EXITED) 171537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprintf("%d", sip->si_status); 172537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin else 173537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsignal(sip->si_status); 174f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin tprintf(", si_utime=%llu, si_stime=%llu", 175031fc80059746ba0d125ed0f1965217a22e41da3Dmitry V. Levin zero_extend_signed_to_ull(sip->si_utime), 176031fc80059746ba0d125ed0f1965217a22e41da3Dmitry V. Levin zero_extend_signed_to_ull(sip->si_stime)); 177537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 178537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGILL: case SIGFPE: 179537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGSEGV: case SIGBUS: 180484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin tprints(", si_addr="); 181d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printaddr(ptr_to_kulong(sip->si_addr)); 182537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 183537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case SIGPOLL: 184537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin switch (sip->si_code) { 185537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin case POLL_IN: case POLL_OUT: case POLL_MSG: 186537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprintf(", si_band=%ld", 187537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin (long) sip->si_band); 188537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 189537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 190537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 191537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef HAVE_SIGINFO_T_SI_SYSCALL 192d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes case SIGSYS: { 193d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes const char *scname = 194d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes syscall_name((unsigned) sip->si_syscall); 195d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 196484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin tprints(", si_call_addr="); 197d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printaddr(ptr_to_kulong(sip->si_call_addr)); 198d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprints(", si_syscall="); 199d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes if (scname) 200d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprintf("__NR_%s", scname); 201d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes else 202d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprintf("%u", (unsigned) sip->si_syscall); 203d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tprints(", si_arch="); 204d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger printxval(audit_arch, sip->si_arch, "AUDIT_ARCH_???"); 205537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin break; 206d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } 207537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 208537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin default: 209537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_pid || sip->si_uid) 210537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsigsource(sip); 211537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_ptr) 212f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin printsigval(sip); 213537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 214537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 215537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 216537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 217a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#ifdef IN_MPERS 218a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirovastatic 219a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#endif 220537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinvoid 221f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprintsiginfo(const siginfo_t *sip) 222537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 223537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_signo == 0) { 224537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints("{}"); 225537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin return; 226537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin } 227537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints("{si_signo="); 228537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin printsignal(sip->si_signo); 229537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 230537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints(", si_code="); 231537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin print_si_code(sip->si_signo, sip->si_code); 232537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 233537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SI_NOINFO 234537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin if (sip->si_code != SI_NOINFO) 235537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif 236f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin print_si_info(sip); 237537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 238537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin tprints("}"); 239537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 240537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin 241a8fce09e344a644aa0279f0efe54e4faeb64ca29Dmitry V. LevinMPERS_PRINTER_DECL(void, printsiginfo_at, 242d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct tcb *const tcp, const kernel_ulong_t addr) 243537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{ 244537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin siginfo_t si; 245a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin 246a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin if (!umove_or_printaddr(tcp, addr, &si)) 247f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin printsiginfo(&si); 248537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin} 24976b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin 25076b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levinstatic bool 25176b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levinprint_siginfo_t(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) 25276b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin{ 253f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin printsiginfo((const siginfo_t *) elem_buf); 25476b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin return true; 25576b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin} 25676b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin 257d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott HughesMPERS_PRINTER_DECL(void, print_siginfo_array, struct tcb *const tcp, 258d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes const kernel_ulong_t addr, const kernel_ulong_t len) 25976b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin{ 26076b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin siginfo_t si; 26176b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin 26276b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin print_array(tcp, addr, len, &si, sizeof(si), 26376b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin umoven_or_printaddr, print_siginfo_t, 0); 26476b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin} 265