diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2022-07-21 15:25:46 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-07-22 14:52:32 -0700 |
commit | 2829a267fca297983b9302fa2cb833757328c857 (patch) | |
tree | 767c8a995d6172596843abdbe03f4b1413f5a105 /net | |
parent | eb315a7d1396b1139fc7daea55f2d3191e8e7092 (diff) |
net: fix uninitialised msghdr->sg_from_iter
Because of how struct msghdr is usually initialised some fields and
sg_from_iter in particular might be left out not initialised, so we
can't safely use it in __zerocopy_sg_from_iter().
For now use the callback only when there is ->msg_ubuf set relying on
the fact that they're used together and we properly zero ->msg_ubuf.
Fixes: ebe73a284f4de8 ("net: Allow custom iter handler in msghdr")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Message-Id: <ce8b68b41351488f79fd998b032b3c56e9b1cc6c.1658401817.git.asml.silence@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/datagram.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/datagram.c b/net/core/datagram.c index 28cdb79df74d..ecbc0f471089 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -619,7 +619,7 @@ int __zerocopy_sg_from_iter(struct msghdr *msg, struct sock *sk, { int frag; - if (msg && msg->sg_from_iter) + if (msg && msg->msg_ubuf && msg->sg_from_iter) return msg->sg_from_iter(sk, skb, from, length); frag = skb_shinfo(skb)->nr_frags; |