buf->start = mmap(NULL, buf->len + PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (buf->start == MAP_FAILED)
die("mmap(anonymous): %m");
if (mprotect(buf->start + buf->len, PAGE_SIZE, PROT_NONE) < 0)
die("mprotect: %m");
buf->start = mmap(NULL, buf->len + PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (buf->start == MAP_FAILED)
die("mmap(anonymous): %m");
if (mprotect(buf->start + buf->len, PAGE_SIZE, PROT_NONE) < 0)
die("mprotect: %m");