Author: pfg
Date: Thu Apr 19 02:50:15 2018
New Revision: 332750
URL: https://svnweb.freebsd.org/changeset/base/332750

Log:
  MFC r328957:
  {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.

Modified:
  stable/10/sys/fs/ext2fs/ext2_lookup.c
  stable/10/sys/ufs/ufs/ufs_vnops.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/ext2fs/ext2_lookup.c
==============================================================================
--- stable/10/sys/fs/ext2fs/ext2_lookup.c       Thu Apr 19 02:47:21 2018        
(r332749)
+++ stable/10/sys/fs/ext2fs/ext2_lookup.c       Thu Apr 19 02:50:15 2018        
(r332750)
@@ -150,7 +150,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: stable/10/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- stable/10/sys/ufs/ufs/ufs_vnops.c   Thu Apr 19 02:47:21 2018        
(r332749)
+++ stable/10/sys/ufs/ufs/ufs_vnops.c   Thu Apr 19 02:50:15 2018        
(r332750)
@@ -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)
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to