From ffcb955c343366973158881ae6c1ee94a578ae75 Mon Sep 17 00:00:00 2001 From: Ivo Raisr Date: Mon, 16 May 2016 12:51:27 +0000 Subject: [PATCH] Solaris: Add wrapper for setparam subcode of the door syscall. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15879 --- coregrind/m_syswrap/syswrap-solaris.c | 3 ++- memcheck/tests/solaris/scalar.c | 8 ++++++++ memcheck/tests/solaris/scalar.stderr.exp | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c index f30bd9cd48..bf1154a497 100644 --- a/coregrind/m_syswrap/syswrap-solaris.c +++ b/coregrind/m_syswrap/syswrap-solaris.c @@ -9061,7 +9061,8 @@ PRE(sys_door) case VKI_DOOR_SETPARAM: PRE_REG_READ3(long, "door", long, arg1, long, arg2, long, arg3); PRE_REG_READ_SIXTH_ONLY; - VG_(unimplemented)("DOOR_SETPARAM"); + if (!ML_(fd_allowed)(ARG1, "door_setparam", tid, False)) + SET_STATUS_Failure(VKI_EBADF); break; default: VG_(unimplemented)("Syswrap of the door call with subcode %ld.", SARG6); diff --git a/memcheck/tests/solaris/scalar.c b/memcheck/tests/solaris/scalar.c index 3947bc0ed1..eadf3c4cef 100644 --- a/memcheck/tests/solaris/scalar.c +++ b/memcheck/tests/solaris/scalar.c @@ -1196,6 +1196,13 @@ static void sys_door5(void) SY(SYS_door, x0, x0 + ¶ms, x0, x0, x0, x0 + DOOR_CALL); FAIL; } +__attribute__((noinline)) +static void sys_door6(void) +{ + GO(SYS_door, "(DOOR_SETPARAM) 4s 0m"); + SY(SYS_door, x0, x0 - 1, x0 + 1, x0, x0, x0 + DOOR_SETPARAM); FAIL; +} + __attribute__((noinline)) static void sys_pset(void) { @@ -2290,6 +2297,7 @@ int main(void) sys_door3(); sys_door4(); sys_door5(); + sys_door6(); /* XXX Additional sys_door variants still unimplemented. */ /* SYS_setreuid 202 */ diff --git a/memcheck/tests/solaris/scalar.stderr.exp b/memcheck/tests/solaris/scalar.stderr.exp index ceddcf29d7..a7275204ea 100644 --- a/memcheck/tests/solaris/scalar.stderr.exp +++ b/memcheck/tests/solaris/scalar.stderr.exp @@ -4178,6 +4178,21 @@ Syscall param door_call(params->rbuf) points to unaddressable byte(s) ... Address 0x........ is not stack'd, malloc'd or (recently) free'd +--------------------------------------------------------- +201: SYS_door (DOOR_SETPARAM) 4s 0m +--------------------------------------------------------- +Syscall param door(arg1) contains uninitialised byte(s) + ... + +Syscall param door(arg2) contains uninitialised byte(s) + ... + +Syscall param door(arg3) contains uninitialised byte(s) + ... + +Syscall param door(subcode) contains uninitialised byte(s) + ... + --------------------------------------------------------- 202: SYS_setreuid 2s 0m --------------------------------------------------------- -- 2.47.2