From: Tom Hughes Date: Mon, 8 May 2006 11:58:06 +0000 (+0000) Subject: Don't check the fifth argument of mremap() unless MREMAP_FIXED is set X-Git-Tag: svn/VALGRIND_3_2_0~73 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6076d2c38b62b4271c7938a17d7f4e03248cad4b;p=thirdparty%2Fvalgrind.git Don't check the fifth argument of mremap() unless MREMAP_FIXED is set in the fourth argument. Fix to bug #123535. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5886 --- diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index 3054738318..b25c161db7 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -2109,12 +2109,20 @@ PRE(sys_mremap) { // Nb: this is different to the glibc version described in the man pages, // which lacks the fifth 'new_address' argument. - PRINT("sys_mremap ( %p, %llu, %d, 0x%x, %p )", - ARG1, (ULong)ARG2, ARG3, ARG4, ARG5); - PRE_REG_READ5(unsigned long, "mremap", - unsigned long, old_addr, unsigned long, old_size, - unsigned long, new_size, unsigned long, flags, - unsigned long, new_addr); + if (ARG4 & VKI_MREMAP_FIXED) { + PRINT("sys_mremap ( %p, %llu, %d, 0x%x, %p )", + ARG1, (ULong)ARG2, ARG3, ARG4, ARG5); + PRE_REG_READ5(unsigned long, "mremap", + unsigned long, old_addr, unsigned long, old_size, + unsigned long, new_size, unsigned long, flags, + unsigned long, new_addr); + } else { + PRINT("sys_mremap ( %p, %llu, %d, 0x%x )", + ARG1, (ULong)ARG2, ARG3, ARG4); + PRE_REG_READ4(unsigned long, "mremap", + unsigned long, old_addr, unsigned long, old_size, + unsigned long, new_size, unsigned long, flags); + } SET_STATUS_from_SysRes( do_mremap((Addr)ARG1, ARG2, (Addr)ARG5, ARG3, ARG4, tid) );