[LCP]SIGBUS question
Joachim Bauernberger
bj at gmx.net
Sat Apr 20 07:44:04 UTC 2002
Ok, After spending the evening with my best friend gdb I managed to
pinpoint the location of the problem but have still no glue on what
might be the cause :-((
As soon as myfunc() calls fork, the process looses all it's information
on previous stackframes. At this point I haven't even called exec()
yet.
Look here, those are the frames before calling fork (sorry if the lines
wrap):
(gdb) bt
#0 local_inject (data=0xbfffa73c, rcpt=0x80d36b0
"bj at bjdev.devel.gmx.net") at mda.c:198
#1 0x8060398 in mknotify (what=665, who=2) at report.c:432
#2 0x80504d9 in av_scan (entry=0xbfffb86c
"/var/mxscan/scan//jbauernberger at gmx-ag.de-2002419232533-32132/1-base64-ZqKkai")
at av_scan.c:50
#3 0x804a5cc in b64decode (b64str=0x80d7de4, tnef=0, checksum=0x0) at
b64decode.c:92
#4 0x8050061 in mimeget (
startpos=0x8071382 "\n\n\n", '-' <repeats 14 times>,
"Boundary-00=_XXOTHOLISLOHA8DOE9Z7\nContent-Type: text/plain;\n
charset=\"us-ascii\"\nContent-Transfer-Encoding: 8bit\nSubject:
\n\n\n-- \nPGP Public
Key:\nhttp://www.mXscan.org/pgp/public.html\n"...) at mimeget.c:292
#5 0x804dfb3 in header (mref=0xbffffb1c) at header.c:729
#6 0x8053b7c in main (argc=18, argv=0xbffffba4) at main.c:772
#7 0x40119baf in __libc_start_main () from /lib/libc.so.6
Now at line 210:
(gdb) n
210 switch ((pid = fork ())) {
Immediately after fork the frame history is gone.
(gdb) bt
#0 local_inject (data=0xbfffa73c, rcpt=0x80d36b0
"bj at bjdev.devel.gmx.net") at mda.c:210
(gdb)
That's it. The process then segfaults on return:
(gdb) cont
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x806059d in mknotify (what=Cannot access memory at address 0xfffffffe
) at report.c:432
432 rc = local_inject(¬ification, rcpt);
Thanks,
Joachim
On Friday 19 April 2002 14:11, Joachim Bauernberger wrote:
> Hi,
> Can someone please take the time to explain to me what can cause a
> SIGBUS to be raised by a program (other than mmap) under Linux?
> I have been "googling" for answers and found that it's cause seems to
be
> architecture dependent?
> (I've been able to catch it by setting up a signal handler but this
> doesn't give much information other than it was indeed a SIGBUS that
> crashed the program)
>
> Also raise()ing a SIGSTOP and then attaching to the process with gdb
> shows me it's a SIGBUS but the information gdb gives me is not very
> descriptive about why the problem occurs. It seems that on return from
> myfunc() (which calls fork/exec and writes and reads with pipes
to/from
> the forked child) the programs memory gets corrupted.
>
> I started getting the problem after moving some code into myfunc() .
> Now when the myfunc() returns the SIGBUS
> results. Looking at gdb's output:
>
> Program received signal SIGBUS, Bus error.
> mknotify (what=Cannot access memory at address 0xffffef36.
> ) at report.c:450
> 450 if (recipient) free(recipient);
>
> mknotify() is the function calling myfunc() and "what" is an int
passed
> to it as it's first parameter.
>
> This confuses me since I am not calling mknotify() any more upon
return
> >from myfunc() (before the sigbus).
> Am I right to say that something in myfunc() corrupts the stack of my
> program so badly that upon it's return the program does not know
> anymore where to carry on?
>
> The system I have the problem is a linux libc5 box (i386) Kernel
2.0.38
> (don't tell me to upgrade please :-))
>
> Thanks & Regards,
> Joachim
>
> --
> PGP Public Key:
> http://www.mXscan.org/pgp/public.html
>
>
> _______________________________________________
> This is the Linux C Programming List
> : http://lists.linux.org.au/listinfo/linuxcprogramming List
>
>
--
PGP Public Key:
http://www.mXscan.org/pgp/public.html
More information about the linuxCprogramming
mailing list