Code Coherency

Posted on Fri 17 June 2005 by alex in general

Have you ever written a piece of code that doesn't behave like it should? A failure thats so unexpected you start to doubt your own abilities? The majority of this morning has been taken up with following up on some oddness I saw last
night which made me blink. In the end I had 2 other people look at my code to make sure I wasn't going mad. Consider the following generic Un*x code:
/*
** Code that don't behave quite what like it ought to
*/

#include
#include      /* memset() */
#include    /* mmap() */

int main(int argc, char **argv)
{
    int pg_sz = getpagesize();
    void *page;

    page  = mmap(0,pg_sz,PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);

    memset(page,'w',pg_sz);

    printf("data = %c\n", *(char *) (page));
}

Try it on your own favourite POSIX machine and let me know if it doesn't segfault. I am still trying to work out if this is exploitable in some way.