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'; }