[Libsysio-commit] HEAD: libsysio/src rw.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2004-06-04 14:05:52
|
Update of /cvsroot/libsysio/libsysio/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17716/src Modified Files: rw.c Log Message: From Eric Mei; A file opened O_RDONLY may be written to. The mode check performed in _sysio_fd_find_capable can't simply check the open mode flags as a mask as O_RDONLY is the absence of any bits. Got rid of _sysio_fd_find_capable and just call _sysio_fd_find straight away. Then, modified _sysio_iiox to make the approrpiate mode check before attempting the operation now. Am leveraging the recent changes for accounting support where the operation is known. Index: rw.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/src/rw.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -w -b -B -p -r1.9 -r1.10 --- rw.c 28 May 2004 12:48:27 -0000 1.9 +++ rw.c 4 Jun 2004 14:05:38 -0000 1.10 @@ -102,6 +102,14 @@ _sysio_iiox(int (*f)(struct inode *, str int err; struct ioctx_callback *cb; + /* + * Check that it was opened with flags supporting the operation. + */ + if (!(wr + ? (fil->f_flags & (O_RDWR | O_WRONLY)) + : !(fil->f_flags & O_WRONLY))) + return -EBADF; + ino = fil->f_ino; if (!ino) { /* @@ -156,21 +164,6 @@ _sysio_iiox(int (*f)(struct inode *, str } /* - * Find file record from descriptor and return it if capable based on the - * bit-mask of cleared flag bits. - */ -struct file * -_sysio_fd_find_capable(int fd, int clear) -{ - struct file *fil; - - fil = _sysio_fd_find(fd); - if (!fil || fil->f_flags & clear) - return NULL; - return fil; -} - -/* * Sum iovec entries, returning total found or error if range of ssize_t would * be exceeded. */ @@ -256,7 +249,7 @@ SYSIO_INTERFACE_NAME(ireadv)(int fd, con SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -288,7 +281,7 @@ SYSIO_INTERFACE_NAME(readv)(int fd, cons SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -332,7 +325,7 @@ SYSIO_INTERFACE_NAME(iread)(int fd, void SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -373,7 +366,7 @@ SYSIO_INTERFACE_NAME(read)(int fd, void SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -452,7 +445,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(ipreadv) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -507,7 +500,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(preadv)) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -557,7 +550,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(ipread)) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -622,7 +615,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(pread))( SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -688,7 +681,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(ireadx)) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!(fil && xtv_count)) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -723,7 +716,7 @@ SYSIO_INTERFACE_NAME(ireadx)(int fd, SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_WRONLY); + fil = _sysio_fd_find(fd); if (!(fil && xtv_count)) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -822,7 +815,7 @@ SYSIO_INTERFACE_NAME(iwritev)(int fd, SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -854,7 +847,7 @@ SYSIO_INTERFACE_NAME(writev)(int fd, con SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -890,7 +883,7 @@ SYSIO_INTERFACE_NAME(iwrite)(int fd, con SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -931,7 +924,7 @@ SYSIO_INTERFACE_NAME(write)(int fd, cons SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -971,7 +964,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(ipwritev SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -1026,7 +1019,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(pwritev) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -1076,7 +1069,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(ipwrite) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -1141,7 +1134,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(pwrite)) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!fil) SYSIO_INTERFACE_RETURN(-1, -EBADF); @@ -1207,7 +1200,7 @@ PREPEND(_, SYSIO_INTERFACE_NAME(iwritex) SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!(fil && xtv_count)) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); @@ -1242,7 +1235,7 @@ SYSIO_INTERFACE_NAME(iwritex)(int fd, SYSIO_INTERFACE_DISPLAY_BLOCK; SYSIO_INTERFACE_ENTER; - fil = _sysio_fd_find_capable(fd, O_RDONLY); + fil = _sysio_fd_find(fd); if (!(fil && xtv_count)) SYSIO_INTERFACE_RETURN(IOID_FAIL, -EBADF); |