diff options
author | Pavel Filipensky <Pavel.Filipensky@Sun.COM> | 2009-03-06 16:44:37 +0000 |
---|---|---|
committer | Pavel Filipensky <Pavel.Filipensky@Sun.COM> | 2009-03-06 16:44:37 +0000 |
commit | 13651adbc76509937e310f6a6a515b59ff7bbafd (patch) | |
tree | 76e553630a4305f5e750d9dbbbdbb54aa590f761 /usr/src | |
parent | 7fc02a305b3093790884c8c5d13db1e1c4b70acb (diff) | |
download | illumos-gate-13651adbc76509937e310f6a6a515b59ff7bbafd.tar.gz |
6793049 Accessing nfsv4 shared hsfs filesystem can lead to infinite loop on rfs4_op_readdir()
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c b/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c index 6ea0f21acd..da1bbe51c2 100644 --- a/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c +++ b/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -633,12 +633,12 @@ readagain: rddir_result_size = rddir_data_len - uio.uio_resid; - /* Reading at the end of the directory */ - if (iseofdir && (rddir_result_size == 0)) { + /* No data were read. Check if we reached the end of the directory. */ + if (rddir_result_size == 0) { /* encode the BOOLEAN marking no further entries */ IXDR_PUT_U_INT32(ptr, false); /* encode the BOOLEAN signifying end of directory */ - IXDR_PUT_U_INT32(ptr, true); + IXDR_PUT_U_INT32(ptr, iseofdir ? true : false); resp->data_len = (char *)ptr - (char *)beginning_ptr; resp->mblk->b_wptr += resp->data_len; kmem_free((caddr_t)rddir_data, rddir_data_len); |