lkml.org 
[lkml]   [2002]   [Aug]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subjectdata corruption in 2.4.19/drivers/scsi/sg.c
Hi,

As subject suggests generic scsi module from 2.4.19 corrupts data.
Backing back to 2.4.18 code [as suggested below] fixes the problem.
From the attached patch it's not clear what's causing the problem
as the code appears equivalent. Corruption occurs if you break out
the inner loop few lines later:

if (ksglen > usglen) {
...
p += usglen;
ksglen -= usglen;
break;
}

and reenter it. Then ksglen and p are reset which results in some
duplicate data injection.

Cheers. Andy.

--- ./drivers/scsi/sg.c.orig Sat Aug 3 02:39:44 2002
+++ ./drivers/scsi/sg.c Wed Aug 21 00:44:16 2002
@@ -1884,11 +1884,16 @@
res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up);
if (res) return res;

+#if 0
for (; k < schp->k_use_sg; ++k, ++sclp) {
ksglen = (int)sclp->length;
p = sclp->address;
if (NULL == p)
break;
+#else
+ for (; (k < schp->k_use_sg) && p;
+ ++k, ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
+#endif
ok = (SG_USER_MEM != mem_src_arr[k]);
if (usglen <= 0)
break;
@@ -2040,11 +2045,16 @@
res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up);
if (res) return res;

+#if 0
for (; k < schp->k_use_sg; ++k, ++sclp) {
ksglen = (int)sclp->length;
p = sclp->address;
if (NULL == p)
break;
+#else
+ for (; (k < schp->k_use_sg) && p;
+ ++k, ++sclp, ksglen = (int)sclp->length, p = sclp->address) {
+#endif
ok = (SG_USER_MEM != mem_src_arr[k]);
if (usglen <= 0)
break;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:28    [W:0.025 / U:0.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site