]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
sunrpc: allocate a separate bvec array for socket sends
authorJeff Layton <jlayton@kernel.org>
Mon, 13 Oct 2025 13:54:53 +0000 (09:54 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 16 Nov 2025 23:20:11 +0000 (18:20 -0500)
commit6b3b697d65d46a0f640216a3f6c72856c159c567
treef2133713f46de7e3f0ab777bbd7ee0100103f4c3
parentebd3330d1ca8844b0a0dba060d223523a186a5f9
sunrpc: allocate a separate bvec array for socket sends

svc_tcp_sendmsg() calls xdr_buf_to_bvec() with the second slot of
rq_bvec as the start, but doesn't reduce the array length by one, which
could lead to an array overrun. Also, rq_bvec is always rq_maxpages in
length, which can be too short in some cases, since the TCP record
marker consumes a slot.

Fix both problems by adding a separate bvec array to the svc_sock that
is specifically for sending. For TCP, make this array one slot longer
than rq_maxpages, to account for the record marker. For UDP, only
allocate as large an array as we need since it's limited to 64k of
payload.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: NeilBrown <neil@brown.name>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/linux/sunrpc/svcsock.h
net/sunrpc/svcsock.c