From nobody Sun Feb 8 03:38:23 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 ED209C00528 for ; Tue, 25 Jul 2023 04:13:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231650AbjGYENS (ORCPT ); Tue, 25 Jul 2023 00:13:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230207AbjGYENQ (ORCPT ); Tue, 25 Jul 2023 00:13:16 -0400 Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3E9BE66 for ; Mon, 24 Jul 2023 21:13:14 -0700 (PDT) Received: by mail-qv1-xf30.google.com with SMTP id 6a1803df08f44-63cf40716ffso19475016d6.2 for ; Mon, 24 Jul 2023 21:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudflare.com; s=google; t=1690258394; x=1690863194; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=dExAqqjX2sAceHiZkTjWc7ytvlJ4THivNCeY471el6A=; b=a7JHbgZ44jJD9d5BBzwGMElBDFTGmE6VPiSm37KRstnL6yyrYlU04Jyxj8DJlTLI0k 1GmawVpW5PeKff+kV0qUwqnxLNbVXOXAJSJ/D7TPQnkWacQb7Z1ntVAdH+WW/s/Wxgkv Gz1dvEr/HcdiSu3pizPxhZC03nzUjhgq5jOHg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690258394; x=1690863194; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dExAqqjX2sAceHiZkTjWc7ytvlJ4THivNCeY471el6A=; b=i6Rmm9OJ+z76IWCkzWb/0Bvu2r0sA+P8fCBdDcLDrGrfOZ7URBncmyZgK3KqDDzIEV lq9SyJf9bAwXqOvm1c9IEfs8J8N83oCHRZ4aRX9kUELBLBmmSEkONY/o3LDjm2PF9Y9a x3E8gA6kNIGvWh2UfY1T7ZLLxxmnmLAQVZmA42abu6EHIqjB5MyyiFL8oBqAx32OSlam 3vq5+lMLIEvAUM6OILy8mnFgE4ssR/Lpn0QTW+SIOI0Pj36gOR40s60OTdm6u6S8W/9m FeG3O1ojAp5ZYW6E5h87IwNrIBbmGzwugt/AxLs1DFl+THOMz0RAwy4RMgeZCv7i+udT Z2FQ== X-Gm-Message-State: ABy/qLYwVhtGGh7jXS+UfOjGY8Ua6zoDg2UqS87KMA8a+jc7r2Hp2YVA E5747ubl82GSb8jxy7WUpH39kQ== X-Google-Smtp-Source: APBJJlElpMFRA5wQX8bBctiucU9VqeMb9/lq+C7HP3dKR1bxEmkzSliV3j65wJVUuW3WBDafCxB8+w== X-Received: by 2002:a05:6214:184d:b0:63d:a05:256a with SMTP id d13-20020a056214184d00b0063d0a05256amr1596951qvy.8.1690258393862; Mon, 24 Jul 2023 21:13:13 -0700 (PDT) Received: from debian.debian ([140.141.197.139]) by smtp.gmail.com with ESMTPSA id j8-20020a0cf308000000b0063cdbe73a05sm833186qvl.97.2023.07.24.21.13.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jul 2023 21:13:13 -0700 (PDT) Date: Mon, 24 Jul 2023 21:13:10 -0700 From: Yan Zhai To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Mykola Lysenko , Shuah Khan , Yan Zhai , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, kernel-team@cloudflare.com, Jordan Griege Subject: [PATCH v3 bpf 1/2] bpf: fix skb_do_redirect return values Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: 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 returns various of values: error code (negative), 0 (success), and some positive status code, e.g. NET_XMIT_CN, NET_RX_DROP. Such code are not handled at lwt xmit hook in function ip_finish_output2 and ip6_finish_output, which can cause unexpected problems. This change converts the positive status code to proper error code. Suggested-by: Stanislav Fomichev Reported-by: Jordan Griege Signed-off-by: Yan Zhai --- v3: converts also RX side return value in addition to TX values v2: code style change suggested by Stanislav Fomichev --- net/core/filter.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/net/core/filter.c b/net/core/filter.c index 06ba0e56e369..3e232ce11ca0 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2095,7 +2095,12 @@ static const struct bpf_func_proto bpf_csum_level_pr= oto =3D { =20 static inline int __bpf_rx_skb(struct net_device *dev, struct sk_buff *skb) { - return dev_forward_skb_nomtu(dev, skb); + int ret =3D dev_forward_skb_nomtu(dev, skb); + + if (unlikely(ret > 0)) + return -ENETDOWN; + + return 0; } =20 static inline int __bpf_rx_skb_no_mac(struct net_device *dev, @@ -2106,6 +2111,8 @@ static inline int __bpf_rx_skb_no_mac(struct net_devi= ce *dev, if (likely(!ret)) { skb->dev =3D dev; ret =3D netif_rx(skb); + } else if (ret > 0) { + return -ENETDOWN; } =20 return ret; @@ -2129,6 +2136,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