mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 00:29:36 -04:00
Merge branch 'fix-vsock-error-handling-regression-introduced-in-v6-17-rc1'
Will Deacon says: ==================== Fix vsock error-handling regression introduced in v6.17-rc1 Here are a couple of patches fixing the vsock error-handling regression found by syzbot that I introduced during the recent merge window. ==================== Link: https://patch.msgid.link/20250818180355.29275-1-will@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -4172,6 +4172,8 @@ int skb_copy_and_crc32c_datagram_iter(const struct sk_buff *skb, int offset,
|
||||
struct iov_iter *to, int len, u32 *crcp);
|
||||
int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset,
|
||||
struct iov_iter *from, int len);
|
||||
int skb_copy_datagram_from_iter_full(struct sk_buff *skb, int offset,
|
||||
struct iov_iter *from, int len);
|
||||
int zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *frm);
|
||||
void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
|
||||
int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags);
|
||||
|
||||
@@ -618,6 +618,20 @@ int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset,
|
||||
}
|
||||
EXPORT_SYMBOL(skb_copy_datagram_from_iter);
|
||||
|
||||
int skb_copy_datagram_from_iter_full(struct sk_buff *skb, int offset,
|
||||
struct iov_iter *from, int len)
|
||||
{
|
||||
struct iov_iter_state state;
|
||||
int ret;
|
||||
|
||||
iov_iter_save_state(from, &state);
|
||||
ret = skb_copy_datagram_from_iter(skb, offset, from, len);
|
||||
if (ret)
|
||||
iov_iter_restore(from, &state);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(skb_copy_datagram_from_iter_full);
|
||||
|
||||
int zerocopy_fill_skb_from_iter(struct sk_buff *skb,
|
||||
struct iov_iter *from, size_t length)
|
||||
{
|
||||
|
||||
@@ -105,12 +105,14 @@ static int virtio_transport_fill_skb(struct sk_buff *skb,
|
||||
size_t len,
|
||||
bool zcopy)
|
||||
{
|
||||
struct msghdr *msg = info->msg;
|
||||
|
||||
if (zcopy)
|
||||
return __zerocopy_sg_from_iter(info->msg, NULL, skb,
|
||||
&info->msg->msg_iter, len, NULL);
|
||||
return __zerocopy_sg_from_iter(msg, NULL, skb,
|
||||
&msg->msg_iter, len, NULL);
|
||||
|
||||
virtio_vsock_skb_put(skb, len);
|
||||
return skb_copy_datagram_from_iter(skb, 0, &info->msg->msg_iter, len);
|
||||
return skb_copy_datagram_from_iter_full(skb, 0, &msg->msg_iter, len);
|
||||
}
|
||||
|
||||
static void virtio_transport_init_hdr(struct sk_buff *skb,
|
||||
|
||||
Reference in New Issue
Block a user