* sg_dd bpt= count=
@ 2003-10-14 23:40 Pat LaVarre
2003-10-20 18:21 ` Pat LaVarre
0 siblings, 1 reply; 6+ messages in thread
From: Pat LaVarre @ 2003-10-14 23:40 UTC (permalink / raw)
To: dougg; +Cc: linux-scsi
> I find some bugs "interesting".
sudo sg_dd of=/dev/sg0 if=/dev/zero bs=2k bpt= count=
may reliably take down kernels.
I say this because I saw 2.6.0-test7 go down twice, but I haven't yet
confirmed my sg utils are the latest available, and with regret I have
to admit just now I have to turn my attention elsewhere for a few days.
Noise keeps me from being sure if ping survives. ssh goes down, the cat
/proc/kmsg there showed nothing, the frozen gui of the main console
showed a couple of complaints about unrecognised multipliers.
Your mileage may vary.
Pat LaVarre
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sg_dd bpt= count= 2003-10-14 23:40 sg_dd bpt= count= Pat LaVarre @ 2003-10-20 18:21 ` Pat LaVarre 2003-10-20 19:49 ` Pat LaVarre 0 siblings, 1 reply; 6+ messages in thread From: Pat LaVarre @ 2003-10-20 18:21 UTC (permalink / raw) To: dougg; +Cc: linux-scsi > > I find some bugs "interesting". > > sudo sg_dd of=/dev/sg0 if=/dev/zero bs=2k bpt= count= > may reliably take down kernels. > > I say this because I saw 2.6.0-test7 go down twice, And now also 2.6.0-test8. This time ping survived, but again ssh did not, and Ctrl+Alt+F$n doesn't give me an alternate console. > my sg utils are the latest available Confirmed: http://www.torque.net/sg/p/sg3_utils-1.05.tgz `cksum` reports: 4285724795 188010 sg3_utils-1.05.tgz Pat LaVarre ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sg_dd bpt= count= 2003-10-20 18:21 ` Pat LaVarre @ 2003-10-20 19:49 ` Pat LaVarre 2003-10-20 21:34 ` Pat LaVarre 2003-10-20 23:53 ` Douglas Gilbert 0 siblings, 2 replies; 6+ messages in thread From: Pat LaVarre @ 2003-10-20 19:49 UTC (permalink / raw) To: dougg; +Cc: linux-scsi > > sudo sg_dd of=/dev/sg0 if=/dev/zero bs=2k bpt= count= > > may reliably take down kernels. To sg3_utils sg_dd.c I first propose the following patch, to persuade get_num to return determinate results more often. Specifically I propose changing: char c; res = sscanf(buf, "%d%c", &num, &c); if (0 == res) ... else if (1 == res) ... else { switch (c) { ... Personally I believe that source fragment switches on uninitialised c in the situation `man sscanf` describes as: "RETURN VALUE ... The value EOF is returned if an input failure occurs before any conversion such as an end-of-file occurs ...". As a test, I did separately execute get_num(""). For me once the uninitialised c and num were then 8 and 1108545272 (aka x42130EF8), so the result was -1. I notice gcc -Wall doesn't mention this kind of read-before-write. Pat LaVarre P.S. Also I wonder if we would prefer rewriting these "return -1" as loud exits e.g.: fprintf(stderr, "file %s line %d\n", __FILE__, __LINE__); exit(-1); --- sg3_utils-1.05/sg_dd.c 2003-10-19 03:35:32.000000000 -0600 +++ sg3_utils/sg_dd.c 2003-10-20 13:35:20.515143520 -0600 @@ -475,10 +475,10 @@ char c; res = sscanf(buf, "%d%c", &num, &c); - if (0 == res) - return -1; - else if (1 == res) + if (1 == res) return num; + else if (2 != res) + return -1; else { switch (c) { case 'c': ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sg_dd bpt= count= 2003-10-20 19:49 ` Pat LaVarre @ 2003-10-20 21:34 ` Pat LaVarre 2003-10-20 23:53 ` Douglas Gilbert 1 sibling, 0 replies; 6+ messages in thread From: Pat LaVarre @ 2003-10-20 21:34 UTC (permalink / raw) To: dougg; +Cc: linux-scsi Doug G: Have we reached closure now? I also see crashes if I try: sg_dd of=/dev/sg0 bs=2k bpt=-1 To oops this way, I only need write privileges into some of /dev/sg*, not the other root privileges. Therefore I now propose the following patch, a replacement of and an improvement on my earlier sg3_utils-1.05/sg_dd.c patch. I got to this patch courtesy some fprintf stderr and one-second sleeps. I now think `sg_dd of=/dev/sg0 bs=2k bpt=` can mean, in part: #include <fcntl.h> #include <scsi/sg.h> #include <sys/ioctl.h> #include <unistd.h> int main(void) { char const * fn = "/dev/sg0"; int fd = open(fn, O_RDWR); if (0 <= fd) { int t = -2048; ioctl(fd, SG_SET_RESERVED_SIZE, &t); } return 0; } Compiled separately, that specific example takes down 2.6.0-test8 here, same as sg_dd does. Ctrl+Alt+F2 worked long enough for me to die in an alternate console, but still I died. SG_SET_RESERVED_SIZE at Google is: http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/gs_rs_size.html but that doesn't tell me what the permissible range of t is. Nonnegative is my guess of our intent, I see bpt=0 does not so immediately oops. Pat LaVarre diff -u sg3_utils-1.05/sg_dd.c sg3_utils/sg_dd.c --- sg3_utils-1.05/sg_dd.c 2003-10-19 03:35:32.000000000 -0600 +++ sg3_utils/sg_dd.c 2003-10-20 15:18:06.204065056 -0600 @@ -475,10 +475,10 @@ char c; res = sscanf(buf, "%d%c", &num, &c); - if (0 == res) - return -1; - else if (1 == res) + if (1 == res) return num; + else if (2 != res) + return -1; else { switch (c) { case 'c': @@ -621,6 +621,10 @@ usage(); return 1; } + if (bpt < 0) { + fprintf(stderr, "bpt cannot be negative\n"); + return 1; + } if ((skip < 0) || (seek < 0)) { fprintf(stderr, "skip and seek cannot be negative\n"); return 1; ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sg_dd bpt= count= 2003-10-20 19:49 ` Pat LaVarre 2003-10-20 21:34 ` Pat LaVarre @ 2003-10-20 23:53 ` Douglas Gilbert 2003-10-21 19:44 ` Pat LaVarre 1 sibling, 1 reply; 6+ messages in thread From: Douglas Gilbert @ 2003-10-20 23:53 UTC (permalink / raw) To: Pat LaVarre; +Cc: linux-scsi Pat LaVarre wrote: >>>sudo sg_dd of=/dev/sg0 if=/dev/zero bs=2k bpt= count= >>>may reliably take down kernels. > > > To sg3_utils sg_dd.c I first propose the following patch, to persuade > get_num to return determinate results more often. > > Specifically I propose changing: > > char c; > res = sscanf(buf, "%d%c", &num, &c); > if (0 == res) ... > else if (1 == res) ... > else { > switch (c) { ... > > Personally I believe that source fragment switches on uninitialised c in > the situation `man sscanf` describes as: "RETURN VALUE ... The value EOF > is returned if an input failure occurs before any conversion such as an > end-of-file occurs ...". > > As a test, I did separately execute get_num(""). For me once the > uninitialised c and num were then 8 and 1108545272 (aka x42130EF8), so > the result was -1. I notice gcc -Wall doesn't mention this kind of > read-before-write. > > Pat LaVarre > > P.S. Also I wonder if we would prefer rewriting these "return -1" as > loud exits e.g.: > > fprintf(stderr, "file %s line %d\n", __FILE__, __LINE__); > exit(-1); > > --- sg3_utils-1.05/sg_dd.c 2003-10-19 03:35:32.000000000 -0600 > +++ sg3_utils/sg_dd.c 2003-10-20 13:35:20.515143520 -0600 > @@ -475,10 +475,10 @@ > char c; > > res = sscanf(buf, "%d%c", &num, &c); > - if (0 == res) > - return -1; > - else if (1 == res) > + if (1 == res) > return num; > + else if (2 != res) > + return -1; > else { > switch (c) { > case 'c': Pat, Applied to sg3_utils. Also added a check for non-positive bpt. There is a new beta on http://www.torque.net/sg Doug Gilbert ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: sg_dd bpt= count= 2003-10-20 23:53 ` Douglas Gilbert @ 2003-10-21 19:44 ` Pat LaVarre 0 siblings, 0 replies; 6+ messages in thread From: Pat LaVarre @ 2003-10-21 19:44 UTC (permalink / raw) To: dougg; +Cc: linux-scsi > Applied to sg3_utils. Also added a check for non-positive bpt. > There is a new beta on http://www.torque.net/sg Perfect, thanks. Pat LaVarre P.S. More specifically: In a Linux built without linux-scsi "[PATCH] SG_SET_RESERVED_SIZE negative oops", now rather than oops I see: $ sg_dd of=/dev/sg0 if=/dev/zero bs=2k bpt= count= bpt must be greater than 0 $ Also: diff -Nur sg3_utils-1.05-was sg3_utils-1.05 tells me: + - sg_dd, sgp_dd, sgm_dd, sg_read, sg_turs: require bpt > 0 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-10-21 19:44 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-10-14 23:40 sg_dd bpt= count= Pat LaVarre 2003-10-20 18:21 ` Pat LaVarre 2003-10-20 19:49 ` Pat LaVarre 2003-10-20 21:34 ` Pat LaVarre 2003-10-20 23:53 ` Douglas Gilbert 2003-10-21 19:44 ` Pat LaVarre
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.