Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp5132899rwl; Mon, 3 Apr 2023 15:04:43 -0700 (PDT) X-Google-Smtp-Source: AKy350Y0bjADCYpb4OzTT5gnUlN3cEbipGxbEGB+vzJ1a4PLOWbtUAviNQuTFkJfQh8H0QoaE+UP X-Received: by 2002:aa7:9492:0:b0:623:1396:4611 with SMTP id z18-20020aa79492000000b0062313964611mr141767pfk.9.1680559483011; Mon, 03 Apr 2023 15:04:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680559482; cv=none; d=google.com; s=arc-20160816; b=T2hHdoztXaK+IHmBAE704tuQCVpZm00kpj4tCzq6W9MsRGdjBGLQfibmSj7W1cIQA1 5TclBk8/KF3zHLD+v0O3tbJQDLj+B1GREyUrBE4Ftyx03pLefTQaS/ZFxa8ljpupC7gy Nba5zXAZxYSXj1eDeSHiG/htmS7lXId0hmKGbEGGd9Dr+kjIGx15aYnsaug58S8s+2uG ONpsB9IOBkPFiv0aD1LXmtm5N/g742FthKd1eclmKhPBM4E3CkA8EwFd/tzdAR1oRiWf avQvvi/YZifcBKEi+6/3PujHmF/LwY1DNV0+snQDafQbcAo/NlgR34nKO8vgRa6wFkOg WrYA== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=5AU+kEyLgPJ+DXEl90WqLxYYscpIxbEaBLgn0/D5HZU=; b=KkrKVwzbE6xkH5ab45AZMs/2GI23Zl/jf17hdc8B/Wjdx6s7J4hv/Vbf3x3eB8KRJF tAyxyj1X7C0u23/tXn18v6HWwrxVt97E9m5/uZpPjz3JenVw4ch9d7ksxbTM4B6WJAts sJeY81/Kyxjnb1mp1FZNQczFitV7MQKvDI8lgJ+x8L3BlxHnZ4mLBHb5IFEjmyRDsyho mxBTXaOvCjbvs2CF5LLuzTmisBX1HBKHSj6jxw1I3OZzj8BAjXopFpad4sv/h3ZfCeOo 97Acb1lrhA7PD8hwBu609jFxY23ua4w3dBHX38luhptbHr8JJ9p6tWk7+bT4pqYcs8bR FO1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RewR5Ifv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i125-20020a625483000000b005e06c0a9852si9015811pfb.179.2023.04.03.15.04.30; Mon, 03 Apr 2023 15:04:42 -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=pass header.i=@kernel.org header.s=k20201202 header.b=RewR5Ifv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233523AbjDCWDE (ORCPT + 99 others); Mon, 3 Apr 2023 18:03:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232923AbjDCWDD (ORCPT ); Mon, 3 Apr 2023 18:03:03 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A2551BF3; Mon, 3 Apr 2023 15:03: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 EA4C162D1C; Mon, 3 Apr 2023 22:03:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 32DBBC433D2; Mon, 3 Apr 2023 22:02:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1680559381; bh=E+J++Ja453WekURa/wOhcsyf4PVCNOpn1MEHhpca8zk=; h=From:To:Cc:Subject:Date:From; b=RewR5IfvGqVZuwU9TjmhMmOMXhm4RivCQkRakbBeB6/eYdRd11AV9bVGBRguvh+TK oZRH6AmThzgzK86LkXaV9E4RldjPxBagsNOYXmurDHJkOCx0myGE9H+wNdm08VQLrP R/L+ko9KttNkmR5RB6a1j5flY0BhtZrY75x8X3Eq1eb1HyySe4ENu9exxBKdupIhDo qQ2fupFjrjCZilZ539sSQeVheDdOWFak0+qFHnZborD15tw7+krhtPbK1q17detcOm XCqcE5MpeYrnTBYXWbmn7pAUKfnOeCQpnz2eUJZPZjezm0Lv6HvSvW1oFOX5lEJkSc N//V/7Dl0YtZQ== From: Jiri Olsa To: Luis Chamberlain , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: Artem Savkov , bpf@vger.kernel.org, linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Petr Mladek , "Leizhen (ThunderTown)" , Viktor Malik Subject: [PATCH bpf-next] kallsyms: Disable preemption for find_kallsyms_symbol_value Date: Tue, 4 Apr 2023 00:02:54 +0200 Message-Id: <20230403220254.2191240-1-jolsa@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=unavailable 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 Artem reported suspicious RCU usage [1]. The reason is that verifier calls find_kallsyms_symbol_value with preemption enabled which will trigger suspicious RCU usage warning in rcu_dereference_sched call. Disabling preemption in find_kallsyms_symbol_value and adding __find_kallsyms_symbol_value function. Fixes: 31bf1dbccfb0 ("bpf: Fix attaching fentry/fexit/fmod_ret/lsm to modules") [1] https://lore.kernel.org/bpf/ZBrPMkv8YVRiWwCR@samus.usersys.redhat.com/ Reported-by: Artem Savkov Signed-off-by: Jiri Olsa --- kernel/module/kallsyms.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c index ab2376a1be88..bdc911dbcde5 100644 --- a/kernel/module/kallsyms.c +++ b/kernel/module/kallsyms.c @@ -442,7 +442,7 @@ int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type, } /* Given a module and name of symbol, find and return the symbol's value */ -unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) +static unsigned long __find_kallsyms_symbol_value(struct module *mod, const char *name) { unsigned int i; struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); @@ -466,7 +466,7 @@ static unsigned long __module_kallsyms_lookup_name(const char *name) if (colon) { mod = find_module_all(name, colon - name, false); if (mod) - return find_kallsyms_symbol_value(mod, colon + 1); + return __find_kallsyms_symbol_value(mod, colon + 1); return 0; } @@ -475,7 +475,7 @@ static unsigned long __module_kallsyms_lookup_name(const char *name) if (mod->state == MODULE_STATE_UNFORMED) continue; - ret = find_kallsyms_symbol_value(mod, name); + ret = __find_kallsyms_symbol_value(mod, name); if (ret) return ret; } @@ -494,6 +494,16 @@ unsigned long module_kallsyms_lookup_name(const char *name) return ret; } +unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) +{ + unsigned long ret; + + preempt_disable(); + ret = __find_kallsyms_symbol_value(mod, name); + preempt_enable(); + return ret; +} + int module_kallsyms_on_each_symbol(const char *modname, int (*fn)(void *, const char *, struct module *, unsigned long), -- 2.39.2