[PATCH][resend] copy_to_user return value check in fs/cifs/file.c

Jesper Juhl juhl-lkml at dif.dk
Fri Mar 4 16:39:51 GMT 2005


Hi Steve,

Back around the time of 2.6.10 I submitted a patch to fix the compile 
warning about copy_to_user in fs/cifs/file.c. The patch generated some 
comments and suggestions from several people and I subsequently cut a new 
patch that took care of the issues raised. Allan Cox then Ack'ed that new 
patch and then discussion died out. Aparently the patch never made it into 
2.6.11, so I've re-diffed it against that and hereby submit it to you for 
inclusion once more.


Signed-off-by: Jesper Juhl <juhl-lkml at dif.dk>

--- linux-2.6.11-orig/fs/cifs/file.c	2005-03-02 08:38:34.000000000 +0100
+++ linux-2.6.11/fs/cifs/file.c	2005-03-04 16:38:36.000000000 +0100
@@ -1148,6 +1148,7 @@ cifs_user_read(struct file * file, char 
 
 	for (total_read = 0,current_offset=read_data; read_size > total_read;
 				total_read += bytes_read,current_offset+=bytes_read) {
+		unsigned residue;
 		current_read_size = min_t(const int,read_size - total_read,cifs_sb->rsize);
 		rc = -EAGAIN;
 		smb_read_data = NULL;
@@ -1165,12 +1166,17 @@ cifs_user_read(struct file * file, char 
 				 &bytes_read, &smb_read_data);
 
 			pSMBr = (struct smb_com_read_rsp *)smb_read_data;
-			copy_to_user(current_offset,smb_read_data + 4/* RFC1001 hdr*/
+			residue = copy_to_user(current_offset, smb_read_data + 4 /* RFC1001 hdr */
 				+ le16_to_cpu(pSMBr->DataOffset), bytes_read);
 			if(smb_read_data) {
 				cifs_buf_release(smb_read_data);
 				smb_read_data = NULL;
 			}
+			if (residue) {
+				total_read += bytes_read - residue;
+				rc = -EFAULT;
+				break;
+			}
 		}
 		if (rc || (bytes_read == 0)) {
 			if (total_read) {




More information about the samba-technical mailing list