Date: Wed, 28 Jan 2009 13:30:06 +0100 From: Christoph Mallon <christoph.mallon@gmx.de> To: Channa <channa.kad@gmail.com> Cc: freebsd-current@freebsd.org Subject: Re: Jemalloc SEGV for 1MB chunk Message-ID: <49804FCE.7090405@gmx.de> In-Reply-To: <515c64960901280425y642a190ka31409cfc2a2fd8f@mail.gmail.com> References: <515c64960901280339m17fa9309v2e1bc3f55454ab@mail.gmail.com> <49804597.6040303@gmx.de> <515c64960901280401w1e1d08bfx29adc124bc749c4a@mail.gmail.com> <E1LS9Pa-000NBW-Ct@kabab.cs.huji.ac.il> <515c64960901280425y642a190ka31409cfc2a2fd8f@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Channa schrieb: > Hi, > Thanks for the reply. > > I understand , after terminating the string with NULL character no SEGV is seen. > > But if i change the request size to a value less than 1MB for eg: 4096 Bytes, > > As in the below test code: > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > > int main() > { > int i; > char *buf; > size_t size = 4096 ; > > buf = malloc(size); > for (i = 0; i < size; i++) > buf[i] = 'a'; > printf("The length of buff is : %d\n",strlen(buf)); > free(buf); > return 0; > } > > I dont see any issues, without terminating the string with NULL > character the test code works fine. The issue is seen only for size > 1MB exactly. > > Can anyone explain this behaviour? Undefined behaviour and (bad) luck. You are reading random garbage from memory. For a large allocation like 1MB you get page aligned memory and the page after the allocation is very likely not mapped, so you get a segfault when you try to access it. This really does not belong on freebsd-current@.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49804FCE.7090405>