On Wed, Nov 03, 2010 at 01:18:51PM +0200, Alexey Suslikov wrote:
> Hello t...@.
>
> On OpenBSD/amd64, doing something like
> char *buf = mmap(NULL, len + 1, PROT_READ | PROT_WRITE,
> MAP_PRIVATE, some.fd, 0);
> buf[len] = '\0';
> causes segfault on buf[len] = '\0' assignment if len = 16384.
>
> However doing
> char *buf = mmap(NULL, len + 1, PROT_READ | PROT_WRITE,
> MAP_PRIVATE, some.fd, 0);
> char *nbuf = malloc(len + 1);
> memcpy(nbuf, buf, len);
> nbuf[len] = '\0';
> does not lead to a crash.
>
> Is it expected behavior of mmap (alignment?) or usage of mmap is wrong?
>
> Thanks.
>
> Alexey
This (complete!) program does not show the behahaviour. Please post a
complete testcase. Did you include sys/mman.h?
-Otto
#include <sys/types.h>
#include <sys/mman.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
int
main()
{
int fd;
char *buf;
size_t len;
fd = open("file", O_RDWR, 0);
if (fd == -1)
err(1, NULL);
len = 16384;
buf = mmap(NULL, len + 1, PROT_READ | PROT_WRITE, MAP_PRIVATE,
fd, (off_t)0);
if (buf == MAP_FAILED)
err(1, NULL);
buf[len] = '\0';
}