]> Zhao Yanbai Git Server - minix.git/commitdiff
Compare read/write buf size against SSIZE_MAX instead of "< 0"
authorThomas Veerman <thomas@minix3.org>
Fri, 16 Dec 2011 08:45:04 +0000 (08:45 +0000)
committerThomas Veerman <thomas@minix3.org>
Wed, 21 Dec 2011 10:46:09 +0000 (10:46 +0000)
The nbyte in read(int fildes, void *buf, size_t nbyte) is unsigned,
so although technically we're doing the same comparison, this is more
in line with POSIX.

The comparison was moved to read_write as that routine is used within
VFS to let it VFS write out coredumps.

servers/avfs/read.c

index fd97cc37d0af47083e2ea3f40a44542088e27e2b..24f3eb6778030d4c37353c90ccf60ee4b2880275 100644 (file)
@@ -78,9 +78,6 @@ int rw_flag;                  /* READING or WRITING */
   tll_access_t locktype;
   int r;
 
-  /* If the file descriptor is valid, get the vnode, size and mode. */
-  if (m_in.nbytes < 0) return(EINVAL);
-
   locktype = (rw_flag == READING) ? VNODE_READ : VNODE_WRITE;
   if ((f = get_filp(m_in.fd, locktype)) == NULL) return(err_code);
   if (((f->filp_mode) & (rw_flag == READING ? R_BIT : W_BIT)) == 0) {
@@ -116,6 +113,8 @@ PUBLIC int read_write(int rw_flag, struct filp *f, char *buf, size_t size,
   r = OK;
   cum_io = 0;
 
+  if (size > SSIZE_MAX) return(EINVAL);
+
   if (vp->v_pipe == I_PIPE) {
        if (fp->fp_cum_io_partial != 0) {
                panic("VFS: read_write: fp_cum_io_partial not clear");