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.
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)
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);
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);
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;
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. */
#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
#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
#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>
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 \
check_PROGRAMS += scalar_obsolete
endif
+if SOLARIS_AUDITON_STAT
+check_PROGRAMS += scalar_auditon_stat
+endif
+
if SOLARIS_FREALPATHAT_SYSCALL
check_PROGRAMS += scalar_frealpathat
endif
check_PROGRAMS += scalar_uuidsys
endif
-if SOLARIS_ZONE_DEFUNCT
+if SOLARIS_ZONE_DEFUNCT
check_PROGRAMS += scalar_zone_defunct
endif
__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;
}
__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,
}
__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;
sys_auditsys28();
sys_auditsys29();
sys_auditsys30();
- sys_auditsys31();
- sys_auditsys32();
/* SYS_processor_bind 187 */
/* XXX Missing wrapper. */
...
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
---------------------------------------------------------
--- /dev/null
+/* 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;
+}
+
--- /dev/null
+---------------------------------------------------------
+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
+
--- /dev/null
+prereq: test -e scalar_auditon_stat
+prog: scalar_auditon_stat
+vgopts: -q
+stderr_filter_args: