git: f7d51eb77e84 - stable/14 - getblkx(9): be more tolerant but also strict with the buffer size checks
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 09 Mar 2024 09:05:34 UTC
The branch stable/14 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=f7d51eb77e848a6f7823d98349ebabb6efce4e52
commit f7d51eb77e848a6f7823d98349ebabb6efce4e52
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-03-02 04:58:57 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-03-09 09:05:03 +0000
getblkx(9): be more tolerant but also strict with the buffer size checks
PR: 277414
(cherry picked from commit 7e4ac11b6076e6a9bf7341ddeae22784284ed733)
---
sys/kern/vfs_bio.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 56f9d604b9eb..1b55c523c436 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -3980,9 +3980,11 @@ getblkx(struct vnode *vp, daddr_t blkno, daddr_t dblkno, int size, int slpflag,
("GB_KVAALLOC only makes sense with GB_UNMAPPED"));
if (vp->v_type != VCHR)
ASSERT_VOP_LOCKED(vp, "getblk");
- if (size > maxbcachebuf)
- panic("getblk: size(%d) > maxbcachebuf(%d)\n", size,
+ if (size > maxbcachebuf) {
+ printf("getblkx: size(%d) > maxbcachebuf(%d)\n", size,
maxbcachebuf);
+ return (EIO);
+ }
if (!unmapped_buf_allowed)
flags &= ~(GB_UNMAPPED | GB_KVAALLOC);
@@ -4156,6 +4158,12 @@ newbuf_unlocked:
vmio = vp->v_object != NULL;
if (vmio) {
maxsize = size + (offset & PAGE_MASK);
+ if (maxsize > maxbcachebuf) {
+ printf(
+ "getblkx: maxsize(%d) > maxbcachebuf(%d)\n",
+ maxsize, maxbcachebuf);
+ return (EIO);
+ }
} else {
maxsize = size;
/* Do not allow non-VMIO notmapped buffers. */