adv. lock:

detect off_t overflow _before_ it occurse and return EOVERFLOW instead of
EINVAL
This commit is contained in:
Andrey A. Chernov 2001-08-23 08:20:21 +00:00
parent 69cc1d0d7f
commit e9d095afdc
2 changed files with 10 additions and 10 deletions

View File

@ -29,6 +29,7 @@
* $FreeBSD$
*/
#include <machine/limits.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/fcntl.h>
@ -98,13 +99,12 @@ nfs_dolock(ap)
/*
* the NLM protocol doesn't allow the server to return an error
* on ranges, so we do it. Note that we should be returning
* EOVERFLOW in some cases, but we don't have it.
* on ranges, so we do it.
*/
if (fl->l_start < 0 || fl->l_len < 0 ||
((fl->l_len != 0 &&
(fl->l_start + fl->l_len - 1) < 0)))
if (fl->l_start < 0 || fl->l_len < 0)
return (EINVAL);
if (fl->l_len != 0 && (fl->l_len - 1 > OFF_MAX - fl->l_start))
return (EOVERFLOW);
/*
* Fill in the information structure.

View File

@ -29,6 +29,7 @@
* $FreeBSD$
*/
#include <machine/limits.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/fcntl.h>
@ -98,13 +99,12 @@ nfs_dolock(ap)
/*
* the NLM protocol doesn't allow the server to return an error
* on ranges, so we do it. Note that we should be returning
* EOVERFLOW in some cases, but we don't have it.
* on ranges, so we do it.
*/
if (fl->l_start < 0 || fl->l_len < 0 ||
((fl->l_len != 0 &&
(fl->l_start + fl->l_len - 1) < 0)))
if (fl->l_start < 0 || fl->l_len < 0)
return (EINVAL);
if (fl->l_len != 0 && (fl->l_len - 1 > OFF_MAX - fl->l_start))
return (EOVERFLOW);
/*
* Fill in the information structure.