Greg, this patch fixes a stupid coding error on my part. Please apply. Matt
On Tue, Dec 17, 2002 at 11:09:51AM -0500, Alan Stern wrote:
> 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
Content-Description: Patch to fix deferencing of null interrupt endpoint
> # 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;
--
Matthew Dharm Home: [EMAIL PROTECTED]
Maintainer, Linux USB Mass Storage Driver
M: No, Windows doesn't have any nag screens.
C: Then what are those blue and white screens I get every day?
-- Mike and Cobb
User Friendly, 1/4/1999
msg10088/pgp00000.pgp
Description: PGP signature
