summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>2001-08-23 16:13:59 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>2001-08-23 16:13:59 +0000
commite02faad5cada759ee184ec4df9fbbf0d6e278338 (patch)
treeb7c42badb0ce6e3f682343aa192c0fa6d4eda459
parentea4313e351cbb34c329f351438f161a6fd7db917 (diff)
Notes
-rw-r--r--sys/nfs/nfs_lock.c10
-rw-r--r--sys/nfsclient/nfs_lock.c10
2 files changed, 12 insertions, 8 deletions
diff --git a/sys/nfs/nfs_lock.c b/sys/nfs/nfs_lock.c
index ac52410a60b6..607662c62138 100644
--- a/sys/nfs/nfs_lock.c
+++ b/sys/nfs/nfs_lock.c
@@ -102,12 +102,14 @@ nfs_dolock(ap)
* the NLM protocol doesn't allow the server to return an error
* on ranges, so we do it.
*/
- if (fl->l_len < 0)
- return (EINVAL);
if (fl->l_whence != SEEK_END) {
- if (fl->l_start < 0)
+ if (fl->l_whence != SEEK_CUR || fl->l_whence != SEEK_SET ||
+ fl->l_start < 0 ||
+ (fl->l_len < 0 &&
+ (fl->l_start == 0 || fl->l_start + fl->l_len < 0)))
return (EINVAL);
- if (fl->l_len != 0 && (fl->l_len - 1 > OFF_MAX - fl->l_start))
+ if (fl->l_len > 0 &&
+ (fl->l_len - 1 > OFF_MAX - fl->l_start))
return (EOVERFLOW);
}
diff --git a/sys/nfsclient/nfs_lock.c b/sys/nfsclient/nfs_lock.c
index ac52410a60b6..607662c62138 100644
--- a/sys/nfsclient/nfs_lock.c
+++ b/sys/nfsclient/nfs_lock.c
@@ -102,12 +102,14 @@ nfs_dolock(ap)
* the NLM protocol doesn't allow the server to return an error
* on ranges, so we do it.
*/
- if (fl->l_len < 0)
- return (EINVAL);
if (fl->l_whence != SEEK_END) {
- if (fl->l_start < 0)
+ if (fl->l_whence != SEEK_CUR || fl->l_whence != SEEK_SET ||
+ fl->l_start < 0 ||
+ (fl->l_len < 0 &&
+ (fl->l_start == 0 || fl->l_start + fl->l_len < 0)))
return (EINVAL);
- if (fl->l_len != 0 && (fl->l_len - 1 > OFF_MAX - fl->l_start))
+ if (fl->l_len > 0 &&
+ (fl->l_len - 1 > OFF_MAX - fl->l_start))
return (EOVERFLOW);
}