use simple_read_from_buffer in proc_info_read and proc_pid_attr_read
PATCH 1/1 use simple_read_from_buffer in proc_info_read and proc_pid_attr_read
Use simple_read_from_buffer in proc_info_read and proc_pid_attr_read. Viro had ack'd this earlier.
Signed-off-by Chris Wright <[email protected]>
===== fs/proc/base.c 1.71 vs edited =====
fs/proc/base.c +6 -36
@@ -517,7 +517,6 @@struct inode * inode = file->f_dentry->d_inode;unsigned long page;ssize_t length; -ssize_t end;struct task_struct *task =proc_task (inode);if (count >PROC_BLOCK_SIZE )
@@ -527,24 +526,10 @@ length =PROC_I (inode)->op.proc_read (task, (char *)page); -if (length <0 ) { -free_page (page); -return length; - } -/* Static 4kB (or whatever) block capacity */ -if (*ppos >= length) { -free_page (page); -return 0 ; - } -if (count + *ppos > length) - count = length - *ppos; - end = count + *ppos; -if (copy_to_user (buf, (char *) page + *ppos, count)) - count = -EFAULT ; -else - *ppos = end; +if (length >=0 ) + length =simple_read_from_buffer (buf, count, ppos, (char *)page, length);free_page (page); -return count; +return length; }static struct file_operations proc_info_file_operations = {
@@ -1168,7 +1153,6 @@struct inode * inode = file->f_dentry->d_inode;unsigned long page;ssize_t length; -ssize_t end;struct task_struct *task =proc_task (inode);if (count >PAGE_SIZE )
@@ -1179,24 +1163,10 @@ length =security_getprocattr (task, (char *)file->f_dentry->d_name.name, (void *)page, count); -if (length <0 ) { -free_page (page); -return length; - } -/* Static 4kB (or whatever) block capacity */ -if (*ppos >= length) { -free_page (page); -return 0 ; - } -if (count + *ppos > length) - count = length - *ppos; - end = count + *ppos; -if (copy_to_user (buf, (char *) page + *ppos, count)) - count = -EFAULT ; -else - *ppos = end; +if (length >=0 ) + length =simple_read_from_buffer (buf, count, ppos, (char *)page, length);free_page (page); -return count; +return length; } static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,