Fix a bug in NFSv3 READDIRPLUS reply processing
The client's READDIRPLUS logic skips the attributes and filehandle of the ".." entry. If the server doesn't send attributes but does send a filehandle for "..", the client's logic doesn't account for the extra "value follows" field that indicates whether the filehandle is present, causing the remaining entries in the reply to be ignored. Sponsored by: Network Appliance, Inc. Reviewed by: rick, mohans Approved by: silby MFC after: 2 weeks
This commit is contained in:
parent
34ef4672d2
commit
9f5349f23d
@ -2312,7 +2312,11 @@ nfs_readdirplusrpc(struct vnode *vp, struct uio *uiop, struct ucred *cred)
|
|||||||
/* Just skip over the file handle */
|
/* Just skip over the file handle */
|
||||||
tl = nfsm_dissect(u_int32_t *, NFSX_UNSIGNED);
|
tl = nfsm_dissect(u_int32_t *, NFSX_UNSIGNED);
|
||||||
i = fxdr_unsigned(int, *tl);
|
i = fxdr_unsigned(int, *tl);
|
||||||
nfsm_adv(nfsm_rndup(i));
|
if (i) {
|
||||||
|
tl = nfsm_dissect(u_int32_t *, NFSX_UNSIGNED);
|
||||||
|
fhsize = fxdr_unsigned(int, *tl);
|
||||||
|
nfsm_adv(nfsm_rndup(fhsize));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (newvp != NULLVP) {
|
if (newvp != NULLVP) {
|
||||||
if (newvp == vp)
|
if (newvp == vp)
|
||||||
|
Loading…
Reference in New Issue
Block a user