patch-2.4.5 linux/drivers/block/acsi_slm.c
Next file: linux/drivers/block/amiflop.c
Previous file: linux/drivers/block/acsi.c
Back to the patch index
Back to the overall index
- Lines: 62
- Date:
Tue May 22 10:23:16 2001
- Orig file:
v2.4.4/linux/drivers/block/acsi_slm.c
- Orig date:
Fri Feb 9 11:30:22 2001
diff -u --recursive --new-file v2.4.4/linux/drivers/block/acsi_slm.c linux/drivers/block/acsi_slm.c
@@ -378,19 +378,22 @@
length = slm_getstats( (char *)page, MINOR(node->i_rdev) );
if (length < 0) {
- free_page( page );
- return( length );
+ count = length;
+ goto out;
}
if (file->f_pos >= length) {
- free_page( page );
- return( 0 );
+ count = 0;
+ goto out;
}
if (count + file->f_pos > length)
count = length - file->f_pos;
end = count + file->f_pos;
- copy_to_user( buf, (char *)page + file->f_pos, count );
- free_page( page );
+ if (copy_to_user(buf, (char *)page + file->f_pos, count)) {
+ count = -EFAULT;
+ goto out;
+ }
file->f_pos = end;
+out: free_page( page );
return( count );
}
@@ -648,7 +651,8 @@
if (filled + n > BufferSize)
n = BufferSize - filled;
- copy_from_user( BufferP, buf, n );
+ if (copy_from_user(BufferP, buf, n))
+ return -EFAULT;
BufferP += n;
filled += n;
@@ -725,8 +729,9 @@
if (put_user(stat,
(long *)&((struct SLM_status *)arg)->stat))
return -EFAULT;
- copy_to_user( ((struct SLM_status *)arg)->str, str,
- strlen(str) + 1 );
+ if (copy_to_user( ((struct SLM_status *)arg)->str, str,
+ strlen(str) + 1))
+ return -EFAULT;
}
return( stat );
}
@@ -734,10 +739,6 @@
case SLMIOGPSIZE: { /* get paper size */
int w, h;
- err = verify_area( VERIFY_WRITE, (long *)arg,
- sizeof(struct SLM_paper_size) );
- if (err) return( err );
-
if ((err = slm_get_pagesize( device, &w, &h ))) return( err );
if (put_user(w, (long *)&((struct SLM_paper_size *)arg)->width))
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)