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

Attachment: msg10088/pgp00000.pgp
Description: PGP signature

Reply via email to