From: Nguyen Thai Ngoc Duy Date: Wed, 16 Nov 2011 14:18:53 GMT Subject: Re: [RFC 2/2] Make misuse of get_pathname() buffers detectable by valgrind Message-ID: In-Reply-To: <1317097687-11098-3-git-send-email-mhagger@alum.mit.edu> On Tue, Sep 27, 2011 at 11:28 AM, Michael Haggerty wrote: > +#ifdef VALGRIND > +       static char *pathname_array[PATHNAME_BUFFER_COUNT]; > +       index = (index + 1) & (PATHNAME_BUFFER_COUNT - 1); > +       if (pathname_array[index]) { > +               /* > +                * In a correct program, this will have no effect, but > +                * *if* somebody erroneously uses this buffer after it > +                * has been freed, it gives more of a chance that the > +                * error will be detected even if valgrind is not > +                * running: > +                */ > +               strcpy(pathname_array[index], buggy_path); > + > +               free(pathname_array[index]); > +       } > +       pathname_array[index] = xmalloc(PATH_MAX); > +       return pathname_array[index]; > +#else Not sure if it works (just read man pages, haven't tried anything) I'm thinking to use mmap() with MAP_ANONYMOUS instead of xmalloc(), then mprotect() instead of free() to remove read access from that area. Any access after that should be caught. Leaking may not be severe for git_path(), hopefully. -- Duy