Sharyathi Nagesh пишет:
> Hi Andrew
>   While debugging I observed they are allocating memory block of size 
> 1 and freeing it and the problem was noticed while doing that as the 
> pointer is of type long.
>
>   This problem is noticed only in thread context 
we have data corruption and any actions may fail after it.
> and I am not noticing the same problem when I execute this test case
> ----------------------------------------------------
> #include<stdio.h>
>
> int main()
> {
>         long int  *ptr;
>         ptr = malloc(1);
>         free(ptr);
>         printf("\n Success");
> }
> ----------------------------------------------------
you code is absolutely correct while hasn't access to this pointer.
#include <stdio.h>
int main()
{
        long int  *ptr;
        ptr = malloc(1);
        *ptr = 1;
        free(ptr);
        printf("\n Success");
}

==29690== Invalid write of size 4
==29690==    at 0x8048447: main (in /home/shpagin/a.out)
==29690==  Address 0x4177028 is 0 bytes inside a block of size 1 alloc'd
==29690==    at 0x4022E88: malloc (in 
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==29690==    by 0x8048440: main (in /home/shpagin/a.out)

>
> More over for me it looks like glibc issue when I tracked the
> glibc code the problem is noticed in this part of the code (glibc)
>
> free_check(){
> > ...........
> >   (void)mutex_lock(&main_arena.mutex);
> >   p = mem2chunk_check(mem, NULL);   <== which is failing
>
> I was thinking should we change mem2chunk_chekc() to take care of this 
> scenario ?
I don't understand what do you want handle in it.
>
> Will be eager to hear from you please let me know your thoughts
> Thanks
> Sharyathi
>
> [EMAIL PROTECTED] wrote:
>> Hi, All.
>>
>> Rishikesh K. Rajak wrote:
>>> On Wed, 2008-11-12 at 13:34 +0300, Andrew Vagin wrote:
>>>> Hi, All.
>>>>
>>>> Rishi, can you attach log from strace -f 
>>>> ./testcases/kernel/mem/mtest07/mallocstress ?
>>>>
>>>
>>> Andrew, Sorry i could not expect this mail to go somewhere else. 
>>> Attached is the strace output.
>> Thanks.
>> I found error for help valgrind.
>>
>> ==13393== Thread 56:
>> ==13393== Invalid write of size 8
>> ==13393==    at 0x400C27: allocate_free (mallocstress.c:198)
>> ==13393==    by 0x400E4D: alloc_mem (mallocstress.c:281)
>> ==13393==    by 0x3B5F007299: start_thread (in /lib64/libpthread-2.8.so)
>> ==13393==    by 0x3B5E4E439C: clone (in /lib64/libc-2.8.so)
>> ==13393==  Address 0x4c36a60 is 0 bytes inside a block of size 1 alloc'd
>> ==13393==    at 0x4A0739E: malloc (vg_replace_malloc.c:207)
>> ==13393==    by 0x400BF0: allocate_free (mallocstress.c:192)
>> ==13393==    by 0x400E4D: alloc_mem (mallocstress.c:281)
>> ==13393==    by 0x3B5F007299: start_thread (in /lib64/libpthread-2.8.so)
>> ==13393==    by 0x3B5E4E439C: clone (in /lib64/libc-2.8.so)
>>
>> (gdb) print i
>> $1 = 0
>> (gdb) print alloc_num
>> No symbol "alloc_num" in current context.
>> (gdb) print num_alloc
>> $2 = 0
>> (gdb) print size
>> $3 = 1
>>
>> strick the eye, we have pointer with type long, but allocate one byte 
>> only.
>>
>> size_t  size       = 1;
>> long    *ptrs[MAXPTRS];
>> ......
>> ptrs[num_alloc] = (long *)malloc(size);
>>
>> I use valgrind first time. Thanks for this possibility:).
>>
>> see the attached patch
>> test passed and valgrind don't report errors after my patch
>>
>> Thread [34]: allocate_free() returned 0, succeeded.  Thread exiting.
>> main(): test passed.
>> ==13299==
>> ==13299== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 1)
>> ==13299== malloc/free: in use at exit: 0 bytes in 0 blocks.
>> ==13299== malloc/free: 233,080 allocs, 227,080 frees, 
>> 5,454,975,665,283 bytes allocated.
>>
>>
>> ps: I use oldsize = 5, because long will be equal 8 in more case. 
>> oldsize is previous value of fibannoci series
>>>
>>> - Rishi
>>>
>>
>


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to