Re: [RFC 2/2] Make misuse of get_pathname() buffers detectable by valgrind
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Nov 16, 2011, 14:18 UTC
- Message-ID
- <CACsJy8BK3zvxA5mpC+3UvYMe20X6iFWJ7JL+VH6fr-Xstw2usg@mail.gmail.com>
- In-Reply-To
- <1317097687-11098-3-git-send-email-mhagger@alum.mit.edu>
On Tue, Sep 27, 2011 at 11:28 AM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
Show 18 quoted lines
> +#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];
> +#elseNot 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