From: Ivo Raisr Date: Wed, 17 Feb 2016 18:11:32 +0000 (+0000) Subject: Solaris syscall: commands A_GETSTAT and A_SETSTAT X-Git-Tag: svn/VALGRIND_3_12_0~232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f71b442444d1c2aa4ca9a0f2b0f37134cdf5b558;p=thirdparty%2Fvalgrind.git Solaris syscall: commands A_GETSTAT and A_SETSTAT for auditon(2) subcode of the auditsys() syscall were removed in Solaris 12. However they stay for Solaris 11 and illumos. n-i-bz git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15791 --- diff --git a/configure.ac b/configure.ac index 980dbdb8e8..87fcf35b6a 100644 --- a/configure.ac +++ b/configure.ac @@ -3039,6 +3039,31 @@ AC_MSG_RESULT([no]) AM_CONDITIONAL(SOLARIS_ZONE_DEFUNCT, test x$solaris_zone_defunct = xyes) +# Solaris-specific check determining if commands A_GETSTAT and A_SETSTAT +# for auditon(2) subcode of the auditsys() syscall are available. +# These commands are available in Solaris 11 and illumos but were removed +# in Solaris 12. +# +# C-level symbol: SOLARIS_AUDITON_STAT +# Automake-level symbol: SOLARIS_AUDITON_STAT +# +AC_MSG_CHECKING([for A_GETSTAT and A_SETSTAT auditon(2) commands (Solaris-specific)]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ + return !(A_GETSTAT && A_SETSTAT); +]])], [ +solaris_auditon_stat=yes +AC_MSG_RESULT([yes]) +AC_DEFINE([SOLARIS_AUDITON_STAT], 1, + [Define to 1 if you have the `A_GETSTAT' and `A_SETSTAT' constants.]) +], [ +solaris_auditon_stat=no +AC_MSG_RESULT([no]) +]) +AM_CONDITIONAL(SOLARIS_AUDITON_STAT, test x$solaris_auditon_stat = xyes) + + # Solaris-specific check determining if the new shmsys() syscall subcodes # IPC_XSTAT64, SHMADV, SHM_ADV_GET, SHM_ADV_SET and SHMGET_OSM are available. # These subcodes were added in Solaris 11 but are missing on illumos. @@ -3515,6 +3540,7 @@ AM_CONDITIONAL(SOLARIS_LWP_SIGQUEUE_SYSCALL_TAKES_PID, false) AM_CONDITIONAL(SOLARIS_LWP_NAME_SYSCALL, false) AM_CONDITIONAL(SOLARIS_GETRANDOM_SYSCALL, false) AM_CONDITIONAL(SOLARIS_ZONE_DEFUNCT, false) +AM_CONDITIONAL(SOLARIS_AUDITON_STAT, false) AM_CONDITIONAL(SOLARIS_SHM_NEW, false) AM_CONDITIONAL(SOLARIS_PRXREGSET_T, false) AM_CONDITIONAL(SOLARIS_FREALPATHAT_SYSCALL, false) diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c index df22aec5dd..3d0a5226ba 100644 --- a/coregrind/m_syswrap/syswrap-solaris.c +++ b/coregrind/m_syswrap/syswrap-solaris.c @@ -7663,6 +7663,7 @@ PRE(sys_auditsys) long, code, int, cmd, char *, data, int, length); PRE_MEM_WRITE("auditsys(data)", ARG3, ARG4); break; +#if defined(SOLARIS_AUDITON_STAT) case VKI_A_GETSTAT: PRE_REG_READ3(long, SC3("auditsys", "auditctl", "getstat"), long, code, int, cmd, vki_au_stat_t *, stats); @@ -7673,6 +7674,7 @@ PRE(sys_auditsys) long, code, int, cmd, vki_au_stat_t *, stats); PRE_MEM_READ("auditsys(stats)", ARG3, sizeof(vki_au_stat_t)); break; +#endif /* SOLARIS_AUDITON_STAT */ case VKI_A_SETUMASK: PRE_REG_READ3(long, SC3("auditsys", "auditctl", "setumask"), long, code, int, cmd, vki_auditinfo_t *, umask); @@ -7853,10 +7855,12 @@ POST(sys_auditsys) case VKI_A_GETCAR: POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1); break; +#if defined(SOLARIS_AUDITON_STAT) case VKI_A_GETSTAT: POST_MEM_WRITE(ARG3, sizeof(vki_au_stat_t)); break; case VKI_A_SETSTAT: +#endif /* SOLARIS_AUDITON_STAT */ case VKI_A_SETUMASK: case VKI_A_SETSMASK: break; diff --git a/include/vki/vki-solaris.h b/include/vki/vki-solaris.h index cc3b9d975b..babc1f2dd3 100644 --- a/include/vki/vki-solaris.h +++ b/include/vki/vki-solaris.h @@ -28,7 +28,7 @@ The GNU General Public License is contained in the file COPYING. */ -/* Copyright 2013-2015, Ivo Raisr */ +/* Copyright 2013-2016, Ivo Raisr */ /* Copyright 2013, OmniTI Computer Consulting, Inc. All rights reserved. */ @@ -133,7 +133,10 @@ typedef uint32_t vki_u32; #define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR #define VKI_A_GETPOLICY A_GETPOLICY #define VKI_A_GETQCTRL A_GETQCTRL +#if defined(SOLARIS_AUDITON_STAT) #define VKI_A_GETSTAT A_GETSTAT +#define VKI_A_SETSTAT A_SETSTAT +#endif /* SOLARIS_AUDITON_STAT */ #define VKI_A_SETAMASK A_SETAMASK #define VKI_A_SETCLASS A_SETCLASS #define VKI_A_SETCOND A_SETCOND @@ -143,7 +146,6 @@ typedef uint32_t vki_u32; #define VKI_A_SETPOLICY A_SETPOLICY #define VKI_A_SETQCTRL A_SETQCTRL #define VKI_A_SETSMASK A_SETSMASK -#define VKI_A_SETSTAT A_SETSTAT #define VKI_A_SETUMASK A_SETUMASK #define VKI_BSM_AUDIT BSM_AUDIT #define VKI_BSM_AUDITCTL BSM_AUDITCTL @@ -158,11 +160,13 @@ typedef uint32_t vki_u32; #define vki_au_id_t au_id_t #define vki_au_mask_t au_mask_t #define vki_au_qctrl au_qctrl -#define vki_au_stat_t au_stat_t #define vki_auditinfo_t auditinfo_t #define vki_auditinfo_addr_t auditinfo_addr_t #define vki_auditpinfo auditpinfo #define vki_auditpinfo_addr auditpinfo_addr +#if defined(SOLARIS_AUDITON_STAT) +#define vki_au_stat_t au_stat_t +#endif /* SOLARIS_AUDITON_STAT */ #include diff --git a/memcheck/tests/solaris/Makefile.am b/memcheck/tests/solaris/Makefile.am index 1a310fa828..672a5cf5fc 100644 --- a/memcheck/tests/solaris/Makefile.am +++ b/memcheck/tests/solaris/Makefile.am @@ -29,6 +29,7 @@ EXTRA_DIST = \ name_service_door.stdout.exp name_service_door.vgtest \ pkcs11.stderr.exp-illumos pkcs11.stderr.exp-solaris pkcs11.stdout.exp pkcs11.vgtest \ scalar.stderr.exp scalar.stdout.exp scalar.vgtest \ + scalar_auditon_stat.stderr.exp scalar_auditon_stat.stdout.exp scalar_auditon_stat.vgtest \ scalar_frealpathat.stderr.exp scalar_frealpathat.stdout.exp scalar_frealpathat.vgtest \ scalar_getrandom.stderr.exp scalar_getrandom.stdout.exp scalar_getrandom.vgtest \ scalar_ioctl.stderr.exp scalar_ioctl.stdout.exp scalar_ioctl.vgtest \ @@ -95,6 +96,10 @@ if SOLARIS_OLD_SYSCALLS check_PROGRAMS += scalar_obsolete endif +if SOLARIS_AUDITON_STAT +check_PROGRAMS += scalar_auditon_stat +endif + if SOLARIS_FREALPATHAT_SYSCALL check_PROGRAMS += scalar_frealpathat endif @@ -146,7 +151,7 @@ if SOLARIS_UUIDSYS_SYSCALL check_PROGRAMS += scalar_uuidsys endif -if SOLARIS_ZONE_DEFUNCT +if SOLARIS_ZONE_DEFUNCT check_PROGRAMS += scalar_zone_defunct endif diff --git a/memcheck/tests/solaris/scalar.c b/memcheck/tests/solaris/scalar.c index a0e340e043..c04bb831d2 100644 --- a/memcheck/tests/solaris/scalar.c +++ b/memcheck/tests/solaris/scalar.c @@ -949,62 +949,48 @@ static void sys_auditsys13(void) __attribute__((noinline)) static void sys_auditsys14(void) -{ - GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETSTAT) 3s 1m"); - SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETSTAT, x0); FAIL; -} - -__attribute__((noinline)) -static void sys_auditsys15(void) -{ - GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETSTAT) 3s 1m"); - SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETSTAT, x0); FAIL; -} - -__attribute__((noinline)) -static void sys_auditsys16(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETUMASK) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETUMASK, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys17(void) +static void sys_auditsys15(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETSMASK) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETSMASK, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys18(void) +static void sys_auditsys16(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCOND) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCOND, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys19(void) +static void sys_auditsys17(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETCOND) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETCOND, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys20(void) +static void sys_auditsys18(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETCLASS) 3s 0m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETCLASS, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys21(void) +static void sys_auditsys19(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETCLASS) 3s 0m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETCLASS, x0 + 1); FAIL; } __attribute__((noinline)) -static void sys_auditsys22(void) +static void sys_auditsys20(void) { au_evclass_map_t classmap; classmap.ec_number = x0; @@ -1015,21 +1001,21 @@ static void sys_auditsys22(void) } __attribute__((noinline)) -static void sys_auditsys23(void) +static void sys_auditsys21(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETPINFO) 3s 0m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETPINFO, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys24(void) +static void sys_auditsys22(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETPMASK) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETPMASK, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys25(void) +static void sys_auditsys23(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETPINFO_ADDR) 4s 0m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETPINFO_ADDR, x0, @@ -1037,49 +1023,49 @@ static void sys_auditsys25(void) } __attribute__((noinline)) -static void sys_auditsys26(void) +static void sys_auditsys24(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETKAUDIT) 4s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETKAUDIT, x0, x0 + 1); FAIL; } __attribute__((noinline)) -static void sys_auditsys27(void) +static void sys_auditsys25(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETKAUDIT) 4s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETKAUDIT, x0, x0 + 1); FAIL; } __attribute__((noinline)) -static void sys_auditsys28(void) +static void sys_auditsys26(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETAMASK) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETAMASK, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys29(void) +static void sys_auditsys27(void) { GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETAMASK) 3s 1m"); SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETAMASK, x0); FAIL; } __attribute__((noinline)) -static void sys_auditsys30(void) +static void sys_auditsys28(void) { GO(SYS_auditsys, "(BSM_GETAUDIT_ADDR) 3s 1m"); SY(SYS_auditsys, x0 + BSM_GETAUDIT_ADDR, x0 + 1, x0 + 1); FAIL; } __attribute__((noinline)) -static void sys_auditsys31(void) +static void sys_auditsys29(void) { GO(SYS_auditsys, "(BSM_SETAUDIT_ADDR) 3s 1m"); SY(SYS_auditsys, x0 + BSM_SETAUDIT_ADDR, x0, x0 + 1); FAIL; } __attribute__((noinline)) -static void sys_auditsys32(void) +static void sys_auditsys30(void) { GO(SYS_auditsys, "(BSM_AUDITDOOR) 2s 0m"); SY(SYS_auditsys, x0 + BSM_AUDITDOOR, x0); FAIL; @@ -2215,8 +2201,6 @@ int main(void) sys_auditsys28(); sys_auditsys29(); sys_auditsys30(); - sys_auditsys31(); - sys_auditsys32(); /* SYS_processor_bind 187 */ /* XXX Missing wrapper. */ diff --git a/memcheck/tests/solaris/scalar.stderr.exp b/memcheck/tests/solaris/scalar.stderr.exp index 1593cb559f..0686d4a3fe 100644 --- a/memcheck/tests/solaris/scalar.stderr.exp +++ b/memcheck/tests/solaris/scalar.stderr.exp @@ -3466,38 +3466,6 @@ Syscall param auditsys(data) points to unaddressable byte(s) ... Address 0x........ is not stack'd, malloc'd or (recently) free'd ---------------------------------------------------------- -186: SYS_auditsys (BSM_AUDITCTL,A_GETSTAT) 3s 1m ---------------------------------------------------------- -Syscall param auditsys_auditctl_getstat(code) contains uninitialised byte(s) - ... - -Syscall param auditsys_auditctl_getstat(cmd) contains uninitialised byte(s) - ... - -Syscall param auditsys_auditctl_getstat(stats) contains uninitialised byte(s) - ... - -Syscall param auditsys(stats) points to unaddressable byte(s) - ... - Address 0x........ is not stack'd, malloc'd or (recently) free'd - ---------------------------------------------------------- -186: SYS_auditsys (BSM_AUDITCTL,A_SETSTAT) 3s 1m ---------------------------------------------------------- -Syscall param auditsys_auditctl_setstat(code) contains uninitialised byte(s) - ... - -Syscall param auditsys_auditctl_setstat(cmd) contains uninitialised byte(s) - ... - -Syscall param auditsys_auditctl_setstat(stats) contains uninitialised byte(s) - ... - -Syscall param auditsys(stats) points to unaddressable byte(s) - ... - Address 0x........ is not stack'd, malloc'd or (recently) free'd - --------------------------------------------------------- 186: SYS_auditsys (BSM_AUDITCTL,A_SETUMASK) 3s 1m --------------------------------------------------------- diff --git a/memcheck/tests/solaris/scalar_auditon_stat.c b/memcheck/tests/solaris/scalar_auditon_stat.c new file mode 100644 index 0000000000..9f95ad1c8e --- /dev/null +++ b/memcheck/tests/solaris/scalar_auditon_stat.c @@ -0,0 +1,35 @@ +/* Scalar test for commands A_GETSTAT and A_SETSTAT for auditon(2) subcode + of the auditsys() syscall. Available on Solaris 11 and illumos, + removed in Solaris 12. */ + +#include "scalar.h" + +#include + +__attribute__((noinline)) +static void sys_auditsys(void) +{ + GO(SYS_auditsys, "(BSM_AUDITCTL,A_GETSTAT) 3s 1m"); + SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_GETSTAT, x0); FAIL; +} + +__attribute__((noinline)) +static void sys_auditsys2(void) +{ + GO(SYS_auditsys, "(BSM_AUDITCTL,A_SETSTAT) 3s 1m"); + SY(SYS_auditsys, x0 + BSM_AUDITCTL, x0 + A_SETSTAT, x0); FAIL; +} + +int main(void) +{ + /* Uninitialised, but we know px[0] is 0x0. */ + long *px = malloc(sizeof(long)); + x0 = px[0]; + + /* SYS_auditsys 186 */ + sys_auditsys(); + sys_auditsys2(); + + return 0; +} + diff --git a/memcheck/tests/solaris/scalar_auditon_stat.stderr.exp b/memcheck/tests/solaris/scalar_auditon_stat.stderr.exp new file mode 100644 index 0000000000..1cb42bdb4a --- /dev/null +++ b/memcheck/tests/solaris/scalar_auditon_stat.stderr.exp @@ -0,0 +1,32 @@ +--------------------------------------------------------- +186: SYS_auditsys (BSM_AUDITCTL,A_GETSTAT) 3s 1m +--------------------------------------------------------- +Syscall param auditsys_auditctl_getstat(code) contains uninitialised byte(s) + ... + +Syscall param auditsys_auditctl_getstat(cmd) contains uninitialised byte(s) + ... + +Syscall param auditsys_auditctl_getstat(stats) contains uninitialised byte(s) + ... + +Syscall param auditsys(stats) points to unaddressable byte(s) + ... + Address 0x........ is not stack'd, malloc'd or (recently) free'd + +--------------------------------------------------------- +186: SYS_auditsys (BSM_AUDITCTL,A_SETSTAT) 3s 1m +--------------------------------------------------------- +Syscall param auditsys_auditctl_setstat(code) contains uninitialised byte(s) + ... + +Syscall param auditsys_auditctl_setstat(cmd) contains uninitialised byte(s) + ... + +Syscall param auditsys_auditctl_setstat(stats) contains uninitialised byte(s) + ... + +Syscall param auditsys(stats) points to unaddressable byte(s) + ... + Address 0x........ is not stack'd, malloc'd or (recently) free'd + diff --git a/memcheck/tests/solaris/scalar_auditon_stat.stdout.exp b/memcheck/tests/solaris/scalar_auditon_stat.stdout.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/solaris/scalar_auditon_stat.vgtest b/memcheck/tests/solaris/scalar_auditon_stat.vgtest new file mode 100644 index 0000000000..49eef285f8 --- /dev/null +++ b/memcheck/tests/solaris/scalar_auditon_stat.vgtest @@ -0,0 +1,4 @@ +prereq: test -e scalar_auditon_stat +prog: scalar_auditon_stat +vgopts: -q +stderr_filter_args: