Re: Jemalloc SEGV for 1MB chunk

From: Søren Schmidt <sos_at_freebsd.org>
Date: Wed, 28 Jan 2009 13:53:50 +0100
On 28Jan, 2009, at 13:45 , Channa wrote:

> Hi,
> "This really does not belong on freebsd-current_at_." by this you mean to
> say in FreeBSD current this problem is not seen.
>
> Are you referring to FreeBSD current jemalloc version which is  
> "1.183".
> Since i am using the same Version of jemalloc to test the code.
>
> Could you please elaborate more if my understanding on your statment  
> is correct?

You are using strlen() on a string that is not NULL terminated. That  
is a violation of how strlen() works, and the result is undefined.  
That means anything can happen including killing you dog, eating your  
first born child etc etc.

To be brutally honest with you, this is one of the most important  
things you (should) learn when using strings in 'C', that is why it  
doesn't belong here on the list.

-Søren

>
>
> Thanks in Advance,
> Channa
>
>
> On 28/01/2009, Christoph Mallon <christoph.mallon_at_gmx.de> wrote:
>> 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_at_.
>>
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org 
> "
>

-Søren
Received on Wed Jan 28 2009 - 11:53:54 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC