From: Andries.Brouwer@cwi.nl
To: mdharm-kernel@one-eyed-alien.net
Cc: Andries.Brouwer@cwi.nl, linux-kernel@vger.kernel.org,
linux-scsi@vger.kernel.org,
linux-usb-devel@lists.sourceforge.net
Subject: Re: inquiry in scsi_scan.c
Date: Sun, 5 Jan 2003 14:07:39 +0100 (MET) [thread overview]
Message-ID: <UTC200301051307.h05D7da08203.aeb@smtp.cwi.nl> (raw)
Matthew Dharm writes:
> Instead of fixing this in usb-storage, I think I would rather make
> scsi_scan.c just assume a minimum of 36.
No, because (for SCSI-1) the minimum is 5.
> Or, put another way, if the first request indicates less than 36, why
> should we do a second request? We already have all the data...
We don't do a second request.
> Actually, we ask for 36 and get 36, but the field in the response which is
> supposed to tell us how much there is total is zeroed out, instead of
> having a real value.
Right.
> All we need to do is recognize when that field indicates less than 36
> bytes, and then stop asking for anything else. Either (a) the device is
> lying, in which case our original INQUIRY is fine, or (b) the device really
> has less than 36 bytes, which means that we already have all the data.
I think you misunderstand the problems. We do not ask for anything else.
There are two problems: a SCSI and a USB problem.
In the SCSI code a length of 5 is legal. Now the code
allocates space for these 5 bytes but subsequently uses
pointers to vendor etc that point past the end of the allocated area.
If ever anything is written via these pointers random memory is corrupted.
And "cat /proc/scsi/scsi" shows randow junk.
A bug that has to be fixed, independently of USB.
The SCSI code has no means of knowing the actual length transferred,
so has no choice but to believe the length byte in the reply.
But the USB code does the transferring itself, and knows precisely
how many bytes were transferred. If 36 bytes were transferred and
the additional length byte is 0, indicating a length of 5, then the
USB code can fix the response and change the additional length byte
to 31, indicating a length of 36. That way the SCSI code knows that
not 5 but 36 bytes are valid, and it gets actual vendor and model strings.
Andries
[the code I showed does the right things; will submit actual diffs
sooner or later]
next reply other threads:[~2003-01-05 12:59 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-05 13:07 Andries.Brouwer [this message]
2003-01-05 19:36 ` Luben Tuikov
2003-01-05 20:54 ` Zwane Mwaikambo
-- strict thread matches above, loose matches on Subject: below --
2003-01-05 21:42 Andries.Brouwer
2003-01-06 20:52 ` Patrick Mansfield
2003-01-05 21:35 Andries.Brouwer
2003-01-05 22:05 ` Luben Tuikov
2003-01-04 3:24 Andries.Brouwer
2003-01-04 3:07 Andries.Brouwer
2003-01-05 0:41 ` Matthew Dharm
2003-01-04 0:21 Andries.Brouwer
2003-01-04 1:04 ` Matthew Dharm
2003-01-04 2:14 ` Douglas Gilbert
2003-01-04 2:44 ` Patrick Mansfield
2003-01-05 0:45 ` Matthew Dharm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=UTC200301051307.h05D7da08203.aeb@smtp.cwi.nl \
--to=andries.brouwer@cwi.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-usb-devel@lists.sourceforge.net \
--cc=mdharm-kernel@one-eyed-alien.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®