summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_extattr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/vfs_extattr.c')
-rw-r--r--sys/kern/vfs_extattr.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index e994c81..5592bbc 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -1326,8 +1326,10 @@ lseek(td, uap)
case L_INCR:
if (noneg &&
(fp->f_offset < 0 ||
- (offset > 0 && fp->f_offset > OFF_MAX - offset)))
- return (EOVERFLOW);
+ (offset > 0 && fp->f_offset > OFF_MAX - offset))) {
+ error = EOVERFLOW;
+ break;
+ }
offset += fp->f_offset;
break;
case L_XTND:
@@ -1335,21 +1337,26 @@ lseek(td, uap)
error = VOP_GETATTR(vp, &vattr, cred, td);
VOP_UNLOCK(vp, 0, td);
if (error)
- return (error);
+ break;
if (noneg &&
(vattr.va_size > OFF_MAX ||
- (offset > 0 && vattr.va_size > OFF_MAX - offset)))
- return (EOVERFLOW);
+ (offset > 0 && vattr.va_size > OFF_MAX - offset))) {
+ error = EOVERFLOW;
+ break;
+ }
offset += vattr.va_size;
break;
case L_SET:
break;
default:
+ error = EINVAL;
+ }
+ if (error == 0 && noneg && offset < 0)
+ error = EINVAL;
+ if (error != 0) {
fdrop(fp, td);
- return (EINVAL);
+ return (error);
}
- if (noneg && offset < 0)
- return (EINVAL);
fp->f_offset = offset;
*(off_t *)(td->td_retval) = fp->f_offset;
fdrop(fp, td);
OpenPOWER on IntegriCloud