From 6076d2c38b62b4271c7938a17d7f4e03248cad4b Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 8 May 2006 11:58:06 +0000 Subject: [PATCH] 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 --- coregrind/m_syswrap/syswrap-generic.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) 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) ); -- 2.47.2