Author: iraisr
Date: Sun May 29 10:29:28 2016
New Revision: 15884
Log:
Solaris: Add ioctl wrappers for DINFOUSRLD and DINFOIDENT.
n-i-bz
Modified:
trunk/coregrind/m_syswrap/syswrap-solaris.c
trunk/include/vki/vki-solaris.h
trunk/memcheck/tests/solaris/scalar_ioctl.c
trunk/memcheck/tests/solaris/scalar_ioctl.stderr.exp
Modified: trunk/coregrind/m_syswrap/syswrap-solaris.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-solaris.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-solaris.c Sun May 29 10:29:28 2016
@@ -826,7 +826,7 @@
}
/* Revokes an open door, be it server side or client side. */
-static void door_revoke(ThreadId tid, Int fd)
+static void door_record_revoke(ThreadId tid, Int fd)
{
OpenDoor *d = doors_recorded;
@@ -850,7 +850,7 @@
}
/* Attaches a server door to a filename. */
-static void door_server_fattach(Int fd, HChar *pathname)
+static void door_record_server_fattach(Int fd, HChar *pathname)
{
OpenDoor *d = doors_recorded;
@@ -1783,7 +1783,7 @@
POST(sys_close)
{
WRAPPER_POST_NAME(generic, sys_close)(tid, arrghs, status);
- door_revoke(tid, ARG1);
+ door_record_revoke(tid, ARG1);
/* Possibly an explicitly open'ed client door fd was just closed.
Generic sys_close wrapper calls this only if VG_(clo_track_fds) = True. */
if (!VG_(clo_track_fds))
@@ -2278,7 +2278,8 @@
(ARG6 == sizeof(struct vki_namefd)) &&
ML_(safe_to_deref)((void *) ARG5, ARG6)) {
/* Most likely an fattach() call for a door file descriptor. */
- door_server_fattach(((struct vki_namefd *) ARG5)->fd, (HChar *) ARG2);
+ door_record_server_fattach(((struct vki_namefd *) ARG5)->fd,
+ (HChar *) ARG2);
}
}
}
@@ -3021,6 +3022,7 @@
switch (cmd /*request*/) {
/* Handle 2-arg specially here (they do not use ARG3 at all). */
+ case VKI_DINFOIDENT:
case VKI_TIOCNOTTY:
case VKI_TIOCSCTTY:
PRINT("sys_ioctl ( %ld, %#lx )", SARG1, ARG2);
@@ -3295,6 +3297,13 @@
}
break;
+ /* devinfo */
+ case VKI_DINFOUSRLD:
+ /* We should do PRE_MEM_WRITE here but the question is for how many? */
+ break;
+ case VKI_DINFOIDENT:
+ break;
+
default:
ML_(PRE_unknown_ioctl)(tid, ARG2, ARG3);
break;
@@ -3497,6 +3506,13 @@
case VKI_DTRACEHIOC_ADDDOF:
break;
+ /* devinfo */
+ case VKI_DINFOUSRLD:
+ POST_MEM_WRITE(ARG3, RES);
+ break;
+ case VKI_DINFOIDENT:
+ break;
+
default:
/* Not really anything to do since ioctl direction hints are hardly used
on Solaris. */
@@ -9266,7 +9282,7 @@
door_record_server(tid, ARG1, RES);
break;
case VKI_DOOR_REVOKE:
- door_revoke(tid, ARG1);
+ door_record_revoke(tid, ARG1);
if (VG_(clo_track_fds))
ML_(record_fd_close)(ARG1);
break;
Modified: trunk/include/vki/vki-solaris.h
==============================================================================
--- trunk/include/vki/vki-solaris.h (original)
+++ trunk/include/vki/vki-solaris.h Sun May 29 10:29:28 2016
@@ -345,6 +345,12 @@
#define vki_crypto_get_provider_list_t crypto_get_provider_list_t
+#include <sys/dditypes.h>
+#include <sys/devinfo_impl.h>
+#define VKI_DINFOUSRLD DINFOUSRLD
+#define VKI_DINFOIDENT DINFOIDENT
+
+
#include <sys/dirent.h>
#define VKI_MAXGETDENTS_SIZE MAXGETDENTS_SIZE
#define vki_dirent dirent
Modified: trunk/memcheck/tests/solaris/scalar_ioctl.c
==============================================================================
--- trunk/memcheck/tests/solaris/scalar_ioctl.c (original)
+++ trunk/memcheck/tests/solaris/scalar_ioctl.c Sun May 29 10:29:28 2016
@@ -6,6 +6,8 @@
#include <net/if.h>
#include <sys/crypto/ioctl.h>
+#include <sys/dditypes.h>
+#include <sys/devinfo_impl.h>
#include <sys/dtrace.h>
#include <sys/filio.h>
#include <sys/stat.h> /* for _ST_FSTYPSZ */
@@ -458,6 +460,20 @@
SY(SYS_ioctl, x0 - 1, x0 + DTRACEHIOC_ADDDOF, x0 + &dh); FAIL;
}
+__attribute__((noinline))
+static void sys_ioctl_DINFOUSRLD(void)
+{
+ GO(SYS_ioctl, "(DINFOUSRLD) 3s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + DINFOUSRLD, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_DINFOIDENT(void)
+{
+ GO(SYS_ioctl, "(DINFOIDENT) 2s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + DINFOIDENT); FAIL;
+}
+
int main(void)
{
/* Uninitialised, but we know px[0] is 0x0. */
@@ -527,6 +543,10 @@
sys_ioctl_DTRACEHIOC_REMOVE();
sys_ioctl_DTRACEHIOC_ADDDOF();
+ /* devinfo */
+ sys_ioctl_DINFOUSRLD();
+ sys_ioctl_DINFOIDENT();
+
return 0;
}
Modified: trunk/memcheck/tests/solaris/scalar_ioctl.stderr.exp
==============================================================================
--- trunk/memcheck/tests/solaris/scalar_ioctl.stderr.exp (original)
+++ trunk/memcheck/tests/solaris/scalar_ioctl.stderr.exp Sun May 29 10:29:28 2016
@@ -875,3 +875,24 @@
...
Address 0x........ is on thread 1's stack
+---------------------------------------------------------
+ 54: SYS_ioctl (DINFOUSRLD) 3s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+---------------------------------------------------------
+ 54: SYS_ioctl (DINFOIDENT) 2s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
|