Author: pfg
Date: Tue Feb 6 22:38:19 2018
New Revision: 328957
URL: https://svnweb.freebsd.org/changeset/base/328957
Log:
{ext2|ufs}_readdir: Avoid setting negative ncookies.
ncookies cannot be negative or the allocator will fail. This should only
happen if a caller is very broken but we can still try to survive the
event.
We should probably also verify for uio_resid > MAXPHYS but in that case
it is not clear that just clipping the ncookies value is an adequate
response.
MFC after: 2 weeks
Modified:
head/sys/fs/ext2fs/ext2_lookup.c
head/sys/ufs/ufs/ufs_vnops.c
Modified: head/sys/fs/ext2fs/ext2_lookup.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_lookup.c Tue Feb 6 22:17:01 2018
(r328956)
+++ head/sys/fs/ext2fs/ext2_lookup.c Tue Feb 6 22:38:19 2018
(r328957)
@@ -153,7 +153,10 @@ ext2_readdir(struct vop_readdir_args *ap)
return (EINVAL);
ip = VTOI(vp);
if (ap->a_ncookies != NULL) {
- ncookies = uio->uio_resid;
+ if (uio->uio_resid < 0)
+ ncookies = 0;
+ else
+ ncookies = uio->uio_resid;
if (uio->uio_offset >= ip->i_size)
ncookies = 0;
else if (ip->i_size - uio->uio_offset < ncookies)
Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c Tue Feb 6 22:17:01 2018
(r328956)
+++ head/sys/ufs/ufs/ufs_vnops.c Tue Feb 6 22:38:19 2018
(r328957)
@@ -2179,7 +2179,10 @@ ufs_readdir(ap)
if (ip->i_effnlink == 0)
return (0);
if (ap->a_ncookies != NULL) {
- ncookies = uio->uio_resid;
+ if (uio->uio_resid < 0)
+ ncookies = 0;
+ else
+ ncookies = uio->uio_resid;
if (uio->uio_offset >= ip->i_size)
ncookies = 0;
else if (ip->i_size - uio->uio_offset < ncookies)
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"