Re: Oops in scsi_send_eh_cmnd 2.6.21-rc5-git6,7,10,13

David Miller
2007-04-06T00:15:09Z

From: James Bottomley <James.Bottomley@SteelEye.com>
Date: Thu, 05 Apr 2007 19:02:19 -0500

> On Thu, 2007-04-05 at 15:36 -0700, David Miller wrote:
> > From: Andrew Burgess <aab@cichlid.com>
> > Date: Thu, 5 Apr 2007 15:13:27 -0700
> >
> > > David, do you see any other problems with scsi_send_eh_cmnd?
> > >
> > > I've switched back to 2.6.18 which seems to not oops
> > > and am happy to try patches.
> >
> > Does 2.6.20 with my patch OOPS too? Does reverting my patch
> > make the oops go away?
> >
> > If reverting my patch makes the OOPS go away, we need to
> > verify if page_address() is returning crap for some reason
> > or the length is wrong.
>
> Assuming this does turn out to be the problem, we should just junk the
> page allocation ... it's completely unnecessary; when the slab allocated
> commands were done, we made sure the actual sense_buffer is at the
> correct location, so this should be the final fix:

This won't work I believe.

There are cases that use smaller sense buffers than the minimum
specified by the SCSI layer.

One example is that do_sr_ioctl() stuff when the cgc passed
in has a sense buffer. That will only be as large as a
"struct request_sense".

I'm pretty sure that's one of the reasons why we cons up a local sense
buffer in this EH code.

So we could walk past the end of that and corrupt memory with
your patch.