Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp1061437pxb; Wed, 6 Apr 2022 07:51:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGmmGnFSLl3hDrCc97C6PwJsAG3/jbBrFKu3cuK2Wa0qg1pSPXYtTodG21Dih6XAh8g13k X-Received: by 2002:a17:90a:6393:b0:1bf:70e7:27d2 with SMTP id f19-20020a17090a639300b001bf70e727d2mr10403761pjj.1.1649256660668; Wed, 06 Apr 2022 07:51:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649256660; cv=none; d=google.com; s=arc-20160816; b=uB9HYeBiYlw7T10DSt773bjCz+LqIaPWd+QIiVHJfd5dOVq9uyFhxwXcLgnc87KrCh qyS4iI/FCiZuWJq64g2QeAZsKRy1xXHdJGyeFO2AFiPyQwTFymRRFlTrfIs41xaEcupI 25HXQYbbhWiswIh4TOabzf23QFg9a4e+lqUsbKWLIW8NY6L3nD0yJ/IXBLmsmlwqACfY kyt504AsmLCAfk5Z6XKVBRwUmMxZMkb21SPSd8Vcsln98xjhWbOUxpN93D4iYQuQ36Ok 1+3dlkpiRliowLBmZGysIgucz534wQt+tLqVwvcXFOSqbWFHz/n5ed8UJQDnuoMEZU4s T4RQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wgTa0VjfDfC7FS9BARdL4PO0ysmP24PE8dtFI705ImE=; b=UrjoZa9Ir4BSpBqenp+cdU/YrNE99+hmhrboiJm33RQpACnfV0MjUGHFQALuV8/xAx ZvWxNgYkK8Ou5dhFVCzVdg6/Eby4dJ4P2RYFjQAPfK8OHR5zj733I1xiojBDO7liXYaw Yd5wMQYGn3NLLtDNyWBe/jbxP66FB2YaZafA0oKipiLkYDaq9C4/eBwbfNfiwld5h8pr Ej3WDzt0Gw9e8F7S/bEbXD781dj9u9kcHZ/UgmS+Eacz8qdWLE9KkduxAygB5jhDRG+1 t6rb1IByOBYr/ZwX9attg/Y8+vFbLvBeUfMFvy6chrAKlWETYil391lUcd5J6aHRy2gK oQTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ze3dA1yR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id h7-20020a170902f54700b00156bc316626si7054328plf.366.2022.04.06.07.51.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 07:51:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ze3dA1yR; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B28974BDACE; Wed, 6 Apr 2022 05:42:20 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381039AbiDEVhh (ORCPT + 99 others); Tue, 5 Apr 2022 17:37:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358203AbiDEK2F (ORCPT ); Tue, 5 Apr 2022 06:28:05 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F2EEDF11; Tue, 5 Apr 2022 03:17:02 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id EF73361777; Tue, 5 Apr 2022 10:17:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C198C385A0; Tue, 5 Apr 2022 10:17:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649153821; bh=4aZGSueq1nni+HIWlZFJGt9xx0C6ejjiA6qyw9yZHqA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ze3dA1yRCQ7R3ZMHmahNmNm/NOZgIBdG7VjxOZtqklT9+e5mpL/1JHxbL01Zt4n+p XfT69Ms9Rvykda8YFfKZBP5YTP1eMj8Q8q+5uZp5xvU1lI09eVWeVXaKFgFOhccfDK 74AYOmsfyuu1OY8fEF/XR6zCG8Cp6bNPzxsbGBb4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wang Yufen , Daniel Borkmann , John Fastabend , Sasha Levin Subject: [PATCH 5.10 358/599] bpf, sockmap: Fix double uncharge the mem of sk_msg Date: Tue, 5 Apr 2022 09:30:52 +0200 Message-Id: <20220405070309.485312156@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070258.802373272@linuxfoundation.org> References: <20220405070258.802373272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wang Yufen [ Upstream commit 2486ab434b2c2a14e9237296db00b1e1b7ae3273 ] If tcp_bpf_sendmsg is running during a tear down operation, psock may be freed. tcp_bpf_sendmsg() tcp_bpf_send_verdict() sk_msg_return() tcp_bpf_sendmsg_redir() unlikely(!psock)) sk_msg_free() The mem of msg has been uncharged in tcp_bpf_send_verdict() by sk_msg_return(), and would be uncharged by sk_msg_free() again. When psock is null, we can simply returning an error code, this would then trigger the sk_msg_free_nocharge in the error path of __SK_REDIRECT and would have the side effect of throwing an error up to user space. This would be a slight change in behavior from user side but would look the same as an error if the redirect on the socket threw an error. This issue can cause the following info: WARNING: CPU: 0 PID: 2136 at net/ipv4/af_inet.c:155 inet_sock_destruct+0x13c/0x260 Call Trace: __sk_destruct+0x24/0x1f0 sk_psock_destroy+0x19b/0x1c0 process_one_work+0x1b3/0x3c0 worker_thread+0x30/0x350 ? process_one_work+0x3c0/0x3c0 kthread+0xe6/0x110 ? kthread_complete_and_exit+0x20/0x20 ret_from_fork+0x22/0x30 Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface") Signed-off-by: Wang Yufen Signed-off-by: Daniel Borkmann Acked-by: John Fastabend Link: https://lore.kernel.org/bpf/20220304081145.2037182-5-wangyufen@huawei.com Signed-off-by: Sasha Levin --- net/ipv4/tcp_bpf.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c index c089e8166fa9..eaf2308c355a 100644 --- a/net/ipv4/tcp_bpf.c +++ b/net/ipv4/tcp_bpf.c @@ -218,10 +218,9 @@ int tcp_bpf_sendmsg_redir(struct sock *sk, struct sk_msg *msg, struct sk_psock *psock = sk_psock_get(sk); int ret; - if (unlikely(!psock)) { - sk_msg_free(sk, msg); - return 0; - } + if (unlikely(!psock)) + return -EPIPE; + ret = ingress ? bpf_tcp_ingress(sk, psock, msg, bytes, flags) : tcp_bpf_push_locked(sk, msg, bytes, flags, false); sk_psock_put(sk, psock); -- 2.34.1