Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp5143945iob; Mon, 9 May 2022 09:29:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy8WRzUjOeaN3ds3Bk8ukY4gD0wryQh77wMkxkuUI+ksmsyXWF8ON9VA2heLcI3uPJtzSF1 X-Received: by 2002:ad4:5dc3:0:b0:45a:cde5:f31c with SMTP id m3-20020ad45dc3000000b0045acde5f31cmr14195735qvh.90.1652113772499; Mon, 09 May 2022 09:29:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652113772; cv=none; d=google.com; s=arc-20160816; b=hbiIZERQDzubZl4rHugzEyP4vvTd2xJUGNJvsDDvMFCXK81+hW5oVNlMXSEs2HpXZp ziwwcFVZpm0X44j05Xt5yVwiml4IICi3KGhm7qWQNVMd9pSlk9HHcgW77sSINeeNiiRa Su4rqIYESxN36oZhkI7VsRKTSn37ok6EkM/ZsXRdLw6+HvGmyvpsH3mhT1RgoWTXRHWc TsBLPLjQL+MutnnIQDtNJZLCQHsTPy+HBZPhUryhzt0eMzCa/oMbg2o92/pAeHgAjwmq 6iM2v5AiXHJ6CR0P8X1QtV80taateqvNmwJ8NBZoBmo7lE3hUZ4iRzcgCF5EUW/H5CXK dMGg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Fe5b9tiWQsZHrqvhq/rk52YfCTgJ0B2ttl4LRl7MsT4=; b=ECvG171aTI5u1Rni25uZMQrwFic5ILSp6eR6mN9MdUWt1f2I+Xxo2YBF2AFMLqaAuX yiIeSIfm9DmGp+EWt6DJRVM2FVHM4uvYKbBKjb9hsNJOG3fkrERS1KftqDZea19Oqowh 7Wmj8Zuh1tgub+sso3nQeCT6VfdnDpiY2xTT1ofBaGzRzNtMtDXmHG4gn7muvs6vtK8C tpJIQsUzZ7YC0kg7w1hVAKKYe621LAMBKKi+rFoCIeNdv+8oFJE4cwCFQIRptSvJE3Qb oU+CFiozyCxJ5rFEimNU3tH+a4QOWJv3g+cz1fzWgj4h4UjthDWmMRC4SjK6E4KhfBMC uQLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=r8uSniqM; 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=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id v7-20020a056214050700b00456549aab33si8422416qvw.511.2022.05.09.09.29.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 May 2022 09:29:32 -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=@kernel.org header.s=k20201202 header.b=r8uSniqM; 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=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DEDF6282037; Mon, 9 May 2022 09:24:10 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239035AbiEIQ1u (ORCPT + 99 others); Mon, 9 May 2022 12:27:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239010AbiEIQ1j (ORCPT ); Mon, 9 May 2022 12:27:39 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 939BA267C30; Mon, 9 May 2022 09:23:45 -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 ams.source.kernel.org (Postfix) with ESMTPS id 526D5B817E5; Mon, 9 May 2022 16:23:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03D49C385AC; Mon, 9 May 2022 16:23:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652113423; bh=FwXO3JACkg3sY4dA/R+BvoEHsuUOyXZesgC8uLp382Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r8uSniqMZqOXFG9O7Nk2Dk2ArAW8XkksmnqlDJ+zFtLseUC0uM5wlwP6iQjVnEUtb GU09qu8I4chB+Kewwt7nmV0MfK05y2oikCySLw8TWXbzQr5n+xtn0KvG7XLB/bmXwj TkHu5PCrY6eiG+FiEAE2VTaeC+E+9FaXtfyxaWrGUAtmZP960adBkqjgORqnmAfVUz hXG1Rnt1WpNyLI+GVin684xH/TzgevDgdIbp1DdQ8r8T5QG7tcOcJ5rC6OV7VXjS/8 TKGQZfVWW9yu9QzUI//IXm4wuqGyWWbGwv0Id5li44ruIR51jpCJuuWJzKhDBGmyON 8mpI+NeW9WMXQ== Received: from mchehab by mail.kernel.org with local (Exim 4.94.2) (envelope-from ) id 1no6Ae-006xVX-Jf; Mon, 09 May 2022 18:23:40 +0200 From: Mauro Carvalho Chehab To: Luis Chamberlain Cc: Mauro Carvalho Chehab , "Daniel Vetter" , "David Airlie" , "Greg KH" , "Jaroslav Kysela" , "Kai Vehmanen" , "Lucas De Marchi" , "Pierre-Louis Bossart" , "Takashi Iwai" , Christophe JAILLET , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, linux-mtd@lists.infradead.org, mauro.chehab@linux.intel.com Subject: [PATCH v6 3/4] module: set holders when symbol_get() is used Date: Mon, 9 May 2022 18:23:38 +0200 Message-Id: X-Mailer: git-send-email 2.35.3 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE 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 Some Kernel modules use symbol_get() or symbol_request() in order to bind into other drivers. That's the case, for instance, of media dvb drivers that hook the frontend drivers via I2C using dvb_attach() macro. When such bindings happen, one needs first to unload/unbind the driver that got the symbol before being able to unload/unbind the module that contains the needed symbol. Add a logic to document it via /proc/modules and via lsmod. Signed-off-by: Mauro Carvalho Chehab --- See [PATCH v6 0/4] at: https://lore.kernel.org/all/cover.1652113087.git.mchehab@kernel.org/ drivers/mtd/chips/gen_probe.c | 4 ++-- include/linux/module.h | 4 ++-- kernel/module/main.c | 3 ++- samples/hw_breakpoint/data_breakpoint.c | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/chips/gen_probe.c b/drivers/mtd/chips/gen_probe.c index 4d4f97841016..f1e97633ac09 100644 --- a/drivers/mtd/chips/gen_probe.c +++ b/drivers/mtd/chips/gen_probe.c @@ -208,10 +208,10 @@ static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, if (!probename) return NULL; - probe_function = __symbol_get(probename); + probe_function = __symbol_get(probename, THIS_MODULE); if (!probe_function) { request_module("cfi_cmdset_%4.4X", type); - probe_function = __symbol_get(probename); + probe_function = __symbol_get(probename, THIS_MODULE); } kfree(probename); diff --git a/include/linux/module.h b/include/linux/module.h index a66b9be92ef5..07a77c2618b5 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -298,8 +298,8 @@ struct notifier_block; extern int modules_disabled; /* for sysctl */ /* Get/put a kernel symbol (calls must be symmetric) */ -void *__symbol_get(const char *symbol); -#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x)))) +void *__symbol_get(const char *symbol, struct module *this); +#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x), THIS_MODULE))) /* modules using other modules: kdb wants to see this. */ struct module_use { diff --git a/kernel/module/main.c b/kernel/module/main.c index 6044aeba0f18..ec1baa67d6e7 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1259,7 +1259,7 @@ static void free_module(struct module *mod) #endif } -void *__symbol_get(const char *symbol) +void *__symbol_get(const char *symbol, struct module *this) { struct find_symbol_arg fsa = { .name = symbol, @@ -1273,6 +1273,7 @@ void *__symbol_get(const char *symbol) return NULL; } preempt_enable(); + ref_module_dependency(fsa.owner, this); return (void *)kernel_symbol_value(fsa.sym); } EXPORT_SYMBOL_GPL(__symbol_get); diff --git a/samples/hw_breakpoint/data_breakpoint.c b/samples/hw_breakpoint/data_breakpoint.c index 418c46fe5ffc..30b3261a894b 100644 --- a/samples/hw_breakpoint/data_breakpoint.c +++ b/samples/hw_breakpoint/data_breakpoint.c @@ -41,7 +41,7 @@ static int __init hw_break_module_init(void) { int ret; struct perf_event_attr attr; - void *addr = __symbol_get(ksym_name); + void *addr = __symbol_get(ksym_name, THIS_MODULE); if (!addr) return -ENXIO; -- 2.35.3