svn commit: r192012 - head/sys/fs/fdescfs
Konstantin Belousov
kib at FreeBSD.org
Tue May 12 09:22:34 UTC 2009
Author: kib
Date: Tue May 12 09:22:33 2009
New Revision: 192012
URL: http://svn.freebsd.org/changeset/base/192012
Log:
Return controlled EINVAL when the fdescfs lookup routine is given string
representing too large integer, instead of overflowing and possibly
returning a random but valid vnode.
Noted by: Jilles Tjoelker <jilles stack nl>
MFC after: 3 days
Modified:
head/sys/fs/fdescfs/fdesc_vnops.c
Modified: head/sys/fs/fdescfs/fdesc_vnops.c
==============================================================================
--- head/sys/fs/fdescfs/fdesc_vnops.c Tue May 12 07:41:20 2009 (r192011)
+++ head/sys/fs/fdescfs/fdesc_vnops.c Tue May 12 09:22:33 2009 (r192012)
@@ -265,7 +265,7 @@ fdesc_lookup(ap)
struct thread *td = cnp->cn_thread;
struct file *fp;
int nlen = cnp->cn_namelen;
- u_int fd;
+ u_int fd, fd1;
int error;
struct vnode *fvp;
@@ -297,7 +297,12 @@ fdesc_lookup(ap)
error = ENOENT;
goto bad;
}
- fd = 10 * fd + *pname++ - '0';
+ fd1 = 10 * fd + *pname++ - '0';
+ if (fd1 < fd) {
+ error = ENOENT;
+ goto bad;
+ }
+ fd = fd1;
}
if ((error = fget(td, fd, &fp)) != 0)
More information about the svn-src-head
mailing list