getblkx(9): be more tolerant but also strict with the buffer size checks

PR:	277414

(cherry picked from commit 7e4ac11b60)
This commit is contained in:
Konstantin Belousov 2024-03-02 06:58:57 +02:00
parent 2feed11fbe
commit 1c1fde7540

View file

@ -3963,9 +3963,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);
@ -4132,6 +4134,12 @@ getblkx(struct vnode *vp, daddr_t blkno, daddr_t dblkno, int size, int slpflag,
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. */