From: Julian Seward Date: Wed, 19 Nov 2014 09:13:12 +0000 (+0000) Subject: Fix up the wrapper for getdirentries64 a bit so as to avoid false positives X-Git-Tag: svn/VALGRIND_3_11_0~816 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04e03a5709c97a67f2d919b726c00d52804fa194;p=thirdparty%2Fvalgrind.git Fix up the wrapper for getdirentries64 a bit so as to avoid false positives from it. Unfortunately I can't tell why this was happening. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14733 --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 30e6d776df..de79f057f6 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -3870,12 +3870,21 @@ PRE(getdirentries64) PRINT("getdirentries64(%ld, %#lx, %lu, %#lx)", ARG1, ARG2, ARG3, ARG4); PRE_REG_READ4(vki_ssize_t, "getdirentries", int,fd, char *,buf, vki_size_t,nbytes, vki_off_t *,basep); - PRE_MEM_WRITE("getdirentries(position)", ARG4, sizeof(vki_off_t)); - PRE_MEM_WRITE("getdirentries(buf)", ARG2, ARG3); + /* JRS 18-Nov-2014: it appears that sometimes |basep| doesn't point + to valid memory and the kernel doesn't modify it. I can't + determine the conditions under which that happens. But it + causes Memcheck to complain, confusingly. So disable this check + for the time being. + + PRE_MEM_WRITE("getdirentries64(position)", ARG4, sizeof(vki_off_t)); + */ + PRE_MEM_WRITE("getdirentries64(buf)", ARG2, ARG3); } POST(getdirentries64) { - POST_MEM_WRITE(ARG4, sizeof(vki_off_t)); + /* Disabled; see coments in the PRE wrapper. + POST_MEM_WRITE(ARG4, sizeof(vki_off_t)); + */ // GrP fixme be specific about d_name? (fixme copied from 32 bit version) POST_MEM_WRITE(ARG2, RES); }