]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Solaris syscall: commands A_GETSTAT and A_SETSTAT
authorIvo Raisr <ivosh@ivosh.net>
Wed, 17 Feb 2016 18:11:32 +0000 (18:11 +0000)
committerIvo Raisr <ivosh@ivosh.net>
Wed, 17 Feb 2016 18:11:32 +0000 (18:11 +0000)
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

configure.ac
coregrind/m_syswrap/syswrap-solaris.c
include/vki/vki-solaris.h
memcheck/tests/solaris/Makefile.am
memcheck/tests/solaris/scalar.c
memcheck/tests/solaris/scalar.stderr.exp
memcheck/tests/solaris/scalar_auditon_stat.c [new file with mode: 0644]
memcheck/tests/solaris/scalar_auditon_stat.stderr.exp [new file with mode: 0644]
memcheck/tests/solaris/scalar_auditon_stat.stdout.exp [new file with mode: 0644]
memcheck/tests/solaris/scalar_auditon_stat.vgtest [new file with mode: 0644]

index 980dbdb8e88e957c7a6d264cd4652f393801aa62..87fcf35b6aac83834eea08464aae187cf6521088 100644 (file)
@@ -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 <bsm/audit.h>
+]], [[
+  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)
index df22aec5dd98fdfe7fed386cdb57ab2c784cfe6c..3d0a5226ba2ab082b2214b60653ac3b5a56cd97f 100644 (file)
@@ -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;
index cc3b9d975bd60fcc12905e24b5a50e7f156d1514..babc1f2dd350470053e8d4836f3b4d9da0314003 100644 (file)
@@ -28,7 +28,7 @@
    The GNU General Public License is contained in the file COPYING.
 */
 
-/* Copyright 2013-2015, Ivo Raisr <ivosh@ivosh.net> */
+/* Copyright 2013-2016, Ivo Raisr <ivosh@ivosh.net> */
 
 /* 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 <sys/psw.h>
index 1a310fa82812cf1313bba22bcdabf122a0eece84..672a5cf5fc373d151cef913c2674de45b1ad79d2 100644 (file)
@@ -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
 
index a0e340e0439b218b860c0bb4b0dbfda7714329cf..c04bb831d2e4c97155de819b65de6e83aa3fd2a3 100644 (file)
@@ -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. */
index 1593cb559f6350bf6efcc351e62ec62e1c9a4197..0686d4a3fef7a0d4273345c8dc819fa947fae40b 100644 (file)
@@ -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 (file)
index 0000000..9f95ad1
--- /dev/null
@@ -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 <bsm/audit.h>
+
+__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 (file)
index 0000000..1cb42bd
--- /dev/null
@@ -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 (file)
index 0000000..e69de29
diff --git a/memcheck/tests/solaris/scalar_auditon_stat.vgtest b/memcheck/tests/solaris/scalar_auditon_stat.vgtest
new file mode 100644 (file)
index 0000000..49eef28
--- /dev/null
@@ -0,0 +1,4 @@
+prereq: test -e scalar_auditon_stat
+prog: scalar_auditon_stat
+vgopts: -q
+stderr_filter_args: