From 128fd6e6a5c94beb6af97ff8146a91422ab50efb Mon Sep 17 00:00:00 2001 From: Rhys Kidd Date: Sun, 10 Sep 2017 01:12:15 -0400 Subject: [PATCH] Fix syscall param msg->desc.port.name on macOS 10.12. bz#379373 Based upon patch from Louis Brunner. --- NEWS | 2 ++ coregrind/m_syswrap/syswrap-darwin.c | 18 +++++++++++++++--- darwin14.supp | 18 ------------------ darwin15.supp | 18 ------------------ darwin16.supp | 18 ------------------ 5 files changed, 17 insertions(+), 57 deletions(-) diff --git a/NEWS b/NEWS index 1b5c80a258..e43410acb6 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,8 @@ To see details of a given bug, visit https://bugs.kde.org/show_bug.cgi?id=XXXXXX where XXXXXX is the bug number as listed below. +379373 Fix syscall param msg->desc.port.name points to uninitialised byte(s) + on macOS 10.12 379748 Fix missing pselect syscall (OS X 10.11) 380397 s390x: __GI_strcspn() replacemenet needed 381162 possible array overrun in VEX register allocator diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 0ae281ce81..06708247b4 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -9580,8 +9580,20 @@ PRE(kernelrpc_mach_port_construct_trap) { UWord a1; UWord a2; ULong a3; UWord a4; munge_wwlw(&a1, &a2, &a3, &a4, ARG1, ARG2, ARG3, ARG4, ARG5); - PRINT("kernelrpc_mach_port_construct_trap(FIXME)" - "(%lx,%lx,%llx,%lx)", a1, a2, a3, a4); + PRINT("kernelrpc_mach_port_construct_trap" + "(target: %s, options: %#lx, content: %llx, name: %p)", + name_for_port(a1), a2, a3, *(mach_port_name_t**)a4); + PRE_MEM_WRITE("kernelrpc_mach_port_construct_trap(name)", a4, + sizeof(mach_port_name_t*)); +} +POST(kernelrpc_mach_port_construct_trap) +{ + UWord a1; UWord a2; ULong a3; UWord a4; + munge_wwlw(&a1, &a2, &a3, &a4, ARG1, ARG2, ARG3, ARG4, ARG5); + PRINT("-> name:%p", *(mach_port_name_t**)a4); + if (ML_(safe_to_deref)((mach_port_name_t*)a4, sizeof(mach_port_name_t*))) { + POST_MEM_WRITE(a4, sizeof(mach_port_name_t*)); + } } PRE(kernelrpc_mach_port_destruct_trap) @@ -10597,7 +10609,7 @@ const SyscallTableEntry ML_(mach_trap_table)[] = { # endif # if DARWIN_VERS >= DARWIN_10_9 - MACX_(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(24), kernelrpc_mach_port_construct_trap), + MACXY(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(24), kernelrpc_mach_port_construct_trap), MACX_(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(25), kernelrpc_mach_port_destruct_trap), # else _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(24)), diff --git a/darwin14.supp b/darwin14.supp index ba818d5390..63fe2b4e67 100644 --- a/darwin14.supp +++ b/darwin14.supp @@ -665,24 +665,6 @@ obj:*GPUSupport.framework*GPUSupportMercury* } -{ - OSX1010:mach_msg_trap-1 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*libsystem_kernel.dylib* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - -{ - OSX1010:mach_msg_trap-2 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*SystemConfiguration.framework*SystemConfiguration* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - # See https://bugs.kde.org/show_bug.cgi?id=188572 about this; it's # unavoidable due to BSD setenv() semantics. { diff --git a/darwin15.supp b/darwin15.supp index e745cf02e7..a383d24b68 100644 --- a/darwin15.supp +++ b/darwin15.supp @@ -724,24 +724,6 @@ obj:*GPUSupport.framework*GPUSupportMercury* } -{ - OSX1011:mach_msg_trap-1 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*libsystem_kernel.dylib* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - -{ - OSX1011:mach_msg_trap-2 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*SystemConfiguration.framework*SystemConfiguration* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - # See https://bugs.kde.org/show_bug.cgi?id=188572 about this; it's # unavoidable due to BSD setenv() semantics. { diff --git a/darwin16.supp b/darwin16.supp index b3f9dbd328..18dda6a703 100644 --- a/darwin16.supp +++ b/darwin16.supp @@ -749,24 +749,6 @@ obj:*GPUSupport.framework*GPUSupportMercury* } -{ - OSX1012:mach_msg_trap-1 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*libsystem_kernel.dylib* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - -{ - OSX1012:mach_msg_trap-2 - Memcheck:Param - msg->desc.port.name - fun:mach_msg_trap - obj:*SystemConfiguration.framework*SystemConfiguration* - obj:*SystemConfiguration.framework*SystemConfiguration* -} - # See https://bugs.kde.org/show_bug.cgi?id=188572 about this; it's # unavoidable due to BSD setenv() semantics. { -- 2.47.2