diff options
author | ps <ps@FreeBSD.org> | 2005-01-05 23:21:13 +0000 |
---|---|---|
committer | ps <ps@FreeBSD.org> | 2005-01-05 23:21:13 +0000 |
commit | 86f9a5d44a7e1e5f41826eda9ba8d92c631f162a (patch) | |
tree | e1dafb1ae5118ce0a395d4d693543e2ea7d9c6b7 /sys/nfsclient/nfs_socket.c | |
parent | 362fcfc1e268b4cff39cae1448f01c51def69091 (diff) | |
download | FreeBSD-src-86f9a5d44a7e1e5f41826eda9ba8d92c631f162a.zip FreeBSD-src-86f9a5d44a7e1e5f41826eda9ba8d92c631f162a.tar.gz |
If the NFS/TCP stream is out of sync between the client and server,
and if the client (erroneously) reads the RPC length as 0 bytes, the
client can loop around in the socket callback. Explicitly check for
the length being 0 case and teardown/re-connect.
Submitted by: Mohan Srinivasan
Diffstat (limited to 'sys/nfsclient/nfs_socket.c')
-rw-r--r-- | sys/nfsclient/nfs_socket.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c index 8a25ce1..2f44b3f 100644 --- a/sys/nfsclient/nfs_socket.c +++ b/sys/nfsclient/nfs_socket.c @@ -836,7 +836,7 @@ nfs_clnt_tcp_soupcall(struct socket *so, void *arg, int waitflag) * This is SERIOUS! We are out of sync with the sender * and forcing a disconnect/reconnect is all I can do. */ - if (len > NFS_MAXPACKET) { + if (len > NFS_MAXPACKET || len == 0) { log(LOG_ERR, "%s (%d) from nfs server %s\n", "impossible packet length", len, |