Crash, apparent memory corruption

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello!

I was trying to use current sparse from git on the current ndiswrapper.
The system is Fedora 8 x86_64 with all updates.  Just in case, the
kernel is from "wireless-2.6" repository, branch "everything".

When trying to use sparse on ndiswrapper, I found that sparse crashes on
a file called hal.c.  I made a version of the file after preprocessing
and put it here:

http://red-bean.com/proski/sparse/hal.c.bz2

The end of the output looks like this:

hal.c:19756:7: warning: label 'continue' already bound
hal.c:19756:7: warning: label 'break' already bound
hal.c:19756:125: warning: label 'continue' already bound
hal.c:19756:125: warning: label 'break' already bound
Segmentation fault (core dumped)

I guess sparse is already confused about something at this point.  The
full output to stderr is here:

http://red-bean.com/proski/sparse/sparse.stderr

And that's what gdb says (sparse was recompiled without optimization for
that):

Core was generated by `sparse hal.c'.
Program terminated with signal 11, Segmentation fault.
#0  0x000000000041aace in ptr_list_size (head=0x2b7ed86d29d0) at ptrlist.c:26
26                              nr += list->nr;
(gdb) p list
$1 = (struct ptr_list *) 0x5f7265776f6c000a
(gdb) p *list
Cannot access memory at address 0x5f7265776f6c000a
(gdb) where
#0  0x000000000041aace in ptr_list_size (head=0x2b7ed86d29d0) at ptrlist.c:26
#1  0x0000000000418004 in pseudo_list_size (list=0x2b7ed86d29d0) at lib.h:144
#2  0x0000000000417f40 in linearize_compound_statement (ep=0x2b7ed86b5520, stmt=0x2b7ed864e690) at linearize.c:1639
#3  0x000000000041810b in linearize_inlined_call (ep=0x2b7ed86b5520, stmt=0x2b7ed864e690) at linearize.c:1667
#4  0x0000000000418f67 in linearize_statement (ep=0x2b7ed86b5520, stmt=0x2b7ed864e690) at linearize.c:1957
#5  0x0000000000417bbf in linearize_expression (ep=0x2b7ed86b5520, expr=0x2b7ed85b9410) at linearize.c:1546
#6  0x0000000000418abf in linearize_statement (ep=0x2b7ed86b5520, stmt=0x2b7ed84fcdb0) at linearize.c:1868
#7  0x0000000000417ecc in linearize_compound_statement (ep=0x2b7ed86b5520, stmt=0x2b7ed84fcd60) at linearize.c:1629
#8  0x0000000000418f86 in linearize_statement (ep=0x2b7ed86b5520, stmt=0x2b7ed84fcd60) at linearize.c:1958
#9  0x0000000000419722 in linearize_fn (sym=0x2b7ed86073f0, base_type=0x2b7ed8605010) at linearize.c:2126
#10 0x000000000041988c in linearize_symbol (sym=0x2b7ed86073f0) at linearize.c:2195
#11 0x00000000004017cf in check_symbols (list=0x2b7ed85c3310) at sparse.c:266
#12 0x000000000040188f in main (argc=2, argv=0x7fffd3790d88) at sparse.c:284
(gdb)

Using valgrind, I don't see any relevant warnings before the place where
sparse crashes.

Pointer 0x5f7265776f6c000a looks fishy to me.  The initial bytes make
"lower_" if read in ASCII and consider that x86_64 is little endian.

Indeed, it must be coming from "lower_irql" used in the source.  If I
change that name, the pointer changes accordingly.  Moreover, 0x0a is
the symbol length, 10 characters, and it would change if I use a name of
a different length.

Any ideas how to debug it?

-- 
Regards,
Pavel Roskin
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux