From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f194.google.com ([209.85.128.194]:45527 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751629AbeDJBWU (ORCPT ); Mon, 9 Apr 2018 21:22:20 -0400 Received: by mail-wr0-f194.google.com with SMTP id u11so11283201wri.12 for ; Mon, 09 Apr 2018 18:22:19 -0700 (PDT) From: Nathan Chancellor To: Greg Kroah-Hartman , stable@vger.kernel.org Cc: Nathan Chancellor , "Jason A . Donenfeld" , Sergei Shtylyov , "Michael S. Tsirkin" , Jason Wang , "David S . Miller" Subject: [PATCH 4.4 3/3] virtio_net: check return value of skb_to_sgvec in one more location Date: Mon, 9 Apr 2018 18:21:47 -0700 Message-Id: <20180410012150.6573-7-natechancellor@gmail.com> In-Reply-To: <20180410012150.6573-1-natechancellor@gmail.com> References: <20180410012150.6573-1-natechancellor@gmail.com> Sender: stable-owner@vger.kernel.org List-ID: Kernels that do not have f6b10209b90d ("virtio-net: switch to use build_skb() for small buffer") will have an extra call to skb_to_sgvec that is not handled by e2fcad58fd23 ("virtio_net: check return value of skb_to_sgvec always"). Since the former does not appear to be stable material, just fix the call up directly. Cc: Jason A. Donenfeld Cc: Sergei Shtylyov Cc: "Michael S. Tsirkin" Cc: Jason Wang Cc: David S. Miller Signed-off-by: Nathan Chancellor --- Greg, if you feel this should be squashed into the previous commit, by all means, feel free. I am not entirely sure if the dev_kfree_skb is necessary here, I was hoping to get some review. --- drivers/net/virtio_net.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index bb2bae522f67..d01285250204 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -556,7 +556,12 @@ static int add_recvbuf_small(struct virtnet_info *vi, struct receive_queue *rq, hdr = skb_vnet_hdr(skb); sg_init_table(rq->sg, 2); sg_set_buf(rq->sg, hdr, vi->hdr_len); - skb_to_sgvec(skb, rq->sg + 1, 0, skb->len); + + err = skb_to_sgvec(skb, rq->sg + 1, 0, skb->len); + if (unlikely(err < 0)) { + dev_kfree_skb(skb); + return err; + } err = virtqueue_add_inbuf(rq->vq, rq->sg, 2, skb, gfp); if (err < 0) -- 2.17.0