Visit Our UNIX and Linux User Community


Trace "free(): invalid next size (normal)" error on arm-linux board


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Trace "free(): invalid next size (normal)" error on arm-linux board
# 1  
Old 05-12-2011
Network Trace "free(): invalid next size (normal)" error on arm-linux board

Hi guys,

i'm running a program on samsumg 6410 arm cpu board. it caused an "free(): invalid next size (normal)" fail.

i try to use gdb for remote debugging:
1, start gdb server on board:
Code:
gdbserver 192.168.1.20:1234 ./HostAP 
Process ./HostAP created; pid = 499
Listening on port 1234
Remote debugging from host 192.168.1.177

2, using gdb on linux to connect, then run;

3, i got this on my console of 6410 board:
Code:
*** glibc detected *** ./HostAP: free(): invalid next size (normal): 0x0010f060 ***

4, i got this on my linux machine terminal: (hand type in..)
Code:
Program received signal SIGABRT, Aborted
[Switching to Thread 503]
0x42ade490 in ?? ()

5, i type "backtrace" command, but got this:
Code:
#0 0x42ade490 in ?? ()
Cannot access memory at address 0xa


So, i'm strucked here.. and don't know how to continue the debugging ...

any advice will be appreciated.

thanks in advance.

ss1969
# 2  
Old 05-12-2011
The debugger can't tell you exactly what you did when you corrupt your heap, but things like this mean that's what happened. Perhaps you wrote past the end of a block you malloc()-ed, or wrote to memory you'd already freed, that kind of thing.
# 3  
Old 05-12-2011
I have faced similar error once.

It happens when you are calling free() system call for a pointer which is already freed.

Try to look for this kind of error in the code.
# 4  
Old 05-12-2011
glibc is actually able to report double-frees as double-frees directly, not just as generic heap corruption. He might have an older glibc though, which makes this less certain.
# 5  
Old 05-12-2011
Quote:
Originally Posted by Corona688
glibc is actually able to report double-frees as double-frees directly, not just as generic heap corruption. He might have an older glibc though, which makes this less certain.
you may be correct.

Try to use mtrace for tracing you allocation and free calls.

mtrace - Wikipedia, the free encyclopedia

But for this you need change and recompile the code.
This User Gave Thanks to kumaran_5555 For This Post:
# 6  
Old 05-13-2011
Quote:
Originally Posted by Corona688
glibc is actually able to report double-frees as double-frees directly, not just as generic heap corruption. He might have an older glibc though, which makes this less certain.
Yes, i'm using Sourcery G++ Lite 2008 Q3 version for arm-nonelinux-gnueabi 4.3.2.
The reason for I doesn't change to version 2010.09 4.5.1 is, if I use the newer compiler, my program will encounter an error on accessing eproms onboard while nothing difference in codes.
It's weird and I doesn't plan to check it right now.

---------- Post updated at 10:11 AM ---------- Previous update was at 09:39 AM ----------

Quote:
Originally Posted by kumaran_5555
you may be correct.
Try to use mtrace for tracing you allocation and free calls.
But for this you need change and recompile the code.
Thanks、I used mtrace, but the result is still strange.
First, i'm sure my code is compiled with -g option.
but after analysis of my mtrace.log, it still reports "Caller" column as addresses ... such as 0x400366c4 etc, but not the code line.

btw, I tried another little program on fedora:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <mcheck.h>

int main (void)
{
    mtrace();

    int * p;
    p = malloc(10);
    free(p);
    free(p);
    return 0;
}

but after glibc detected "double free or corruption", the mtrace.log is still 0 bytes....nothing logged.
Why?
# 7  
Old 05-13-2011
That is an excellent question. It doesn't work for me either and I don't know why yet. (yes, I exported MALLOC_TRACE). It even has a mysterious ability to find the current terminal when stdin, stdout, and stderr have all been redirected.

---------- Post updated at 09:03 PM ---------- Previous update was at 08:55 PM ----------

Quote:
Originally Posted by ss1969
The reason for I doesn't change to version 2010.09 4.5.1 is, if I use the newer compiler, my program will encounter an error on accessing eproms onboard while nothing difference in codes.
This suggests latent bugs in your code unfortunately. Different optimization methods, etc may foil assumptions in your code that seemed safe but technically aren't -- uninitialized variables being zero, etc. I can't prove this -- and have experienced actual compiler bugs -- but the bug being your own is far, far more likely.

Last edited by Corona688; 05-13-2011 at 01:01 AM..
This User Gave Thanks to Corona688 For This Post:

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Perl "Invalid argument error"

Hi , we have a issue in server, we are running a perl script to connect our clients, but we are not able to connect, every time we are getting the "Invalid argument error" Even i checked all the necessary perl modules are i installed in this server, #create the listen socket my... (2 Replies)
Discussion started by: anishkumarv
2 Replies

3. Shell Programming and Scripting

Delete files older than "x" if directory size is greater than "y"

I wrote a script to delete files which are older than "x" days, if the size of the directory is greater than "y" #!/bin/bash du -hs $1 while read SIZE ENTRY do if ; then find $1 -mtime +$2 -exec rm -f {} \; echo "Files older than $2 days deleted" else echo "free Space available"... (4 Replies)
Discussion started by: JamesCarter
4 Replies

4. Shell Programming and Scripting

Command Character size limit in the "sh" and "bourne" shell

Hi!!.. I would like to know what is maximum character size for a command in the "sh" or "bourne" shell? Thanks in advance.. Roshan. (1 Reply)
Discussion started by: Roshan1286
1 Replies

5. UNIX for Dummies Questions & Answers

Command Character size limit in the "sh" and "bourne" shell

Hi!!.. I would like to know what is maximum character size for a command in the "sh" or "bourne" shell? Thanks in advance.. Roshan. (1 Reply)
Discussion started by: Roshan1286
1 Replies

6. Programming

what's the different between "ar" and "arm-linux-ar"

I find that when I want to cross-compier application for arm platform,Maybe it need to specify AR=arm-linux-ar,but if I don't specify it, it will use default one--ar,and both can works well,I think ar and arm-linux-ar is just a different ,I don't know whether I'm right. I hope someone show me... (3 Replies)
Discussion started by: yanglei_fage
3 Replies

7. Shell Programming and Scripting

awk "Invalid char ' in expession" error

I have an HP PPM (ITG) application that is running an awk command in cygwin bash shell as part of ITG process moving SAP transports on a Windows 2003 server. The awk command checks the first two characters of a file containing return code that was retrieved from the SAP server. It is throwing the... (3 Replies)
Discussion started by: accsam1
3 Replies

8. Programming

error "Invalid argument" returned after call sched_setscheduler

the code is below and the was run on Solaris 9. ----------------------------- struct sched_param param; param.sched_priority = 99; if(sched_setscheduler(0, SCHED_RR, &param) == -1) { perror("setting priority"); exit(1); } ------------------------------- after the... (1 Reply)
Discussion started by: robin.zhu
1 Replies

9. Programming

*** glibc detected *** free(): invalid next size (normal): 0x0000000000503e70 ***

hi, I have made a small C program that make use of malloc and free for processing bitmap images. when i try to run the program, I am getting a error something like *** glibc detected *** free(): invalid next size (normal): 0x0000000000503e70 *** I am not sure of which free() is causing this... (1 Reply)
Discussion started by: vbreddy
1 Replies

Featured Tech Videos