Matt and Andre:
It looks like the latest change introduced a problem. The attached patch
should fix things up.
Alan
On 17 Dec 2002, Andr� Cruz wrote:
>
>
> ksymoops 2.4.5 on i686 2.5.52. Options used
> -V (default)
> -k /proc/ksyms (default)
> -l /proc/modules (default)
> -o /lib/modules/2.5.52/ (default)
> -m /boot/System.map-2.5.52 (default)
>
> Warning: You did not tell me where to find symbol information. I will
> assume that the log matches the kernel and modules that are running
> right now and I'll use the default options above for symbol resolution.
> If the current kernel and/or modules do not match the log, you can get
> more accurate output by telling me the kernel version and where to find
> map, modules, ksyms etc. ksymoops -h explains the options.
>
> Error (regular_file): read_ksyms stat /proc/ksyms failed
> No modules in ksyms, skipping objects
> No ksyms, skipping lsmod
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000002
> c02aaede
> *pde = 00000000
> Oops: 0000
> CPU: 0
> EIP: 0060:[<c02aaede>] Not tainted
> Using defaults from ksymoops -t elf32-i386 -a i386
> EFLAGS: 00010202
> eax: 00000001 ebx: 00000020 ecx: ef283ee0 edx: 00000000
> esi: 00000000 edi: ef283ef4 ebp: ef280600 esp: efc5bd4c
> ds: 0068 es: 0068 ss: 0068
> Stack: ef280600 00000000 00000174 0001a003 00000000 0002dabe 0000000f
> ef280604
> c174b2d8 c03d624c c0137541 c174b2d8 00000000 c17aec40 00000000
> 00000246
> c03d624c 000001ff effe83d0 00000000 eeadfea0 eeadf098 c01623d0
> eeadfea0
> Call Trace: [<c0137541>] [<c01623d0>] [<c013a38e>] [<c028ff07>]
> [<c0200c65>] [<c0200cff>] [<c0200ed4>] [<c01fff70>] [<c029119c>]
> [<c0293546>] [<c02939be>] [<c0122265>] [<c0293a65>] [<c011e4c0>]
> [<c0293a30>] [<c0109249>]
> Code: 0f b6 46 02 24 0f 88 85 9e 00 00 00 0f b6 46 06 8d 75 30 88
>
>
> >>EIP; c02aaede <storage_probe+5fe/de0> <=====
>
> >>ecx; ef283ee0 <END_OF_CODE+2ed513b4/????>
> >>edi; ef283ef4 <END_OF_CODE+2ed513c8/????>
> >>ebp; ef280600 <END_OF_CODE+2ed4dad4/????>
> >>esp; efc5bd4c <END_OF_CODE+2f729220/????>
>
> Trace; c0137541 <buffered_rmqueue+91/100>
> Trace; c01623d0 <inode_init_once+20/100>
> Trace; c013a38e <cache_grow+12e/1e0>
> Trace; c028ff07 <usb_device_probe+a7/d0>
> Trace; c0200c65 <bus_match+45/80>
> Trace; c0200cff <device_attach+5f/80>
> Trace; c0200ed4 <bus_add_device+64/b0>
> Trace; c01fff70 <device_add+d0/120>
> Trace; c029119c <usb_new_device+38c/4c0>
> Trace; c0293546 <usb_hub_port_connect_change+1f6/310>
> Trace; c02939be <usb_hub_events+35e/3d0>
> Trace; c0122265 <reparent_to_init+d5/160>
> Trace; c0293a65 <usb_hub_thread+35/110>
> Trace; c011e4c0 <default_wake_function+0/40>
> Trace; c0293a30 <usb_hub_thread+0/110>
> Trace; c0109249 <kernel_thread_helper+5/c>
>
> Code; c02aaede <storage_probe+5fe/de0>
> 00000000 <_EIP>:
> Code; c02aaede <storage_probe+5fe/de0> <=====
> 0: 0f b6 46 02 movzbl 0x2(%esi),%eax <=====
> Code; c02aaee2 <storage_probe+602/de0>
> 4: 24 0f and $0xf,%al
> Code; c02aaee4 <storage_probe+604/de0>
> 6: 88 85 9e 00 00 00 mov %al,0x9e(%ebp)
> Code; c02aaeea <storage_probe+60a/de0>
> c: 0f b6 46 06 movzbl 0x6(%esi),%eax
> Code; c02aaeee <storage_probe+60e/de0>
> 10: 8d 75 30 lea 0x30(%ebp),%esi
> Code; c02aaef1 <storage_probe+611/de0>
> 13: 88 00 mov %al,(%eax)
This is the section of code in storage_probe that reads:
ss->ep_int = ep_int->bEndpointAddress &
USB_ENDPOINT_NUMBER_MASK;
The problem is that ep_int is a null pointer (unless the protocol is CBI,
which apparently this one wasn't).
>
>
> 1 warning and 1 error issued. Results may not be reliable.
>
> Also, can anyone tell me which usb-storage driver this is?:
>
> Vendor: Model: USB Storage-CFC Rev: 0212
> Type: Direct-Access ANSI SCSI revision: 02
>
> It only shows this with 2.5 kernels but mount fails.
> Thanks.
>
That's not a driver, it's an identification string created by the vendor
of the device. You could learn more about it by checking in
/proc/bus/usb/devices (unless that file has moved since the last time I
looked), or by turning on the flag for usb-storage debugging and looking
in your kernel log.
Alan Stern
# This is a BitKeeper generated patch for the following project:
# Project Name: greg k-h's linux 2.5 USB kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.993 -> 1.994
# drivers/usb/storage/usb.c 1.58 -> 1.59
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/12/17 [EMAIL PROTECTED] 1.994
# Don't try to dereference the interrupt endpoint if it doesn't exist.
# --------------------------------------------
#
diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
--- a/drivers/usb/storage/usb.c Tue Dec 17 11:01:00 2002
+++ b/drivers/usb/storage/usb.c Tue Dec 17 11:01:00 2002
@@ -728,9 +728,13 @@
USB_ENDPOINT_NUMBER_MASK;
ss->ep_out = ep_out->bEndpointAddress &
USB_ENDPOINT_NUMBER_MASK;
- ss->ep_int = ep_int->bEndpointAddress &
- USB_ENDPOINT_NUMBER_MASK;
- ss->ep_bInterval = ep_int->bInterval;
+ if (ep_int) {
+ ss->ep_int = ep_int->bEndpointAddress &
+ USB_ENDPOINT_NUMBER_MASK;
+ ss->ep_bInterval = ep_int->bInterval;
+ }
+ else
+ ss->ep_int = ss->ep_bInterval = 0;
/* allocate the URB, the usb_ctrlrequest, and the IRQ URB */
if (usb_stor_allocate_urbs(ss))
@@ -771,9 +775,13 @@
USB_ENDPOINT_NUMBER_MASK;
ss->ep_out = ep_out->bEndpointAddress &
USB_ENDPOINT_NUMBER_MASK;
- ss->ep_int = ep_int->bEndpointAddress &
- USB_ENDPOINT_NUMBER_MASK;
- ss->ep_bInterval = ep_int->bInterval;
+ if (ep_int) {
+ ss->ep_int = ep_int->bEndpointAddress &
+ USB_ENDPOINT_NUMBER_MASK;
+ ss->ep_bInterval = ep_int->bInterval;
+ }
+ else
+ ss->ep_int = ss->ep_bInterval = 0;
/* establish the connection to the new device */
ss->ifnum = ifnum;