Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp698783pxt; Fri, 6 Aug 2021 11:28:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlRQn1B9qL7jcrklYmTrJiXlZ1xDgZOo5Hjv/hp7MPLp/JzGbKeo+jNzf/BR0trAHnmNXR X-Received: by 2002:a5d:914b:: with SMTP id y11mr250764ioq.6.1628274502794; Fri, 06 Aug 2021 11:28:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628274502; cv=none; d=google.com; s=arc-20160816; b=FBztH9CPtHsyJ7rtnCbWiiF+BZmy0XKXNXa1Ys3K+gdf0oy4hpkDDMZ3G6/keMF7yS smrHKrSxst7aYyMVz3HkvzMM1P4jyqaftXOuT9YnLM9NvvscLtCmy9+7NzG1Sw+ZhLUr jXJwIAsJeqpp6SsTtJl2H0K++qQhqKdBBKzQENxS4dtpsc+wfUDqP3xepnRBKl+QhEsq h7Ikycjd9OOkSBVuwwOgnTUobhqlmyBRney370Mr/HlqiOlbZ5/GhsoLYlVWock60aaf o2DHyFHvSVb5j3qUHavvtNbXo/NkvNdNQZMb7FbsYAYF7xuMJzakELPdfCWBV4bh38/j pa/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from:dkim-signature; bh=egBPXyBYmGMlQBMUmRxl2nc+0PbWoNUPh+wMswC6yd4=; b=AIOUFSV68xNSyla5iZR99mH1sgeWYXN0jysXNHxsQ8gXQ7G8JsepTFpwg7Z+FBagnN sKCrocS8PCJ9Ir30WpQu4dHdahZ0nMAlwMwFCPowpaedDFBKVYz5lJOS4MVH4mN6SrIW jhfRwKh+iOyLnthSot8sRcE6+XRG91sgTEhByCMT4ORiDXV1qeChJWahBzo4mUsivMb1 legeSKuAUHI/e3FNA7FzvP4i2KH3PPE/n++C3+SKrU3IUn7Xwr/6miFbj77PqXVMhKkh 2g5DgS2ZpM9U2UTBEsL3ntsQzQRSdmEoiR9L0FgH01UGTJEhc7gQFe+M+PenLY192xim lFeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=AuK5kyS3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d5si7438969iow.67.2021.08.06.11.28.11; Fri, 06 Aug 2021 11:28:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=AuK5kyS3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243212AbhHFMxX (ORCPT + 99 others); Fri, 6 Aug 2021 08:53:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:41218 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237819AbhHFMxX (ORCPT ); Fri, 6 Aug 2021 08:53:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Content-Type:MIME-Version:Date:Message-ID:Subject :From; bh=egBPXyBYmGMlQBMUmRxl2nc+0PbWoNUPh+wMswC6yd4=; b=AuK5kyS3mA76tNw1Fct ZqfO1tGW+lcwp2ncETtRW4TbOyO2yZst7jE4/LBrZptROaBA6fiUKHH5ih3316PPWBI+xm9Q+4aUn qUAjsXjZO6OeTPq/h45BQXP94noSvi+13ud0UxsJ5Eebvtsr0vO/fjyKpZBLSr3/gg6Fyk8P27c=; Received: from [10.93.0.56] by relay.sw.ru with esmtp (Exim 4.94.2) (envelope-from ) id 1mBzLR-006co5-Af; Fri, 06 Aug 2021 15:53:01 +0300 From: Vasily Averin Subject: [PATCH NET] vrf: fix null pointer dereference in vrf_finish_output() To: "David S. Miller" , Hideaki YOSHIFUJI , David Ahern , Jakub Kicinski , Eric Dumazet Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@openvz.org, Julian Wiedmann References: <20210806.111412.1329682129695306949.davem@davemloft.net> Message-ID: <5ba67c28-1056-e24d-cad3-4b7aaac01111@virtuozzo.com> Date: Fri, 6 Aug 2021 15:53:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210806.111412.1329682129695306949.davem@davemloft.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org After 14ee70ca89e6 ("vrf: use skb_expand_head in vrf_finish_output") skb->dev is accessed after skb free. Let's replace skb->dev by dev = skb_dst(skb)->dev: vrf_finish_output() is only called from vrf_output(), it set skb->dev to skb_dst(skb)->dev and calls POSTROUTING netfilter hooks, where output device should not be changed. Fixes: 14ee70ca89e6 ("vrf: use skb_expand_head in vrf_finish_output") Reported-by: Julian Wiedmann Signed-off-by: Vasily Averin --- drivers/net/vrf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c index 726adf0..168d4ef 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c @@ -864,7 +864,7 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *s if (unlikely(skb_headroom(skb) < hh_len && dev->header_ops)) { skb = skb_expand_head(skb, hh_len); if (!skb) { - skb->dev->stats.tx_errors++; + dev->stats.tx_errors++; return -ENOMEM; } } @@ -883,7 +883,7 @@ static int vrf_finish_output(struct net *net, struct sock *sk, struct sk_buff *s } rcu_read_unlock_bh(); - vrf_tx_error(skb->dev, skb); + vrf_tx_error(dev, skb); return -EINVAL; } -- 1.8.3.1