patch-2.4.27 linux-2.4.27/fs/proc/generic.c
Next file: linux-2.4.27/fs/proc/kcore.c
Previous file: linux-2.4.27/fs/proc/base.c
Back to the patch index
Back to the overall index
- Lines: 57
- Date:
2004-08-07 16:26:06.015402701 -0700
- Orig file:
linux-2.4.26/fs/proc/generic.c
- Orig date:
2003-11-28 10:26:21.000000000 -0800
diff -urN linux-2.4.26/fs/proc/generic.c linux-2.4.27/fs/proc/generic.c
@@ -56,6 +56,7 @@
ssize_t n, count;
char *start;
struct proc_dir_entry * dp;
+ loff_t pos = *ppos;
dp = (struct proc_dir_entry *) inode->u.generic_ip;
if (!(page = (char*) __get_free_page(GFP_KERNEL)))
@@ -64,6 +65,8 @@
while ((nbytes > 0) && !eof)
{
count = MIN(PROC_BLOCK_SIZE, nbytes);
+ if ((unsigned)pos > INT_MAX)
+ break;
start = NULL;
if (dp->get_info) {
@@ -71,11 +74,11 @@
* Handle backwards compatibility with the old net
* routines.
*/
- n = dp->get_info(page, &start, *ppos, count);
+ n = dp->get_info(page, &start, pos, count);
if (n < count)
eof = 1;
} else if (dp->read_proc) {
- n = dp->read_proc(page, &start, *ppos,
+ n = dp->read_proc(page, &start, pos,
count, &eof, dp->data);
} else
break;
@@ -84,8 +87,8 @@
/*
* For proc files that are less than 4k
*/
- start = page + *ppos;
- n -= *ppos;
+ start = page + pos;
+ n -= pos;
if (n <= 0)
break;
if (n > count)
@@ -111,12 +114,13 @@
break;
}
- *ppos += start < page ? (long)start : n; /* Move down the file */
+ pos += start < page ? (long)start : n; /* Move down the file */
nbytes -= n;
buf += n;
retval += n;
}
free_page((unsigned long) page);
+ *ppos = pos;
return retval;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)