git: 8c9aa94b42bf - main - Convert runtime param checks to KASSERTs for fo_fspacectl
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 23 Jul 2022 19:17:28 UTC
The branch main has been updated by khng:
URL: https://cgit.FreeBSD.org/src/commit/?id=8c9aa94b42bfe58f46be862ad5a08a68d9a19a4a
commit 8c9aa94b42bfe58f46be862ad5a08a68d9a19a4a
Author: Ka Ho Ng <khng@FreeBSD.org>
AuthorDate: 2022-07-23 19:14:45 +0000
Commit: Ka Ho Ng <khng@FreeBSD.org>
CommitDate: 2022-07-23 19:16:23 +0000
Convert runtime param checks to KASSERTs for fo_fspacectl
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D35880
---
sys/kern/uipc_shm.c | 10 +++++-----
sys/kern/vfs_vnops.c | 8 +++++---
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/sys/kern/uipc_shm.c b/sys/kern/uipc_shm.c
index 1ca088edfd78..0af2b22866f4 100644
--- a/sys/kern/uipc_shm.c
+++ b/sys/kern/uipc_shm.c
@@ -1990,16 +1990,16 @@ shm_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags,
off_t off, len;
int error;
- /* This assumes that the caller already checked for overflow. */
+ KASSERT(cmd == SPACECTL_DEALLOC, ("shm_fspacectl: Invalid cmd"));
+ KASSERT((flags & ~SPACECTL_F_SUPPORTED) == 0,
+ ("shm_fspacectl: non-zero flags"));
+ KASSERT(*offset >= 0 && *length > 0 && *length <= OFF_MAX - *offset,
+ ("shm_fspacectl: offset/length overflow or underflow"));
error = EINVAL;
shmfd = fp->f_data;
off = *offset;
len = *length;
- if (cmd != SPACECTL_DEALLOC || off < 0 || len <= 0 ||
- len > OFF_MAX - off || flags != 0)
- return (EINVAL);
-
rl_cookie = rangelock_wlock(&shmfd->shm_rl, off, off + len,
&shmfd->shm_mtx);
switch (cmd) {
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index d5234b44e5eb..29851dcfaaa2 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -3607,11 +3607,13 @@ vn_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags,
struct vnode *vp;
int ioflag;
+ KASSERT(cmd == SPACECTL_DEALLOC, ("vn_fspacectl: Invalid cmd"));
+ KASSERT((flags & ~SPACECTL_F_SUPPORTED) == 0,
+ ("vn_fspacectl: non-zero flags"));
+ KASSERT(*offset >= 0 && *length > 0 && *length <= OFF_MAX - *offset,
+ ("vn_fspacectl: offset/length overflow or underflow"));
vp = fp->f_vnode;
- if (cmd != SPACECTL_DEALLOC || *offset < 0 || *length <= 0 ||
- *length > OFF_MAX - *offset || flags != 0)
- return (EINVAL);
if (vp->v_type != VREG)
return (ENODEV);