From nobody Sat Feb 7 17:55:36 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5B01EB64DD for ; Wed, 19 Jul 2023 03:32:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231252AbjGSDcG (ORCPT ); Tue, 18 Jul 2023 23:32:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230242AbjGSDba (ORCPT ); Tue, 18 Jul 2023 23:31:30 -0400 Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 531021992 for ; Tue, 18 Jul 2023 20:30:52 -0700 (PDT) Received: by mail-qk1-x72f.google.com with SMTP id af79cd13be357-7680e39103bso372379685a.3 for ; Tue, 18 Jul 2023 20:30:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudflare.com; s=google; t=1689737451; x=1692329451; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=q5ViIa9kIWhKpjXcZBtYO65UsTVYeK9sG8XIg7UKsWY=; b=OOFAVLqjATrStPvjkz6NnW62pm2cGNMLe4dpM6cNDeB5rP5Y5izGVnDiI3Uhjykxg+ TTCC+ei8wan7SyFu5F4yF2GdKBEDzEoSQUphmNFPuNgTmBHea1PmRR2qP//KG9JFVMF1 0Br/DjzwQRdgd9lFNRolxIY1vwdZ9kfaueXA8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689737451; x=1692329451; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=q5ViIa9kIWhKpjXcZBtYO65UsTVYeK9sG8XIg7UKsWY=; b=es6CwgWQBzeXBoLka8ZTq1HzpbP9EJMZvEcpewjDiDZ/qFCN70sWySLhI4iHq53KOz 2zJhJ4iJF9Sefgc5dYdusaEM4A67CzzEJGQoEcsMLwgNKTe5GwwnyIomsHtQwIKUPy6z vL3Vqy/iu5NrmE/F8heFgmf8X6d7oYcw90AnALFJPDYobsB6jDZymV86R965Eiqm328P g6xnO7WU9HZb0icSYJafyFyHjeOVsATWoMkLEuqjgse/4e4WGPdFywaefXNdV3oVN4cZ 8QZnIsGwj9/nik32uRkV31XFq3p+qprnhDTeImjssSBwXMwaZMV+m98uhnQjIANW2Djp qMow== X-Gm-Message-State: ABy/qLZHRd0tv+UouOSp9wKBX+1FzLNmtSoKLteN+na1CzxyCRtm9Yww 0wUYLeI2909YX+m6IVPDovalig== X-Google-Smtp-Source: APBJJlEDtuDMnxxA73PfvNz3FCIl2UrlOG+E4Uu71tzJs2uiJ2IVYZ5Pm2FW7nVh9jL+ddXoNlHHPQ== X-Received: by 2002:a05:620a:8287:b0:768:14ee:2467 with SMTP id ox7-20020a05620a828700b0076814ee2467mr1485529qkn.66.1689737451232; Tue, 18 Jul 2023 20:30:51 -0700 (PDT) Received: from debian.debian ([140.141.197.139]) by smtp.gmail.com with ESMTPSA id u1-20020ae9c001000000b00767d203ed84sm1028074qkk.24.2023.07.18.20.30.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jul 2023 20:30:50 -0700 (PDT) Date: Tue, 18 Jul 2023 20:30:48 -0700 From: Yan Zhai To: netdev@vger.kernel.org Cc: kernel-team@cloudflare.com, Martin KaFai Lau , Daniel Borkmann , John Fastabend , Alexei Starovoitov , Andrii Nakryiko , Song Liu , Yonghong Song , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jordan Griege Subject: [PATCH v2 net] bpf: do not return NET_XMIT_xxx values on bpf_redirect Message-ID: MIME-Version: 1.0 Content-Disposition: inline Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" skb_do_redirect handles returns error code from both rx and tx path. The tx path codes are special, e.g. NET_XMIT_CN: they are non-negative, and can conflict with LWTUNNEL_XMIT_xxx values. Directly returning such code can cause unexpected behavior. We found at least one bug that will panic the kernel through KASAN report when we are redirecting packets to a down or carrier-down device at lwt xmit hook: https://gist.github.com/zhaiyan920/8fbac245b261fe316a7ef04c9b1eba48 Above bug is hit because NET_XMIT_CN is returned by noop_qdisc of the down device, and it propagates from dev_queue_xmit all way to the lwt logic. The result is skb that has been freed by the qdisc continues to neighbor subsystem and triggers the bug. This change converts the tx code to proper errors that lwt can consume. Suggested-by: Stanislav Fomichev Reported-by: Jordan Griege Signed-off-by: Yan Zhai --- v2: coding style fix; sent to netdev instead of bpf for bug fixing. --- net/core/filter.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/core/filter.c b/net/core/filter.c index 06ba0e56e369..8738c7a4701d 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2129,6 +2129,9 @@ static inline int __bpf_tx_skb(struct net_device *dev= , struct sk_buff *skb) ret =3D dev_queue_xmit(skb); dev_xmit_recursion_dec(); =20 + if (unlikely(ret > 0)) + ret =3D net_xmit_errno(ret); + return ret; } =20 --=20 2.30.2