Avoid assertion failure when splitting mbuf cluster.
authorbluhm <bluhm@openbsd.org>
Fri, 20 Oct 2023 16:25:15 +0000 (16:25 +0000)
committerbluhm <bluhm@openbsd.org>
Fri, 20 Oct 2023 16:25:15 +0000 (16:25 +0000)
commit7b4d35e0a60ba1dd4daf4b1c2932020a22463a89
treec6b39e2681a133388c8d48c4f68ce4cc12465ef5
parentdc62a2d58330396000ab5f09b91f9a8cd472d01e
Avoid assertion failure when splitting mbuf cluster.

m_split() calls m_align() to initialize the data pointer of newly
allocated mbuf.  If the new mbuf will be converted to a cluster,
this is not necessary.  If additionally the new mbuf is larger than
MLEN, this can lead to a panic.
Only call m_align() when a valid m_data is needed.  This is the
case if we do not refecence the existing cluster, but memcpy() the
data into the new mbuf.

Reported-by: syzbot+0e6817f5877926f0e96a@syzkaller.appspotmail.com
OK claudio@ deraadt@
sys/kern/uipc_mbuf.c