Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp512643rwd; Mon, 12 Jun 2023 17:51:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4NhEaJwnWewSa7EOT/X3t00W53M5usYDGPicWv1SCqQ6yQcY5hadHeaZzouzVVX5bV6KWK X-Received: by 2002:a17:907:7207:b0:974:5487:6054 with SMTP id dr7-20020a170907720700b0097454876054mr9540354ejc.71.1686617514786; Mon, 12 Jun 2023 17:51:54 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1686617514; cv=pass; d=google.com; s=arc-20160816; b=r3vg+CKPOpdV35WT118i/92dWJRnE2UQfhQP2wCunynzt4GjJN4VdyNaHA6GOMyeDY NSLASH0t3l+IODTBYReXsx/CKfPsUEgABMn67eRzdIjtLuo5SMclQquakpRq1cs3uGI2 ATrz4TdJQ8Hk6CA5sdtUaorW/OGSgaxIhsRZH9bXIMBKRLHwRu0bgtReWOD127Cv1OwO uMeF9hknkrKfRO3t6jDqF5OfnQ76DODKsCuUa1IJ4CwpDMRMHCIGg1YHPvHsHxy+NrGW UBVuUfH9p4IblQN7sSMalmbbJcos+qIADGdo2HUGG5q2Zyp82R+g38m2ksO9zBpUgEa3 AiUg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=hHwx7Ba0o/7i8sGMU2jMvDl3Qtii6c0+2eMa3jNioQU=; b=AN7mucjhzBj7dFSmhfX3lgxtl0sLp9LJzD7/26v6dPrJkYHgkQ8hG3jXRg1aSi5rju f2cMGjzUOdkzTqw3ypp7/bLJblv5U6gy78wizbPsv/3BsbbyQ4rWItcoXatcUIuP5Qki Bj1NfXfHWTChlKaKL40rKj4rD6kl655xHPEjTAxfssEISrLeUXO/B5lVLJxKjmkb0PSG Pk70L4ZPAsDnvQFKk9Aw4j6NEjXz2wCE48XchmwAIZ8Dd66wxj5sLePo4wqUIzKuKdSQ FPidYfsmzz98DIkPnP/Ly/hIWr5w4PdhyjBywS4Co12vLgbNYV5T6Tt49fBlIzrsDTQY eATw== ARC-Authentication-Results: i=2; mx.google.com; dkim=fail header.i=@templeofstupid.com header.s=dreamhost header.b=Bs7T50A6; arc=pass (i=1); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lu3-20020a170906fac300b0096f7ae24bfbsi5949498ejb.768.2023.06.12.17.51.29; Mon, 12 Jun 2023 17:51:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@templeofstupid.com header.s=dreamhost header.b=Bs7T50A6; arc=pass (i=1); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238599AbjFMAo7 (ORCPT + 99 others); Mon, 12 Jun 2023 20:44:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239103AbjFMAoq (ORCPT ); Mon, 12 Jun 2023 20:44:46 -0400 Received: from bird.elm.relay.mailchannels.net (bird.elm.relay.mailchannels.net [23.83.212.17]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 70C0010F3 for ; Mon, 12 Jun 2023 17:44:42 -0700 (PDT) X-Sender-Id: dreamhost|x-authsender|kjlx@templeofstupid.com Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id DE121881F96 for ; Tue, 13 Jun 2023 00:44:41 +0000 (UTC) Received: from pdx1-sub0-mail-a313.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 7E3778807AD for ; Tue, 13 Jun 2023 00:44:41 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1686617081; a=rsa-sha256; cv=none; b=12GJnRvFDaSOHMjbi1Xl43R5uypE6GIl9xb0P49ysjGW61K7Px8HsqMti9rHaGYNrh0geE vfBnMzjm7NNAIGp6NYDZ16aFqvTBSUeksQIzeipR9r5zBBDziJZI25haDwsrAs41tKvaXR pZdZlBuBrL4tnNXCIRTohDDK8QAfUR+pAtTrDILcdmNCKSZu+fo9quFeLPviZ6FubTIXel lgkhgxORTyUflx5Vp+BJYnLPjq9/GxcsFb8t99frsvgGLmVSBehyydlq20YnCMKga8RVjS kfbohsotlO8PpEnIr/oWTWr67GoSTb+AdFXycU0OMkJzpb//k+s8dT2a7ATG4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1686617081; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hHwx7Ba0o/7i8sGMU2jMvDl3Qtii6c0+2eMa3jNioQU=; b=eZqXajnVnCabCMa8swWfAztJmv0naHP4bvr5oTQI5B9Hc9IFXqawh6k7gLAyzonjBYHFgw JczXdV/FuWHN8Mvm9EkC30rv+ERiwKcfxd+Prz0M5UUeUx67QRoFEH1dRcvSy1kMRwJ3dS SOkWYbmM0Um46NSlPIdLP5Yuo2ohTrE429fEwrpdwqP9LwWdQuEOIf9UXGvnmh2+72S0bc 24ZZGoLKenvOZooJEPHwQfKqDt3W+e69ekyoPeSZ455jJV6zovMZyzfMI8L1h27ynQqtiL 8DawiD6W11O9LbOv0iH0r88M0z0A2neZvcGoHXUQ3IKFBLM+aS2XOaqWWSKrNQ== ARC-Authentication-Results: i=1; rspamd-6c69b8658d-lwc98; auth=pass smtp.auth=dreamhost smtp.mailfrom=kjlx@templeofstupid.com X-Sender-Id: dreamhost|x-authsender|kjlx@templeofstupid.com X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|kjlx@templeofstupid.com X-MailChannels-Auth-Id: dreamhost X-Lyrical-Squirrel: 19ebcf1a2b939bfe_1686617081730_3236530772 X-MC-Loop-Signature: 1686617081730:2147456260 X-MC-Ingress-Time: 1686617081730 Received: from pdx1-sub0-mail-a313.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.109.138.2 (trex/6.8.1); Tue, 13 Jun 2023 00:44:41 +0000 Received: from kmjvbox (c-73-93-64-36.hsd1.ca.comcast.net [73.93.64.36]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kjlx@templeofstupid.com) by pdx1-sub0-mail-a313.dreamhost.com (Postfix) with ESMTPSA id 4Qg8vs1tzxzVy for ; Mon, 12 Jun 2023 17:44:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=templeofstupid.com; s=dreamhost; t=1686617081; bh=hHwx7Ba0o/7i8sGMU2jMvDl3Qtii6c0+2eMa3jNioQU=; h=Date:From:To:Cc:Subject:Content-Type; b=Bs7T50A61vSftJ/OUskXcc7QbtAU6/hxoQ1ZimtxVarYPRBQw4WPlKR94ozis/mFy h+CRGQSB2fgXOmzBZk43U1XNRqqZ/K4JJM72tDvPDb9I19/SuOcqPqdxevKCxyo0wm OuNRdTn1+W6LDLGsuBrm+9h3ZurA4FpOpcMLU2V0= Received: from johansen (uid 1000) (envelope-from kjlx@templeofstupid.com) id e027c by kmjvbox (DragonFly Mail Agent v0.12); Mon, 12 Jun 2023 17:44:40 -0700 Date: Mon, 12 Jun 2023 17:44:40 -0700 From: Krister Johansen 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 , Mykola Lysenko , Shuah Khan , Ilya Leoshkevich , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH bpf v5 1/2] bpf: ensure main program has an extable Message-ID: <6de9b2f4b4724ef56efbb0339daaa66c8b68b1e7.1686616663.git.kjlx@templeofstupid.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY,URIBL_BLOCKED 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 When subprograms are in use, the main program is not jit'd after the subprograms because jit_subprogs sets a value for prog->bpf_func upon success. Subsequent calls to the JIT are bypassed when this value is non-NULL. This leads to a situation where the main program and its func[0] counterpart are both in the bpf kallsyms tree, but only func[0] has an extable. Extables are only created during JIT. Now there are two nearly identical program ksym entries in the tree, but only one has an extable. Depending upon how the entries are placed, there's a chance that a fault will call search_extable on the aux with the NULL entry. Since jit_subprogs already copies state from func[0] to the main program, include the extable pointer in this state duplication. Additionally, ensure that the copy of the main program in func[0] is not added to the bpf_prog_kallsyms table. Instead, let the main program get added later in bpf_prog_load(). This ensures there is only a single copy of the main program in the kallsyms table, and that its tag matches the tag observed by tooling like bpftool. Cc: stable@vger.kernel.org Fixes: 1c2a088a6626 ("bpf: x64: add JIT support for multi-function programs") Signed-off-by: Krister Johansen Acked-by: Yonghong Song Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich --- kernel/bpf/verifier.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 0dd8adc7a159..cf5f230360f5 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17217,9 +17217,10 @@ static int jit_subprogs(struct bpf_verifier_env *env) } /* finally lock prog and jit images for all functions and - * populate kallsysm + * populate kallsysm. Begin at the first subprogram, since + * bpf_prog_load will add the kallsyms for the main program. */ - for (i = 0; i < env->subprog_cnt; i++) { + for (i = 1; i < env->subprog_cnt; i++) { bpf_prog_lock_ro(func[i]); bpf_prog_kallsyms_add(func[i]); } @@ -17245,6 +17246,8 @@ static int jit_subprogs(struct bpf_verifier_env *env) prog->jited = 1; prog->bpf_func = func[0]->bpf_func; prog->jited_len = func[0]->jited_len; + prog->aux->extable = func[0]->aux->extable; + prog->aux->num_exentries = func[0]->aux->num_exentries; prog->aux->func = func; prog->aux->func_cnt = env->subprog_cnt; bpf_prog_jit_attempt_done(prog); -- 2.25.1