From patchwork Sat Mar 11 05:17:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67978 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp128563wrd; Fri, 10 Mar 2023 21:18:58 -0800 (PST) X-Google-Smtp-Source: AK7set9bRshzQbmYy23MY5/PXTlzFV6lo4ChCXprYTwRiknKz9q4Xxak8V2IJ1ZHBmdIHUifw3Kd X-Received: by 2002:a05:6a20:29a9:b0:c7:6c26:48b7 with SMTP id f41-20020a056a2029a900b000c76c2648b7mr22141667pzh.15.1678511937787; Fri, 10 Mar 2023 21:18:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678511937; cv=none; d=google.com; s=arc-20160816; b=lGI0t8a1Myka8aJAxgQHdwnXnGdslUUnDpXvVlF5H+xl9UU8qQExGc4RLyC0AOpIRa Wgio/Zd/EKg+R1F53ESKAYKxhSJ2YBibiU3VYfdzCD5bUNjprXNdAZEz+KFonygy2mBJ zCncZZc+g0l2GwF+aPkY9K9pbpNCVwvZU+VHghzwXIwRGQuOh+uFLj5KZLGaN8rmtFBH ugKkmf0it9EPVhvmsVDNCyjXpFoEA5ppwj8voaorM/GAQ+9V690Bi2pact7NYmMj+GBn eTRhLFA9dNENzw+OmOEUaD2HtYvWYmboiPj/WDM45+w+o3YHWm8qhmYsgomSiKaDEjRz O7XQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fgKIaEVFe3ZJ+AptWb/si2HEmzuXwtpAjqPKXFiEzog=; b=FN6Xv67JUtiEpP/WyLWuWZCOYZ+kmz/2B53d+Q+hoxGWu4+LIiDXmcCEN1/sU+CbLj OBjYOpx5tcZ2uka5VLJxLUwK2WOHP+XkobL3HUFyunCvUrBCdZBPx0ypyT7XHr68+Ph+ 8G90QC6GPIbZhBYn7joqu8vcQSXh4/cs3BiuH/ztd0CArC+ZisTxBXGoxO8YIqwmPdpM RdGM9JIx8oVYmRAjytVKrehgLHuwxdjD1A8gIjfshvKM8rxb0ENk2bEDbJYQlZp5d45G G5qOWMJ6HnKKSdYhEJDCuNf9jjgdkQskiO3gVWaSybOI7UdEboB01+gB+pXWuLFmX1s8 ZzbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=mc+03uC4; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z19-20020aa79f93000000b0058bcb6283edsi1262916pfr.288.2023.03.10.21.18.38; Fri, 10 Mar 2023 21:18:57 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=mc+03uC4; 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 S229994AbjCKFRr (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46736 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229764AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 788F8140520; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=fgKIaEVFe3ZJ+AptWb/si2HEmzuXwtpAjqPKXFiEzog=; b=mc+03uC4v46xoHgDKwIy/jRxpa VXDyh/U/I4ik/2yepzo5eX4By8jC4lxxcVTLAhquivmKGobv0wOcjEMdwLCJM4WEpcWrqeOY7O13j h27DatHPMaYlZfMXrvuJSzcxKYo7uZlT3ax0I9pEJHkPwhWfaqgzKbPmVyaaquBxpVeI0b3iDMC0O 5tGKhUeCbVGJo+jnK8WdTpCECyDy4PgEd5SSLzlDyORHXX9wcO4QJt9APOwDWcOcJojq8AAHB4Hu8 b2he0Fi7jHmXy1uFF6m2sXhSDkGD7oDLrLFewiwKHerM3g7bWGdM1vOx8ZklpVcfnbHt+k+uCnZuj K3/injQA==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBMo-1Z; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 01/12] module: use goto errors on check_modinfo() and layout_and_allocate() Date: Fri, 10 Mar 2023 21:17:01 -0800 Message-Id: <20230311051712.4095040-2-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760047333488757691?= X-GMAIL-MSGID: =?utf-8?q?1760047333488757691?= Although both routines don't have much complex errors paths we will expand on these routine in the future, setting up error lables now for both will make subsequent changes easier to review. This changes has no functional changes. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index b4759f1695b7..5f1473eb34e0 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1998,7 +1998,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) err = check_modinfo_livepatch(mod, info); if (err) - return err; + goto err_out; /* Set up license info based on the info section */ set_license(mod, get_modinfo(info, "license")); @@ -2011,6 +2011,8 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) } return 0; +err_out: + return err; } static int find_module_sections(struct module *mod, struct load_info *info) @@ -2288,12 +2290,12 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) err = module_frob_arch_sections(info->hdr, info->sechdrs, info->secstrings, info->mod); if (err < 0) - return ERR_PTR(err); + goto err_out; err = module_enforce_rwx_sections(info->hdr, info->sechdrs, info->secstrings, info->mod); if (err < 0) - return ERR_PTR(err); + goto err_out; /* We will do a special allocation for per-cpu sections later. */ info->sechdrs[info->index.pcpu].sh_flags &= ~(unsigned long)SHF_ALLOC; @@ -2327,12 +2329,14 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) /* Allocate and move to the final place */ err = move_module(info->mod, info); if (err) - return ERR_PTR(err); + goto err_out; /* Module has been copied to its final place now: return it. */ mod = (void *)info->sechdrs[info->index.mod].sh_addr; kmemleak_load_module(mod, info); return mod; +err_out: + return ERR_PTR(err); } /* mod is no longer valid after this! */ From patchwork Sat Mar 11 05:17:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67983 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134016wrd; Fri, 10 Mar 2023 21:39:37 -0800 (PST) X-Google-Smtp-Source: AK7set9bUHW5x5DjoDA4x8dagxVbHCzsRvrHdSVU/rFuZOhZ3g2h/TgdaiOjmfO3v9M22i92oPXR X-Received: by 2002:a05:6a20:4281:b0:cc:a8d7:ad62 with SMTP id o1-20020a056a20428100b000cca8d7ad62mr34311297pzj.27.1678513177013; Fri, 10 Mar 2023 21:39:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513176; cv=none; d=google.com; s=arc-20160816; b=v7yM8aT1f7uSyHjK1tluFzOHpe2LfLUu+EHUcMNwDmupUdAwio2gBSYA3hSVaHSfza 7+fBf9way/Fo6BKF35W4tuQ7qxRgAo6+nJ6j/o5jsDjtJGw4fb3OY4Ksh/oNdVI91EcP q8aLVYon7Gw8JX6HE6J1YA/KS12mOeKL71Dh7mgsxzAvjPFA9rDKSF9SKx4J7VwILMYP k1Hze96/t/LLeOkfW7X1K1PsToqtw1F7YGw+G4gjcM4+IMaCFvKC86BiIHc/cBkbFBJr li6FgUH/Mclys4KjFWGnNgnNIeckrt29WIwLAm19nG6v+xyNAbeSh18p2/HR7i5229M3 KjIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Qx3kvl1TA4Gbwo8RtYmlV05hbgAF2Z4QTvWxKXzU3KI=; b=dRk9dCOMP6m7XIMXIY1zK5aomaPbeq8caCyXwgSlHvHAt3qFdcSS+Bs+Ye5rVrN/Hd LrqhGgZLLWK9PwUF2S+P9VGGiCqvcO7oVXKaug2uT/EeuhR1hHDOPrcX1+qlCB3YrYxx tOMTuLZTRN0ULtTYIQ4IvHIM3qjnuR8nbLIJpObFInkqOjBsYjlPDig5CAgmcm9eLEfV O05io669RS1tHhIgXjRQsmBhlHOY/w8k81oyxXBVmX8Pxf5j2KxfnAdLVQvW5o4nFQLQ jkl2YKZ2KxJdX3puA/Kis1nxntzK2UgjH9LJ/AIKAGoVyn3ZGzseyj4wRtycLE6AzuL+ QSNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=Lx0vzaE2; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c20-20020a6566d4000000b005074d02bb83si1434797pgw.430.2023.03.10.21.39.24; Fri, 10 Mar 2023 21:39:36 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=Lx0vzaE2; 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 S230045AbjCKFRy (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229817AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78A2E140526; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=Qx3kvl1TA4Gbwo8RtYmlV05hbgAF2Z4QTvWxKXzU3KI=; b=Lx0vzaE2gzcfyPXU87+uHWfN+Y 90v1y+KP0yZoxipqzRWBcWtgoRuSG83wO1BXpUk1NK/kBtsO0laf1BZabvPqgtVOf3RMAPWe2R+3S ihr/nhf+EDH14m4AnAY8ODpFxgmxMi3hl8dYTSTGXXZphiVH3PrFzA3Dc62GK1WCF/goMx6N8cjOX 9qs2v8ReG3OG7mma51jBbkP99UJ+wGadbYmhhv0vkCmpaQ26vjH4w8/IAUi7eR58yADoCIgCwHfrW +66lnZSBe+u3N7fn5MY1wjGUbsuknXjgRa5fpJ/ytxd3lPEePTHhuHwX7xW9T9SDVxkEVFbyV879u 1EeSfW5g==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBMq-37; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 02/12] module: move get_modinfo() helpers all above Date: Fri, 10 Mar 2023 21:17:02 -0800 Message-Id: <20230311051712.4095040-3-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048632838993152?= X-GMAIL-MSGID: =?utf-8?q?1760048632838993152?= Instead of forward declaring routines for get_modinfo() just move everything up. This makes no functional changes. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 100 +++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 52 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 5f1473eb34e0..6d6e6a6184b5 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1016,9 +1016,55 @@ int try_to_force_load(struct module *mod, const char *reason) #endif } -static char *get_modinfo(const struct load_info *info, const char *tag); +/* Parse tag=value strings from .modinfo section */ +static char *next_string(char *string, unsigned long *secsize) +{ + /* Skip non-zero chars */ + while (string[0]) { + string++; + if ((*secsize)-- <= 1) + return NULL; + } + + /* Skip any zero padding. */ + while (!string[0]) { + string++; + if ((*secsize)-- <= 1) + return NULL; + } + return string; +} + static char *get_next_modinfo(const struct load_info *info, const char *tag, - char *prev); + char *prev) +{ + char *p; + unsigned int taglen = strlen(tag); + Elf_Shdr *infosec = &info->sechdrs[info->index.info]; + unsigned long size = infosec->sh_size; + + /* + * get_modinfo() calls made before rewrite_section_headers() + * must use sh_offset, as sh_addr isn't set! + */ + char *modinfo = (char *)info->hdr + infosec->sh_offset; + + if (prev) { + size -= prev - modinfo; + modinfo = next_string(prev, &size); + } + + for (p = modinfo; p; p = next_string(p, &size)) { + if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=') + return p + taglen + 1; + } + return NULL; +} + +static char *get_modinfo(const struct load_info *info, const char *tag) +{ + return get_next_modinfo(info, tag, NULL); +} static int verify_namespace_is_imported(const struct load_info *info, const struct kernel_symbol *sym, @@ -1544,56 +1590,6 @@ static void set_license(struct module *mod, const char *license) } } -/* Parse tag=value strings from .modinfo section */ -static char *next_string(char *string, unsigned long *secsize) -{ - /* Skip non-zero chars */ - while (string[0]) { - string++; - if ((*secsize)-- <= 1) - return NULL; - } - - /* Skip any zero padding. */ - while (!string[0]) { - string++; - if ((*secsize)-- <= 1) - return NULL; - } - return string; -} - -static char *get_next_modinfo(const struct load_info *info, const char *tag, - char *prev) -{ - char *p; - unsigned int taglen = strlen(tag); - Elf_Shdr *infosec = &info->sechdrs[info->index.info]; - unsigned long size = infosec->sh_size; - - /* - * get_modinfo() calls made before rewrite_section_headers() - * must use sh_offset, as sh_addr isn't set! - */ - char *modinfo = (char *)info->hdr + infosec->sh_offset; - - if (prev) { - size -= prev - modinfo; - modinfo = next_string(prev, &size); - } - - for (p = modinfo; p; p = next_string(p, &size)) { - if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=') - return p + taglen + 1; - } - return NULL; -} - -static char *get_modinfo(const struct load_info *info, const char *tag) -{ - return get_next_modinfo(info, tag, NULL); -} - static void setup_modinfo(struct module *mod, struct load_info *info) { struct module_attribute *attr; From patchwork Sat Mar 11 05:17:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67980 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp132313wrd; Fri, 10 Mar 2023 21:32:56 -0800 (PST) X-Google-Smtp-Source: AK7set/L64IlOBb7hdfNR2LvuTmHZeZcRaYkRCpjSlscSWwTOUvLseKToyrMz8TMvc8zjnMhWvF1 X-Received: by 2002:a05:6a20:1609:b0:cc:d44a:bec2 with SMTP id l9-20020a056a20160900b000ccd44abec2mr32861876pzj.1.1678512776049; Fri, 10 Mar 2023 21:32:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678512776; cv=none; d=google.com; s=arc-20160816; b=enE2KnC5fPoCHFvMF6Ea8ZOKeFGLCpvpvphkm+taV9XTae1qx2ih1uhcczRhVYSjYn CVLSkgCWHwajbdbxYcHz5DbT0nBGmbXKuRKdCIHhXFDjm1WwVee45KjndW/90vDv3YHw fneYLBGadAQIkKkdKjOIcdviJwu4ODa2f76XC2uKnNcLJFEINrToTc+Ajwcr9hMGmhaP uA09QtikvPAm6mRzAJr5jXBRcwqm4/hunCxYM3lE2mM6t3U3zdWmFxj8XTMZSSgT75dQ ZCIefOSYLut10bQchYKWS0EZgCkiz4biVo4MfwZeJBqP7A7Zk6/sk+fd3YEms9au4gpD bE/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ulzd+B0GQOyWFcFb7AVNe7XdcgPMcGdt6XRGjoo6VBo=; b=LnDRajlkz0iVipavWdNuR2MBovW3zkmxQ2aP4bunU2MFdy4hYDfIQ+RhPn5YJCjdXp lhRz1NUuDWmuD9cgs4L4mo8tOSid/AcBZglGgtKFcaadVR0IK0ZQcJ6GEzYsm/ByEGjk bGuLZqxjY5/WPaEYWKhkXnJffpUOkJR0asQC4qy7NniU8uk1draHxZHPenw5g17Um6RU LPvoyoxMwu0xdPfTIy+Zbv8sJYX1m2y1AWgU7BtQEX/drbEQnBODji7pIFEYU/3Ts06Q 5bUPBFAZppEdvqUmF6KmdFsENh1EHsb/blmTr0xur+LCrk/6XdBmt/FnDToBhngR2a84 GF8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b="36lENrK/"; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i21-20020aa796f5000000b0058db4725798si1366753pfq.160.2023.03.10.21.32.43; Fri, 10 Mar 2023 21:32:56 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b="36lENrK/"; 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 S230019AbjCKFRm (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229562AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 791E5140530; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=Ulzd+B0GQOyWFcFb7AVNe7XdcgPMcGdt6XRGjoo6VBo=; b=36lENrK/S8KQeyMPt8RDa26cJW e0ZCzwSKXfwQcJX3aQHLJRvNrlkunyHS+BEIj3jLisOjsWQUxn7/RJPW5TkxFAFV/4fBxu6a1KsO+ fl2LpAmwD+Xo2ql/6C4ZDdXVw5b1G+bJgamCh1ARmD1yuyqe8uO/niy3MZYCDJ3MBt8QI8pm+Nl8C QCmj2+IkOSXLYi0dFZSQPEBTvYUe1pTQfFFjXJWEd8397ntsh9LQZwa8INM85ItwblZRIi3APSu4A rTvnkQx7+/EG19UAuFao7c5MxTbXkVYBAivtXjxSV9mgEpq9Tl3S0DgzbGCT0huWAo3Fj+X0I3CnR hXAcAh+g==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBMs-4W; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 03/12] module: rename next_string() to module_next_tag_pair() Date: Fri, 10 Mar 2023 21:17:03 -0800 Message-Id: <20230311051712.4095040-4-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048212470346849?= X-GMAIL-MSGID: =?utf-8?q?1760048212470346849?= This makes it clearer what it is doing. While at it, make it available to other code other than main.c. This will be used in the subsequent patch and make the changes easier to read. Signed-off-by: Luis Chamberlain --- kernel/module/internal.h | 2 ++ kernel/module/main.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/module/internal.h b/kernel/module/internal.h index e3883b7d4840..1fa2328636ec 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -96,6 +96,8 @@ long module_get_offset_and_type(struct module *mod, enum mod_mem_type type, char *module_flags(struct module *mod, char *buf, bool show_state); size_t module_flags_taint(unsigned long taints, char *buf); +char *module_next_tag_pair(char *string, unsigned long *secsize); + static inline void module_assert_mutex_or_preempt(void) { #ifdef CONFIG_LOCKDEP diff --git a/kernel/module/main.c b/kernel/module/main.c index 6d6e6a6184b5..50364707c0cd 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1017,7 +1017,7 @@ int try_to_force_load(struct module *mod, const char *reason) } /* Parse tag=value strings from .modinfo section */ -static char *next_string(char *string, unsigned long *secsize) +char *module_next_tag_pair(char *string, unsigned long *secsize) { /* Skip non-zero chars */ while (string[0]) { @@ -1051,10 +1051,10 @@ static char *get_next_modinfo(const struct load_info *info, const char *tag, if (prev) { size -= prev - modinfo; - modinfo = next_string(prev, &size); + modinfo = module_next_tag_pair(prev, &size); } - for (p = modinfo; p; p = next_string(p, &size)) { + for (p = modinfo; p; p = module_next_tag_pair(p, &size)) { if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=') return p + taglen + 1; } From patchwork Sat Mar 11 05:17:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67984 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134081wrd; Fri, 10 Mar 2023 21:39:50 -0800 (PST) X-Google-Smtp-Source: AK7set+56QwXvlJaJY3qmOJJVMCWH6F9hk9b+QQbMrsfAzqXIuaQBKhpohDeBtC/Yi6vBqZV3OZt X-Received: by 2002:a17:902:d702:b0:19c:dedd:2ace with SMTP id w2-20020a170902d70200b0019cdedd2acemr24531770ply.18.1678513190509; Fri, 10 Mar 2023 21:39:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513190; cv=none; d=google.com; s=arc-20160816; b=oYWyRSadIBK3HZFdZvq7FMVdvx+kGDbtKqwVuku6+MJmh1R+HY1UVuffPJFqfIYjYl yt9eCG3RfuVqN6ApPKUDA6VkBwWXs3/iQGMtoudwgLhpkzIPytKm5jo9AJqlYUg2jQNZ cn+wau3GU7jS/h5+2okdl9dugCm6VPf8cp6dSuF41b+8IFD7qEESnrjdKG8nOQnO+Y4e ZtLfdZeTERTEUEFrYzDev7S1LgAB0QxOihM6H7NbKTN5cl3lBQh6HM2Y9tmwHihiYGXj 2TvLS2vUlwYgz+HwMRvx1NA4gIS/dXkrOEs9hISMIqn82mZDKOSd3S47XcqgtrWmCy46 HnXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tYsj98dWQ7w+RJ5JNa62BDiT7Z3rKk0MlMBfrIGdxVY=; b=cn8ozVLSmq24WwGlQvxfEOwmPZF2SEUrBwr42dw/0vkwf5DC5y4qXxM9oJOuGRHeh7 Us1zl7rPt8bCy7uy3JYq1lrbWCV30J9vaCPXjAY8p5ETyt8v4zTBROgFAznsed/mANh7 qbfk2wVOYPv+o3ujiYruspq/5E06Dt4fHyevp7c2Tg6EOXchTIXw6hJLRt6m+tOruQE5 aRKZX7WM5ANh2p13uOdHBq+Sevg0bsF70Fosbzi40fQlQov3t3w8AKGj+LUPS61OsbI6 /ww5s3PcK2EYYEiJbDeMCoxPwHccAAATVAQJ1DIiFr/+JoPXD0Fu4r+E4iKDUsvZ6t8n Li1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=KjPfOGTg; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w6-20020a170902904600b001893c960ac9si1528194plz.533.2023.03.10.21.39.38; Fri, 10 Mar 2023 21:39:50 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=KjPfOGTg; 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 S230142AbjCKFSE (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46742 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229835AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 790A014052F; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=tYsj98dWQ7w+RJ5JNa62BDiT7Z3rKk0MlMBfrIGdxVY=; b=KjPfOGTgevjwLnMl9fuTdtaJLb ftgYM18+ET3KUP9eosnUMPh+6AtxB8M6zo0mtQYUOT88TQbms+gSscSKreWOtqz2j6++2VRhlDlKM L6dterrWwyq0g4OmKpXS/ERbg2iXBjEBZLDUGyK2BJrFA15ME0/f/WiHaVpT9NxjlPL35lZZUjcOB WfLIA7mrOgtIWsep+L8b7MfiJqIJJU681vZi3vub1yKmvMfkKkMjTpv0+khSTuOGD7gNxiQTD1OCd pY2jxjqUY5rg3EIarrHaWUnvA0USxDTE19qFJeMl9/ksZ23Sa/pgf6H5+HpP1xyMR3biD5rLupr9s c2sKkmHg==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBMu-5p; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 04/12] module: add a for_each_modinfo_entry() Date: Fri, 10 Mar 2023 21:17:04 -0800 Message-Id: <20230311051712.4095040-5-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048647393069468?= X-GMAIL-MSGID: =?utf-8?q?1760048647393069468?= Add a for_each_modinfo_entry() to make it easier to read and use. This produces no functional changes but makes this code easiert to read as we are used to with loops in the kernel and trims more lines of code. Signed-off-by: Luis Chamberlain --- kernel/module/internal.h | 3 +++ kernel/module/main.c | 5 +---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 1fa2328636ec..6ae29bb8836f 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -98,6 +98,9 @@ size_t module_flags_taint(unsigned long taints, char *buf); char *module_next_tag_pair(char *string, unsigned long *secsize); +#define for_each_modinfo_entry(entry, info, name) \ + for (entry = get_modinfo(info, name); entry; entry = get_next_modinfo(info, name, entry)) + static inline void module_assert_mutex_or_preempt(void) { #ifdef CONFIG_LOCKDEP diff --git a/kernel/module/main.c b/kernel/module/main.c index 50364707c0cd..3f7c8634cf06 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1075,12 +1075,9 @@ static int verify_namespace_is_imported(const struct load_info *info, namespace = kernel_symbol_namespace(sym); if (namespace && namespace[0]) { - imported_namespace = get_modinfo(info, "import_ns"); - while (imported_namespace) { + for_each_modinfo_entry(imported_namespace, info, "import_ns") { if (strcmp(namespace, imported_namespace) == 0) return 0; - imported_namespace = get_next_modinfo( - info, "import_ns", imported_namespace); } #ifdef CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS pr_warn( From patchwork Sat Mar 11 05:17:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67981 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp132679wrd; Fri, 10 Mar 2023 21:34:17 -0800 (PST) X-Google-Smtp-Source: AK7set9PfIfcsieE404lPIrnuQPRvHTrOWULcwaYQz1chVpVA0i3h7TG2kRBKdtvQkhPWSCdcA2a X-Received: by 2002:a05:6a20:431f:b0:cc:9245:796f with SMTP id h31-20020a056a20431f00b000cc9245796fmr4410827pzk.14.1678512856995; Fri, 10 Mar 2023 21:34:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678512856; cv=none; d=google.com; s=arc-20160816; b=j3BCoBDVxQV7pObuILx8HY9xuWCA9sI1c8/B8cZFjSwkAfYBflztIcsQMclb1DgFyf 65HHHS6AtfvbH/vGhtN4MhGUtACHox1FxzHeaN3ebotSj9U32tCoqZ3LhupDYt0RTyMG 6nXASdbyzWfDK96C9j6wAOshn+diaP5rJU+eic4TfV/NB6RjSBzJRgrvpHdKJ9Bvlhin dQEKKcSBzHhWeCw/QDQPregzU4lOPea7/Pqgx246d4Cq2MwyFJsByQBSfyItfOlHN24i JTaAIDSSnMXb5G6+AQhbxQVcgYiVsq52CUoYEvx2rYnD/XLvf8lQpcGPbKx5R7wU6jYf KSrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ZY//fx8IeJdbSxcbOUOAnU2iye6f3fGZL3terh5yTNM=; b=TgMTr/HuXCQNm2GwwXlzpyLl+fEcWhR8aZE9CESiF6JfgQVwNp8KeGNj5iINiCXFwP vGsWntcBkNXxco905VWbevOesGzUzEMVXZ2Es0NBuz9njStSipJsCHm0Vq2qo1Nbza41 TQQcfw4BHGJ2bZSwyT+wLiQg070f+R/rj7GOWy4tosLIUe53zaiqDOMODe51eKrPspMu y8zyyZlr6RTyxjLwrfe9HxIbPsm0lWm+K/wfAvSm4XtaSCA9FXtQzD3gcNbyFjq057zX BNfXCvCxoZ7IYBA3RvXLEbSBSsdpFVnjtOGw8pFeUsuu37GYRM/GCzRvD2ax72jgx163 RmBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=kQ0AiR8R; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c20-20020a6566d4000000b005074d02bb83si1434797pgw.430.2023.03.10.21.34.04; Fri, 10 Mar 2023 21:34:16 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=kQ0AiR8R; 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 S230110AbjCKFSb (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229956AbjCKFRe (ORCPT ); Sat, 11 Mar 2023 00:17:34 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0CA72140504; Fri, 10 Mar 2023 21:17:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=ZY//fx8IeJdbSxcbOUOAnU2iye6f3fGZL3terh5yTNM=; b=kQ0AiR8Rpv7J2YhZneYg7LT6AC Q6NR6JU6hUmVKCsYc7b9PwJsrGYO9wnUBolBzYLbcVwXqXD/zOK58BudkyytWw1anwsYJTXnXpHRw 36xom8gyxgnuHkZcvYIjT9+CqSVM17zeT/OGov9K+6IIhdCDg6g/nWwoiuC2qzoZ27oBNddkDtgHh Y6gztygIaSBYd+50ligy7bN0eiaj30VPO+7Z7IGRRJA/nFsdZbnJQEwBCs+BgVYR+Ga0CE9qNJzFE mkb8RXBq/I/FpZ0rUW5owMarB7kPG6rmnl2vlV/w5IORVpu4uVLCe98ZeQp6JOgU2wOQU9K03YNqc awL0iiig==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBMy-7A; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 05/12] module: add debugging alias parsing support Date: Fri, 10 Mar 2023 21:17:05 -0800 Message-Id: <20230311051712.4095040-6-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048297377542256?= X-GMAIL-MSGID: =?utf-8?q?1760048297377542256?= We don't have in-kernel alias parsing support as aliases are all dealt with in userspace. There has simply been no need to have support for processing them in kernel. We have done this under the assumption that userspace just Does The Right Thing (TM) about aliases and loading modules and that there is no real gain of processing aliases in-kernel. Obviously userspace can be buggy though, and it can lie to us. We currently have no easy way to determine this. Parsing aliases is an example debugging facility we can use to help with these sorts of problems. But there are some possible optimizations that may also be possible and enabling support let's folks experiment with these posibilities. We disable this by default but folks can also enable this to experiment with features which may use aliases in-kernel. Folks should not enable this on production kernels. It'll bloat your loaded kernel modules a tiny bit by the size of the aliases that exist for them once loaded. You can debug aliase by adding to your dynamic debug: GRUB_CMDLINE_LINUX_DEFAULT="dyndbg=\"func module_process_aliases +p;\" " Upon boot for example here a few entries: module ext4 num_aliases: 5 alias[0] = fs-ext4 alias[1] = ext3 alias[2] = fs-ext3 alias[3] = ext2 alias[4] = fs-ext2 module xfs num_aliases: 1 alias[0] = fs-xfs module floppy num_aliases: 3 alias[0] = block-major-2-* alias[1] = acpi*:PNP0700:* alias[2] = pnp:dPNP0700* module ata_piix num_aliases: 89 alias[0] = pci:v00008086d00008C81sv*sd*bc*sc*i* alias[1] = pci:v00008086d00008C80sv*sd*bc*sc*i* alias[2] = pci:v00008086d00008C89sv*sd*bc*sc*i* alias[3] = pci:v00008086d00008C88sv*sd*bc*sc*i* ... etc ... Suggested-by: Linus Torvalds Signed-off-by: Luis Chamberlain --- include/linux/module.h | 4 ++ kernel/module/Kconfig | 19 +++++++++ kernel/module/Makefile | 1 + kernel/module/aliases.c | 92 ++++++++++++++++++++++++++++++++++++++++ kernel/module/internal.h | 15 +++++++ kernel/module/main.c | 17 ++++++-- 6 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 kernel/module/aliases.c diff --git a/include/linux/module.h b/include/linux/module.h index c3b357196470..aed1b43edb55 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -420,6 +420,10 @@ struct module { const char *srcversion; struct kobject *holders_dir; +#ifdef CONFIG_MODULE_KERNEL_ALIAS + unsigned int num_aliases; + const char **aliases; +#endif /* Exported symbols */ const struct kernel_symbol *syms; const s32 *crcs; diff --git a/kernel/module/Kconfig b/kernel/module/Kconfig index 424b3bc58f3f..e4ba335fa279 100644 --- a/kernel/module/Kconfig +++ b/kernel/module/Kconfig @@ -22,6 +22,25 @@ menuconfig MODULES if MODULES +config MODULE_DEBUG + bool "Enable debugging information for modules" + default n + help + Enables debugging of the module infrastructure. Say no unless you + are debugging the module framework. Don't enable this on production. + This is only for experimentation and debugging. + +config MODULE_KERNEL_ALIAS + bool "Enable in-kernel alias processing for modules" + default n + depends on MODULE_DEBUG + help + The kernel has historically not processed aliases in-kernel since + we expect userspace can do all the proper work for us. Enable this + if you want to experiment processing aliases in-kernel. This will + bloat your kernel modules's memory by the number of aliases each + module has once loaded into the kernel. + config MODULE_FORCE_LOAD bool "Forced module loading" default n diff --git a/kernel/module/Makefile b/kernel/module/Makefile index 948efea81e85..34f0db0a016b 100644 --- a/kernel/module/Makefile +++ b/kernel/module/Makefile @@ -19,3 +19,4 @@ obj-$(CONFIG_SYSFS) += sysfs.o obj-$(CONFIG_KGDB_KDB) += kdb.o obj-$(CONFIG_MODVERSIONS) += version.o obj-$(CONFIG_MODULE_UNLOAD_TAINT_TRACKING) += tracking.o +obj-$(CONFIG_MODULE_KERNEL_ALIAS) += aliases.o diff --git a/kernel/module/aliases.c b/kernel/module/aliases.c new file mode 100644 index 000000000000..2f30c9d4c765 --- /dev/null +++ b/kernel/module/aliases.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Optional module in-kernel alias processing support. + * + * Copyright (C) 2023 Luis Chamberlain + */ + +#include +#include "internal.h" + +void free_mod_aliases(struct module *mod) +{ + unsigned int i; + + if (!mod->num_aliases) + return; + + for (i=0; i < mod->num_aliases; i++) { + kfree(mod->aliases[i]); + mod->aliases[i] = NULL; + } + + kfree(mod->aliases); + mod->aliases = NULL; +} + +static int get_modinfo_tags(struct load_info *info, + const char *tag, + unsigned int *num_entries) +{ + char *p; + unsigned int taglen = strlen(tag); + Elf_Shdr *infosec = &info->sechdrs[info->index.info]; + unsigned long size = infosec->sh_size; + const char *value; + unsigned int len, tags_size = 0; + + for (p = (char *)infosec->sh_addr; p; p = module_next_tag_pair(p, &size)) { + if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=') { + value = p + taglen + 1; + len = strlen(value); + if (len >=0 && len <= PAGE_SIZE) { + (*num_entries)++; + tags_size+=len; + } + } + } + + return tags_size; +} + +int module_process_aliases(struct module *mod, struct load_info *info) +{ + unsigned int size, i = 0, num_entries = 0; + char *alias; + + size = get_modinfo_tags(info, "alias", &num_entries); + if (WARN_ON(!size)) + return 0; + + mod->aliases = kzalloc(num_entries * sizeof(char *), GFP_KERNEL); + if (!mod->aliases) + return -ENOMEM; + + pr_debug("module %s num_aliases: %u\n", mod->name, num_entries); + + for_each_modinfo_entry(alias, info, "alias") { + pr_debug("alias[%u] = %s\n", i, alias); + mod->aliases[i] = kasprintf(GFP_KERNEL, "%s", alias); + if (!mod->aliases[i]) + goto err_free; + i++; + } + + WARN_ON(i != num_entries); + + mod->num_aliases = num_entries; + + return 0; + +err_free: + while (i!=0) { + i--; + kfree(mod->aliases[i]); + mod->aliases[i] = NULL; + } + + kfree(mod->aliases); + mod->aliases = NULL; + + return -ENOMEM; +} diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 6ae29bb8836f..40bb80ed21e2 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -96,6 +96,8 @@ long module_get_offset_and_type(struct module *mod, enum mod_mem_type type, char *module_flags(struct module *mod, char *buf, bool show_state); size_t module_flags_taint(unsigned long taints, char *buf); +char *get_modinfo(const struct load_info *info, const char *tag); +char *get_next_modinfo(const struct load_info *info, const char *tag, char *prev); char *module_next_tag_pair(char *string, unsigned long *secsize); #define for_each_modinfo_entry(entry, info, name) \ @@ -300,3 +302,16 @@ static inline int same_magic(const char *amagic, const char *bmagic, bool has_cr return strcmp(amagic, bmagic) == 0; } #endif /* CONFIG_MODVERSIONS */ + +#ifdef CONFIG_MODULE_KERNEL_ALIAS +void free_mod_aliases(struct module *mod); +int module_process_aliases(struct module *mod, struct load_info *info); +#else +static void free_mod_aliases(struct module *mod) +{ +} +static int module_process_aliases(struct module *mod, struct load_info *info) +{ + return 0; +} +#endif /* CONFIG_MODULE_KERNEL_ALIAS */ diff --git a/kernel/module/main.c b/kernel/module/main.c index 3f7c8634cf06..16770942f33a 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2,6 +2,7 @@ /* * Copyright (C) 2002 Richard Henderson * Copyright (C) 2001 Rusty Russell, 2002, 2010 Rusty Russell IBM. + * Copyright (C) 2023 Luis Chamberlain */ #define INCLUDE_VERMAGIC @@ -1035,8 +1036,7 @@ char *module_next_tag_pair(char *string, unsigned long *secsize) return string; } -static char *get_next_modinfo(const struct load_info *info, const char *tag, - char *prev) +char *get_next_modinfo(const struct load_info *info, const char *tag, char *prev) { char *p; unsigned int taglen = strlen(tag); @@ -1061,7 +1061,7 @@ static char *get_next_modinfo(const struct load_info *info, const char *tag, return NULL; } -static char *get_modinfo(const struct load_info *info, const char *tag) +char *get_modinfo(const struct load_info *info, const char *tag) { return get_next_modinfo(info, tag, NULL); } @@ -1289,6 +1289,7 @@ static void free_module(struct module *mod) module_arch_freeing_init(mod); kfree(mod->args); percpu_modfree(mod); + free_mod_aliases(mod); free_mod_mem(mod); } @@ -1989,6 +1990,12 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) "is unknown, you have been warned.\n", mod->name); } + if (get_modinfo(info, "alias")) { + err = module_process_aliases(mod, info); + if (err) + goto err_out_skip_alloc; + } + err = check_modinfo_livepatch(mod, info); if (err) goto err_out; @@ -2005,6 +2012,8 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) return 0; err_out: + free_mod_aliases(mod); +err_out_skip_alloc: return err; } @@ -2329,6 +2338,7 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) kmemleak_load_module(mod, info); return mod; err_out: + free_mod_aliases(mod); return ERR_PTR(err); } @@ -2890,6 +2900,7 @@ static int load_module(struct load_info *info, const char __user *uargs, synchronize_rcu(); mutex_unlock(&module_mutex); free_module: + free_mod_aliases(mod); /* Free lock-classes; relies on the preceding sync_rcu() */ for_class_mod_mem_type(type, core_data) { lockdep_free_key_range(mod->mem[type].base, From patchwork Sat Mar 11 05:17:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67986 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134304wrd; Fri, 10 Mar 2023 21:40:36 -0800 (PST) X-Google-Smtp-Source: AK7set8JIy6eHa2SRovhNVrPMlz4nt5ZnJQX/ui8+o/zsEHQL3vgKEjSDYex/W5cEQeZ0MyNO2Gy X-Received: by 2002:a05:6a20:734f:b0:cd:26b2:ee17 with SMTP id v15-20020a056a20734f00b000cd26b2ee17mr31733669pzc.36.1678513235847; Fri, 10 Mar 2023 21:40:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513235; cv=none; d=google.com; s=arc-20160816; b=lF4vXbwEEIitcLngRnBXsIfV4u2bMvQg2XcNrovLC2eCeOAOHoyk3Sj8nlcH/jajAR tJW13CdaHIDTUYIwWsfnIYTXMFGQJ7v5I09FfA6D8CwFfq4umNkExoVZw9b5uXKH+RmZ IJI1MihTzlbzv39LPJPQakDPj+u6sKpo8fWP5ih82vxmg7Z9tjFKDLBGaxs45XJUZlS6 fhLwV5tsqkogmDbIifK/QwASwSQODTcsuW3Tm/5T+ix00LJjaalvDw2N+PxAkw4zj91h 5qDFzj+d/yF2gYZTXDTa4Lt3oH6TVY49Z0GoY0JjDIbKLc7IXqQ6MSeIrOAemUE460ek SQRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8q3uBRgYTBxQf0UmjMKtoxjIBw/L6feX+juCAJ35hgI=; b=kI9V4Eeps8Gz1qSBHN2E9rT+DHd22+5cWWZa5zRz5qjs/niRUt+nAjXoCAkcntvVVf 2yxByo+ybQ9BUR1R1shVKcfc0clrITcwJeO/BjUicF3DDaKu63gxmDlsgczjOofKkkJv UophXnXBRdTIIFTsRrxlivifwY1LJKLm4XgiY36XxP1LVx9M6D6jfsPTceupGBRXGyEX E3AnKeYpp+NhKZtT4zPlcy4LRbF2EUSljTBV8ZlzDjU3MjCx13L8RhVEDxmzoWcMUzdA xefekGF21UihKymI/XpIUTHfoQ1GDp62Hp6yVKcUKFmCidLBsVvBJPv8HaOri7EAtG2y ejJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=Oyl71dYJ; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n127-20020a632785000000b004fc235bd318si1512791pgn.669.2023.03.10.21.40.22; Fri, 10 Mar 2023 21:40:35 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=Oyl71dYJ; 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 S230096AbjCKFST (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46750 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229924AbjCKFRd (ORCPT ); Sat, 11 Mar 2023 00:17:33 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78B9914052B; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=8q3uBRgYTBxQf0UmjMKtoxjIBw/L6feX+juCAJ35hgI=; b=Oyl71dYJ9qFUi+q5p2VcJul0tM ZBRmlGLKJ9mymmLjGW0bRvUMzDGuBPGDHYlWhQ4hltD+UY91QtkhPBSb27F3nWCgDHgir99wU6EVa omTLv4RMHJT64CTjVKUVPwcXuxi/dLXuBK48JXPFoWtVbA93wXRcwc0XEDQg5mD0fK/ZkVfzgdxK3 Ay1098NxnT9gK5Ts644ycAPgJosGfyWxUe9Ujcg9cDKWvZ/kx3AfyUsXjdYbmJ6wz9bms39qWravQ We7GU1A12qC/VgpXNhXViIkK6PIikLijeOmWN4w9/1eLThfvnNBiT7NCI7Nxz8y7SYY4nzjQGJcNr P1B/4h5g==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBN0-93; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 06/12] module: move early sanity checks into a helper Date: Fri, 10 Mar 2023 21:17:06 -0800 Message-Id: <20230311051712.4095040-7-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048694546809685?= X-GMAIL-MSGID: =?utf-8?q?1760048694546809685?= Move early sanity checkers for the module into a helper. This let's us make it clear when we are working with the local copy of the module prior to allocation. This produces no functional changes, it just makes subsequent changes easier to read. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 16770942f33a..32c92fb69c05 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2682,6 +2682,31 @@ static int unknown_module_param_cb(char *param, char *val, const char *modname, return 0; } +/* Module within temporary copy, this doesn't do any allocation */ +static int early_mod_check(struct load_info *info, int flags) +{ + int err; + + /* + * Now that we know we have the correct module name, check + * if it's blacklisted. + */ + if (blacklisted(info->name)) { + pr_err("Module %s is blacklisted\n", info->name); + return -EPERM; + } + + err = rewrite_section_headers(info, flags); + if (err) + return err; + + /* Check module struct version now, before we try to use module. */ + if (!check_modstruct_version(info, info->mod)) + return ENOEXEC; + + return 0; +} + /* * Allocate and load the module: note that size of section 0 is always * zero, and we rely on this for optional sections. @@ -2725,26 +2750,10 @@ static int load_module(struct load_info *info, const char __user *uargs, if (err) goto free_copy; - /* - * Now that we know we have the correct module name, check - * if it's blacklisted. - */ - if (blacklisted(info->name)) { - err = -EPERM; - pr_err("Module %s is blacklisted\n", info->name); - goto free_copy; - } - - err = rewrite_section_headers(info, flags); + err = early_mod_check(info, flags); if (err) goto free_copy; - /* Check module struct version now, before we try to use module. */ - if (!check_modstruct_version(info, info->mod)) { - err = -ENOEXEC; - goto free_copy; - } - /* Figure out module layout, and allocate all the memory. */ mod = layout_and_allocate(info, flags); if (IS_ERR(mod)) { From patchwork Sat Mar 11 05:17:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67985 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134083wrd; Fri, 10 Mar 2023 21:39:51 -0800 (PST) X-Google-Smtp-Source: AK7set8H9DAX6pr/SVYHMtd62U1hPOzXYML2dydxfYz4Rr7fDjlcZSuNoEzD3L0ESRBuuZsWuj7E X-Received: by 2002:a17:902:d2c5:b0:19e:6969:b142 with SMTP id n5-20020a170902d2c500b0019e6969b142mr9129778plc.3.1678513190992; Fri, 10 Mar 2023 21:39:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513190; cv=none; d=google.com; s=arc-20160816; b=Hx3aQ3dv907pD8dfcO7O6YB/sQ/usfpq7T7YI66Ztxjv2wtmh/xvhSEmbCtrlZIS/N FQYDZLYHN4SWBrFC9xkoY5pycsRVVfJg/noq9Sa0T/x9t5CQppCKRKO7PvTF6Koq+ljP RVev6xwT1bd9ODCNdzxSPNySpduN0Tb+MDT/KNaZ378QGbO0ggHiiacsDFEiPxkkI6zN thYFAIGbUpy4j0ycrDMBjtNzk3M6Ze8SRoET+xP8mPKQIQQn6RlfEMuVPHuMwqMYHa/z WFxxScW83BVPT80cjehWclXQKevb0ip2dQOXIohyav5SrOb4e/g3EORlWGHDIPHaDajm KR6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=qzqBEKCC2vC00pN2R7hc5pPU3nToqryyRx5JQLW/z9M=; b=cNa8OVzSPLhi3oah1+M+85pjPXHj8cxihmfNt36YiXPOrnmvYgGDbtayX/4Uw6D1Eu /3dZBRrnEwi919y6hmxy7STF/9aKzxarwalH1Vm+tPCKI6THhJuBd+DsJSrIjFV7q9T0 UWK57tOS2HXJyT3Lr3wirSdthRu0Uov25cOX4WyZQixBWhTBxqbhHT1lzexXUnoX1l8x Ow0UiFq6mC79lIlCCKg0Hf8OzmPKSdFo7sXVtuslNyUYnIwDtMP7lrBYXMAcW2iKPEs1 /NIYeZlIrYt+Ph/sfl3woUiJ7F/0Zm5061q+K3x47HJvDDf2/uLgTWFLH3Tx1Ff8R/pj fTug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=TEsvSmfS; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q19-20020a170902bd9300b0019a6d34a6c6si1483297pls.624.2023.03.10.21.39.38; Fri, 10 Mar 2023 21:39:50 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=TEsvSmfS; 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 S229989AbjCKFRi (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229685AbjCKFRb (ORCPT ); Sat, 11 Mar 2023 00:17:31 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7776A14050A; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=qzqBEKCC2vC00pN2R7hc5pPU3nToqryyRx5JQLW/z9M=; b=TEsvSmfSDwpaf+lGKHbExgRkTY RaHoiv1xaoskdj4IYejWfTgE11m/GKkwy0mCL3C/iim1GxE7OHZfJbdGACeRKMTkBEF1ZQjf4ghVI BXdJ+uQp3ez6TA8qFVJf6LAts/cEkpfQK4LSLYn0Q+fqX0udUrWRZolJ2wtqDf/YPUVFAINZcjPMa lSagEX7ap2lUAKGMLSq9bMBtYjo3ecSjlRcnwqLZDxWFq8HgpjcIP2SIBsC4m5lNVqpOdB2a8xyad mGzUpQLZ/awK8V3YUlAH4MrmXxxqVpl+EHQher4RL+RFEFuQ4sLN68G+qdPlKYzu6AK+az2Mq8icF NQl4r/Sw==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBN2-AK; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 07/12] module: move check_modinfo() early to early_mod_check() Date: Fri, 10 Mar 2023 21:17:07 -0800 Message-Id: <20230311051712.4095040-8-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048648031459813?= X-GMAIL-MSGID: =?utf-8?q?1760048648031459813?= This moves check_modinfo() to early_mod_check(). This doesn't make any functional changes either, as check_modinfo() was the first call on layout_and_allocate(), so we're just moving it back one routine and at the end. This let's us keep separate the checkers from the allocater. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 32c92fb69c05..e9c7eb827f0d 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2284,10 +2284,6 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) unsigned int ndx; int err; - err = check_modinfo(info->mod, info, flags); - if (err) - return ERR_PTR(err); - /* Allow arches to frob section contents and sizes. */ err = module_frob_arch_sections(info->hdr, info->sechdrs, info->secstrings, info->mod); @@ -2702,7 +2698,11 @@ static int early_mod_check(struct load_info *info, int flags) /* Check module struct version now, before we try to use module. */ if (!check_modstruct_version(info, info->mod)) - return ENOEXEC; + return -ENOEXEC; + + err = check_modinfo(info->mod, info, flags); + if (err) + return err; return 0; } From patchwork Sat Mar 11 05:17:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67982 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp133870wrd; Fri, 10 Mar 2023 21:39:01 -0800 (PST) X-Google-Smtp-Source: AK7set8LZFwrnoZfmWnAm0c5X+OWyhFUtbHJUKjRdrE78qCXbp9ZLVC4Tr7ppF3mMIuKO9ysRujS X-Received: by 2002:a62:6143:0:b0:5a8:bbac:1cf2 with SMTP id v64-20020a626143000000b005a8bbac1cf2mr23094001pfb.1.1678513140796; Fri, 10 Mar 2023 21:39:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513140; cv=none; d=google.com; s=arc-20160816; b=N+EZUFk9K5ZaddtOCzMr9QtG7kSwMC61hzgD1Rm/BWZ+kmMTPB8WemkspHaAB65SC0 70zLkwpwr2hXdhb3ukiFxofZN6lPC9kkiBHtZI2deY71np8ksHzFJKeq+aJxJENXBCj3 jjcEj279ZS4x3O7R1X9nU8TBS/AI6Xe1GXRw0jZQ+hpOfa7sagof5KBnONKi5h5a2M+v 9TD0y7tIzIBr4q8pwyZ1Ana7cZqcBb0cVfwTZ0loXvscIF27jbD3gMDa0CCE0YFcOswX UzyoACofv/dcz7f87YV3Ghdtd/03SmJrFknYfen5LEquli0bf8KjawCjHve+Y5YzCtna 09+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0Kfz9ManWhljt3gWTtQeON0UUzOKjwUIYWv5h32VpPw=; b=ZAMz/qeDBEHhpyU73G1/QOIyM7nWmUr5ecQjud+TSAYArVcjFBTcAUL2s3AgZ4nsvf 8CuXsDHIVGED4Owbzqx23Wbat1lcMfL/O7W68z315bsOWbaKQalPap/SIDxn8wJnESmy 2bd2AwEt+8otw6C8QvmLXtLhN00ZrIKt4ATA9JQRv+s4jQbSMsHDK1hapzDdubEk9xXF v6EpteTaoiWeD3gL/qxo5quOKH8WzLVvicHVopsSZaOrUWtOCYONemVbPOzGcY1mdfpQ FGVOQ6D6dheOMPW4RLVZqe8E6qqBU3vNo6BZvn4ZJ6cvviFLfEY4Qa0ZQENmmhPEAtEG MI/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b="MnN1/ZLH"; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c20-20020a6566d4000000b005074d02bb83si1434797pgw.430.2023.03.10.21.38.46; Fri, 10 Mar 2023 21:39:00 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b="MnN1/ZLH"; 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 S230063AbjCKFRu (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229754AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78806140518; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=0Kfz9ManWhljt3gWTtQeON0UUzOKjwUIYWv5h32VpPw=; b=MnN1/ZLHgS6/DusPEn8slWDfHS 2uYR5J1cw9XFTdAxvBmp0T5H3IjRvJslb+CP2mKFbo4Jx6ze3QIy9GK6ejC+7gm+vr6Rwl4BA/IF/ CTjsgTvrAnLnbGCRzKyc55zFZBahioLHJTb/YTef1kDF/JVtOpMFjx4uROYEG8atCZn6TnzhFzWjD G1tzhbd1LDFijal17jC4m7Sg67t48rBywMqQ1jREijt4+mGhqmXEvbw7gIYFxzDYKk2gxMspbqVyV GNN8wTC/YOp+zEc5RWU2NOAfs2TdO3hT7vBt0jWaBKenj7UII01CdlQ+2ZNZowVyyiEEVP5WuXKbs yAAe/NIw==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBN4-Bs; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 08/12] module: move finished_loading() Date: Fri, 10 Mar 2023 21:17:08 -0800 Message-Id: <20230311051712.4095040-9-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048595265967104?= X-GMAIL-MSGID: =?utf-8?q?1760048595265967104?= This has no functional change, just moves a routine earlier as we'll make use of it next. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index e9c7eb827f0d..c3e5076c0436 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2370,27 +2370,6 @@ static int post_relocation(struct module *mod, const struct load_info *info) return module_finalize(info->hdr, info->sechdrs, mod); } -/* Is this module of this name done loading? No locks held. */ -static bool finished_loading(const char *name) -{ - struct module *mod; - bool ret; - - /* - * The module_mutex should not be a heavily contended lock; - * if we get the occasional sleep here, we'll go an extra iteration - * in the wait_event_interruptible(), which is harmless. - */ - sched_annotate_sleep(); - mutex_lock(&module_mutex); - mod = find_module_all(name, strlen(name), true); - ret = !mod || mod->state == MODULE_STATE_LIVE - || mod->state == MODULE_STATE_GOING; - mutex_unlock(&module_mutex); - - return ret; -} - /* Call module constructors. */ static void do_mod_ctors(struct module *mod) { @@ -2554,6 +2533,27 @@ static int may_init_module(void) return 0; } +/* Is this module of this name done loading? No locks held. */ +static bool finished_loading(const char *name) +{ + struct module *mod; + bool ret; + + /* + * The module_mutex should not be a heavily contended lock; + * if we get the occasional sleep here, we'll go an extra iteration + * in the wait_event_interruptible(), which is harmless. + */ + sched_annotate_sleep(); + mutex_lock(&module_mutex); + mod = find_module_all(name, strlen(name), true); + ret = !mod || mod->state == MODULE_STATE_LIVE + || mod->state == MODULE_STATE_GOING; + mutex_unlock(&module_mutex); + + return ret; +} + /* * We try to place it in the list now to make sure it's unique before * we dedicate too many resources. In particular, temporary percpu From patchwork Sat Mar 11 05:17:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67988 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134318wrd; Fri, 10 Mar 2023 21:40:39 -0800 (PST) X-Google-Smtp-Source: AK7set8tBrrvXrGAIjZxruSSd6PoVh9/dSKyuDw02alArk0hAXiOBksxo1CR4dSJvKnPqanxNo9m X-Received: by 2002:a62:644:0:b0:5a8:515a:eba4 with SMTP id 65-20020a620644000000b005a8515aeba4mr20488453pfg.10.1678513239080; Fri, 10 Mar 2023 21:40:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513239; cv=none; d=google.com; s=arc-20160816; b=Mu39YiaL/3MDrbTvnBazHYJV3416cLOtzKZ/mpV4Fk4ZpdF3BE47OVqHA+3VXYVkO/ V4gn3eDkkNlsoa9geaTujDKZVZSwR01HqVPT2egXsMPilGZHVHGkhIFd87/dk993uTgE SgCLqTDSUQbfbpMk8f/7oQF+mAAOPccuNcpHXdWzjpauUBmJRzL5t5aIdGF8PbTyz0ed nKwAEEbsYY47teOYo15VkxaaKEQogXL0H5DcXeTw11NYSUo+rpXXoUbfllLFosSycWRG BVTuQH8yDYo8hVH568AB1LrU245pFa1kdEGi8zgrsp2tGAtULARzrA7E/VUVQLqDslYM Iulw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WsfRRtm6UalI9L41GZ3NbpGQ5o56fXzEWOq/MZtycqM=; b=qfQMNgtMvaYxnK+OzKLdaz3TplzuX1bSV8vQi5586ukU45C6axDctj7LvGBRPPvetR G5Yjcsl3/7p1OGCCGqJOCy+C94fjpG3tRLq+jGlbc2yp5dJtvb80znb6Z/ZvDN9K+ZL9 8KVfrcpW/+RG6H/cmi/kG0dxPnuxMANc+rLTVkakJbJmQ76ifw5YsIdKu6pFalYn87AA mzXVCiEsIJ52LFtJqbEiqwv+Yfx029oXIHxlP82YyZROtm9WceE6+Myo6pSdv+SJuoyW BbTbic5b3L8r7TcNZC+1ayoXtjmQ2dP3OjiPU7dm4WVM2RH6T1SfVqbf26xTU4WwNdBg RNyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=TYZmpPog; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s187-20020a632cc4000000b004e48198c1b0si1456635pgs.654.2023.03.10.21.40.27; Fri, 10 Mar 2023 21:40:39 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=TYZmpPog; 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 S230112AbjCKFR6 (ORCPT + 99 others); Sat, 11 Mar 2023 00:17:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229768AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7841714050D; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=WsfRRtm6UalI9L41GZ3NbpGQ5o56fXzEWOq/MZtycqM=; b=TYZmpPogBKWjK0SvC5ljLiPSLg avytpGS9084TZtpFLSKLx6XDeAES3WmNrEQY+rsGV06rM43+H1p5XC/W+K+nRI9lbPWL00Qx3G8Pe oDDjmDFBO8KWYJGQJf976ZCM4Cskip1Q6xIEO7mY1wKndTC1c27BQMBHXewTUJYnhHWISm1HOcrM7 c/ULk9O6absN+9pj6GHXjw6bGZSYna0sqnj2Hl+XQHYy3ydHZPSchsgJ+GfewDpdsHHIvg84hcHhX MR5SxEegoEK/qnkVUJlvy1HigaYMynjguVQWf28GX7JIjz6ObqcF+oj4JL7c+/xv6gszjcuOHpLVY dcardj8A==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBN9-Dj; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 09/12] module: extract patient module check into helper Date: Fri, 10 Mar 2023 21:17:09 -0800 Message-Id: <20230311051712.4095040-10-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048698287376691?= X-GMAIL-MSGID: =?utf-8?q?1760048698287376691?= The patient module check inside add_unformed_module() is large enough as we need it. It is a bit hard to read too, so just move it to a helper and do the inverse checks first to help shift the code and make it easier to read. The new helper then is module_patient_check_exists(). Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 71 +++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index c3e5076c0436..e24323e2c499 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2554,6 +2554,43 @@ static bool finished_loading(const char *name) return ret; } +/* Must be called with module_mutex held */ +static int module_patient_check_exists(const char *name) +{ + struct module *old; + int err = 0; + + old = find_module_all(name, strlen(name), true); + if (old == NULL) + return 0; + + if (old->state == MODULE_STATE_COMING + || old->state == MODULE_STATE_UNFORMED) { + /* Wait in case it fails to load. */ + mutex_unlock(&module_mutex); + err = wait_event_interruptible(module_wq, + finished_loading(name)); + if (err) + return err; + + /* The module might have gone in the meantime. */ + mutex_lock(&module_mutex); + old = find_module_all(name, strlen(name), true); + } + + /* + * We are here only when the same module was being loaded. Do + * not try to load it again right now. It prevents long delays + * caused by serialized module load failures. It might happen + * when more devices of the same type trigger load of + * a particular module. + */ + if (old && old->state == MODULE_STATE_LIVE) + return -EEXIST; + else + return -EBUSY; +} + /* * We try to place it in the list now to make sure it's unique before * we dedicate too many resources. In particular, temporary percpu @@ -2562,41 +2599,14 @@ static bool finished_loading(const char *name) static int add_unformed_module(struct module *mod) { int err; - struct module *old; mod->state = MODULE_STATE_UNFORMED; mutex_lock(&module_mutex); - old = find_module_all(mod->name, strlen(mod->name), true); - if (old != NULL) { - if (old->state == MODULE_STATE_COMING - || old->state == MODULE_STATE_UNFORMED) { - /* Wait in case it fails to load. */ - mutex_unlock(&module_mutex); - err = wait_event_interruptible(module_wq, - finished_loading(mod->name)); - if (err) - goto out_unlocked; - - /* The module might have gone in the meantime. */ - mutex_lock(&module_mutex); - old = find_module_all(mod->name, strlen(mod->name), - true); - } - - /* - * We are here only when the same module was being loaded. Do - * not try to load it again right now. It prevents long delays - * caused by serialized module load failures. It might happen - * when more devices of the same type trigger load of - * a particular module. - */ - if (old && old->state == MODULE_STATE_LIVE) - err = -EEXIST; - else - err = -EBUSY; + err = module_patient_check_exists(mod->name); + if (err) goto out; - } + mod_update_bounds(mod); list_add_rcu(&mod->list, &modules); mod_tree_insert(mod); @@ -2604,7 +2614,6 @@ static int add_unformed_module(struct module *mod) out: mutex_unlock(&module_mutex); -out_unlocked: return err; } From patchwork Sat Mar 11 05:17:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67979 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp132038wrd; Fri, 10 Mar 2023 21:31:55 -0800 (PST) X-Google-Smtp-Source: AK7set9c7jy5MTDsdAJC8A3guGMjaq+rCSPV3jze4O3/iFH0E09SHRmPkjf33/8qOfw2o8D/jvsb X-Received: by 2002:a17:90b:180c:b0:237:9f75:694d with SMTP id lw12-20020a17090b180c00b002379f75694dmr29120732pjb.18.1678512715038; Fri, 10 Mar 2023 21:31:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678512715; cv=none; d=google.com; s=arc-20160816; b=BYIGJv+C+CX/3rTXB5u+bziB4qG9at6O6fLciGdc9PzmgR9bqxZS7Oy+HXwVCOgnTs cpKfmfNVBcMZwQVqYJKNMoD9RBruMb1hC2lfLHK/RN+UQeXnIc6DEUso78oxTnF6iV2P xZ42ncg9bW0PUTsZPr1L+0zwZhEMSvRPscZOPsLRGlEa0jPX63T0pX8yTJWomohwtxY0 DUfKUQKapykY9L7VLVb+laOtBQBtxgR8Daqz6glCXbceWXyZv602UFKZkneKSGtBeC/t Y9+4amMllbaNL/xq5bXsfUcZzyHVRybHWb5uJeYpL0JApFL5nG/1tuQMcpALbwhL8Hnc lO6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=P2MoYZYdnAb3Oq0MP2kQqdmToxGWZIkjpMBdgpAlhMs=; b=OM9rx+GWwPKc6z1UewLmkHpLz7DX/IHYeiaStbR06gf/HEInk/iYssxfsM9hVTz/Hz vjgMlepXA/8+gpbftYXMDe/zP7XoVyeRVMa9eXSclC3QjAIvq4iIFZ4vFACtlmw/zaeX s3WM4kITJRJj0wnp5jDQH/PMqdTv1mhON84y8KP5ItnsqRG/29/6fEtF2tjsdUsmNUDD ta5PeFEJ4BJzIzGWJtLgis6shZ7zwpqX3LPLy2nafi/W0SaD1RhxGgfXOHZ5cgbMR1hL 9XaBkQBB/6iE3OYXBf5U73YdqsWPLkDW61mnbkjcd4vrZevybdtk0YDMIWLbj0onUC86 Kk3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=SuFhUVy5; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r1-20020a17090a454100b00234bcb4bce5si1481694pjm.51.2023.03.10.21.31.42; Fri, 10 Mar 2023 21:31:55 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=SuFhUVy5; 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 S230157AbjCKFSO (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229945AbjCKFRe (ORCPT ); Sat, 11 Mar 2023 00:17:34 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0CB0F140507; Fri, 10 Mar 2023 21:17:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=P2MoYZYdnAb3Oq0MP2kQqdmToxGWZIkjpMBdgpAlhMs=; b=SuFhUVy5Zd7B7mtIDnpPByC4Ao 10YL+FTyhpuXcsai5/ra07AtTaL5mvac+FSPlnnWqTEKl+hS31lsFUdNEawCii+7q0glpKsoCEWpZ HcsVn3gxQ7LZm2Nf1pUIAmQ/B4IW0uQW06uwV62r6p7PoZk45GSTxT+rmIlduySRK0EbiYsjvYSBk qYbYPz9wY0Du2LmXb20Xw88j30mQqJmGCRzcy7WzsiZ4/yUXWrD9w8DQHNImzr34AIc26mHOVpvqD gRqKNWz7jxO2yBDwYX5Tg3I1gxxwwuG2ANUNOjq/se13XzV1zupepqdj2WnJedLFKD3759M+PlDkn fhPpKksg==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBNC-Fl; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 10/12] module: avoid allocation if module is already present and ready Date: Fri, 10 Mar 2023 21:17:10 -0800 Message-Id: <20230311051712.4095040-11-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048148816470154?= X-GMAIL-MSGID: =?utf-8?q?1760048148816470154?= load_module() will allocate a struct module before even checking if the module is already loaded. This can create unecessary memory pressure since we can easily just check if the module is already present early with the copy of the module information from userspace after we've validated it a bit. This can only be an issue if a system is getting hammered with userspace loading modules. Note that there are two ways to load modules, one is auto-loading in-kernel and that pings back to userspace to just call modprobe. Then userspace itself *is* supposed to check if a module is present before loading it. But we're observing situations where tons of the same module are in effect being loaded. In that situation we can end up allocating memory for module requests which after allocating memory will fail to load. To avoid memory pressure for such stupid cases put a stop gap for them. Signed-off-by: Luis Chamberlain --- kernel/module/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/module/main.c b/kernel/module/main.c index e24323e2c499..909454f9616e 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2713,6 +2713,10 @@ static int early_mod_check(struct load_info *info, int flags) if (err) return err; + err = module_patient_check_exists(info->mod->name); + if (err) + return err; + return 0; } From patchwork Sat Mar 11 05:17:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67987 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134308wrd; Fri, 10 Mar 2023 21:40:37 -0800 (PST) X-Google-Smtp-Source: AK7set+z9AdsIutb+GsXsSLGA0sf3OrL14wGRJla2KCSXOydfhOMTZjrsKP2zVDa2Mu3ll2CJlds X-Received: by 2002:a05:6a20:12cd:b0:cd:40b4:bc75 with SMTP id v13-20020a056a2012cd00b000cd40b4bc75mr31197768pzg.48.1678513236686; Fri, 10 Mar 2023 21:40:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513236; cv=none; d=google.com; s=arc-20160816; b=QPGjwVXXPhemHHJohJ/jbn4s3Q6Snv8wnuxUh5RyIf/oAY3LDIXL/z6L07Ypfk/S4S S+0mNEZTapusNWwofhvH07uzqlGU9J8JL7oyz9OSZVq7ydcEQWVRrp+V0ZM4kLM0J9Cq J3/os58R/IK2mdGGKr6L2TwVZUa5duttyPFPW7FKhPev9njbsSz8b6WrexKoZ8as4pv4 jJ/QUgGa7UeHCcok9qmlX9NZBHGqCnbOUJp20INg2V72uoX3HXNF8pWQHy/dCYZFU8QB s2a+MIqsTynrLIzVH3VlC3IQTPb3JF33IjXARAKosC8sZTwVFZt5JUj1/VMCj85zfUg/ QoOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=O4b3Qxh/i39uh+zwcsp8AsaOxA5M41InYNm+nORqDPs=; b=IwUooez+Z0lO0bvCtYQxlonzQe2gL5VEKVIwj9mejh1X7fqxpT8SaruYRTGQ/cI/13 AX+lRWrV7yQ4NQaaJ3ra+hC5Yb8JQn/ZyLt/S6YFEFKTYurQC9NtLE3IArAwrnDhlgmw emYnRaZF9p3GJExcNVbln/W0ZeWIS2IvUvK6EP4ry/lcCHmxSWBy1UDej5eye2O21BgW ikcumBBHYs567Fu81ERzSfq73I6szMh2Ks3ebhPZISFQFYsR4/159l29WFBDPE8GeQxq eS1Fg+gXt/jFurfSCmKULxtJM1CMeCaIl1QLFBMp0PtAr0ToaS4PtseGN16o71+7Xtf0 9M/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=3Ow6eDvB; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c20-20020a6566d4000000b005074d02bb83si1434797pgw.430.2023.03.10.21.40.23; Fri, 10 Mar 2023 21:40:36 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=3Ow6eDvB; 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 S230057AbjCKFSf (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229910AbjCKFRc (ORCPT ); Sat, 11 Mar 2023 00:17:32 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78563140515; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=O4b3Qxh/i39uh+zwcsp8AsaOxA5M41InYNm+nORqDPs=; b=3Ow6eDvBTwIXsDf145Zz2dBLVB yuBPoQbmbDY0TruIbFFrwghKp2pc0QFVg5Lm3yW9FgiDn5BzW4MiwSmotkIXMBPGPXebmLnuLQfxE 62RMq0qzsEX+dOSlhoOuwYd8Bbwmq6vO7DuS1Dv9RM4oKsz03tnLCwCxBU/hwSf0YhPHS5TQyNae0 +KqHD4ebj04pdEw4z40rApf4pnL5D2rC+G/Yb4ddAN0AACFeRBYoHeXVYYKvNdbc+paOa5z5Ymlw7 Hv871ZP8Gojpg8tRM5KsGW8Zcv7Z7JHAHpEWEIOX8mGKb8hXlKlk8AeDIJjk0ql6FnsB6BixcMqfc /DUlEzCQ==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBNE-HP; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 11/12] module: use list_add_tail_rcu() when adding module Date: Fri, 10 Mar 2023 21:17:11 -0800 Message-Id: <20230311051712.4095040-12-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048695525458504?= X-GMAIL-MSGID: =?utf-8?q?1760048695525458504?= Put a new module at the end of the list intead of making new modules at the top of the list. find_module_all() start the hunt using the first entry on the list, if we assume that the modules which are first loaded are the most frequently looked for modules this should provide a tiny optimization. This is theoretical, and could use more actual data by analzying the impact of this patch on boot time a slew of systems using systemd-analyze. Signed-off-by: Luis R. Rodriguez --- kernel/module/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 909454f9616e..bc9202b60d55 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2608,7 +2608,7 @@ static int add_unformed_module(struct module *mod) goto out; mod_update_bounds(mod); - list_add_rcu(&mod->list, &modules); + list_add_tail_rcu(&mod->list, &modules); mod_tree_insert(mod); err = 0; From patchwork Sat Mar 11 05:17:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 67989 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp134471wrd; Fri, 10 Mar 2023 21:41:11 -0800 (PST) X-Google-Smtp-Source: AK7set8vChIcKGlfGw6MG72wFEFast1qKfouTCQTB+Lb+U6OmBvtoqa/3U1+jektm8Z3q13KI7vf X-Received: by 2002:a17:903:2281:b0:19a:9686:ea85 with SMTP id b1-20020a170903228100b0019a9686ea85mr30967795plh.17.1678513271402; Fri, 10 Mar 2023 21:41:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678513271; cv=none; d=google.com; s=arc-20160816; b=tNx9zjA4rapnU4iucQ/rejqI8wQUx/GRkhFTtIf9uvN96MmHi3vbULUbRSvAKNYEVc QAlRTb9wa93r0cOJw3WRf3gt2Jrc3nuF5WL08QrlDYkjmy6rq3dpz/vafHNhrAjRx8mq j/FB4THf6OYWaqPHx+5XJdzxd3PDAsKjqSkWXdw8IMVtMlp3s4SwbNrHpUPUiz0vv6Y/ CHLyc0gK5lJr4RZ1VsjesM8kVGRZ53F++S7lEjBouNTbhO4jQ82tHHmrFfA0CFksTDqx +TS2BoWRGRZKrjHIqTymlM5hs0pBKJE9FHizbe+zD1iXxwtCKJKns1+5K9bYsuCLZ6zA okpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=pxTUOVx9i1JFOyCPATR0il1cHRcDZ89gN6jPm1YO3X8=; b=D91Nsk1vR7fZdz7Oqyy69FxNghR+5N6FNDz9B3DWBVMrlWekAW3/Fdwyo2z0tRNEPt BUnIX7JukVXcJrrmAkuWSmfKGcdvVMCYjZGyAOXv7ig+V7Ya4sMb3zSroVHdNbPonjUk 17xFr1/zd0O4w4nKb8mQTf9dUyhwO0enGui63Wg9iUL6O+RXPrLB9NrgjK9qWXPI0O2X 95EAwI+DbnMKd37xTHfoUOa5iDHriJXaVI1VPFzjOF63tS+tehTQZxKXGu0poe/4YFqA ffjcscwWIWCCeuYv+OcNXsrPTfThTgoH7Q5dI5t031fFsUfrDmPKNAWtozP6OuTweHeF 1UIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=1KBw30U8; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q19-20020a170902bd9300b0019a6d34a6c6si1483297pls.624.2023.03.10.21.40.59; Fri, 10 Mar 2023 21:41:11 -0800 (PST) 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=@infradead.org header.s=bombadil.20210309 header.b=1KBw30U8; 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 S230183AbjCKFS1 (ORCPT + 99 others); Sat, 11 Mar 2023 00:18:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229933AbjCKFRd (ORCPT ); Sat, 11 Mar 2023 00:17:33 -0500 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7836114050B; Fri, 10 Mar 2023 21:17:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=pxTUOVx9i1JFOyCPATR0il1cHRcDZ89gN6jPm1YO3X8=; b=1KBw30U8YggjwHFTZnlXveoHDd GHJ64T+dUK7GtsvB5Dhia8zLF/jfDFwlRiLp+6PdSDaNqL3UFUTQR7u6gcYa4F+8LfXZjmD7Ulzr8 g6+S+A0gCudBGun8jhkiKPTyR5Tk4dr3G0WXRF7ecWP459aKYrZt48opPxV52Y5p7744catjlqhom d8O4k7pfZau8Q2dolG+oPgU38RF+RfkFOcedICrOivuPfNbAQ8LQ/nZeELimz6nxUbQMHgobvTO/V tPjs9Eum+aCYa+t7ti/qhZYwJaFuxOaB+k4rOkRXNDz1dE0MP0n2ijgLpk/L3iisEIl1miJmvHIl0 AXbqfwAQ==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1parbj-00HBNG-JB; Sat, 11 Mar 2023 05:17:27 +0000 From: Luis Chamberlain To: linux-modules@vger.kernel.org, linux-kernel@vger.kernel.org, pmladek@suse.com, david@redhat.com, petr.pavlu@suse.com, prarit@redhat.com Cc: christophe.leroy@csgroup.eu, song@kernel.org, mcgrof@kernel.org, torvalds@linux-foundation.org Subject: [RFC 12/12] module: use aliases to find module on find_module_all() Date: Fri, 10 Mar 2023 21:17:12 -0800 Message-Id: <20230311051712.4095040-13-mcgrof@kernel.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230311051712.4095040-1-mcgrof@kernel.org> References: <20230311051712.4095040-1-mcgrof@kernel.org> MIME-Version: 1.0 Sender: Luis Chamberlain X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760048732040667510?= X-GMAIL-MSGID: =?utf-8?q?1760048732040667510?= Modules can have a series of aliases, but we don't currently use them to check if a module is already loaded. Part of this is because load_module() will stick to checking for already loaded modules using the actual module name, not an alias. Its however desriable to also check for aliases on find_module_all() for existing callers and future callers. The curent gain to using aliases on find_module_all() will simply be to be able to support unloading modules using the alias using the delete_module() syscall. You can debug this with dynamic debug: GRUB_CMDLINE_LINUX_DEFAULT="dyndbg=\"func module_process_aliases +p; func module_name_match +p; \" " Suggested-by: Linus Torvalds Signed-off-by: Luis Chamberlain --- kernel/module/aliases.c | 17 +++++++++++++++++ kernel/module/internal.h | 5 +++++ kernel/module/main.c | 24 +++++++++++++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/kernel/module/aliases.c b/kernel/module/aliases.c index 2f30c9d4c765..69518bc5169a 100644 --- a/kernel/module/aliases.c +++ b/kernel/module/aliases.c @@ -90,3 +90,20 @@ int module_process_aliases(struct module *mod, struct load_info *info) return -ENOMEM; } + +bool module_name_match_aliases(struct module *mod, const char *name, size_t len) +{ + unsigned int i; + const char *alias; + + for (i=0; i < mod->num_aliases; i++) { + alias = mod->aliases[i]; + if (strlen(alias) == len && !memcmp(alias, name, len)) { + pr_debug("module %s alias matched: alias[%u] = %s\n", + mod->name, i, alias); + return true; + } + } + + return false; +} diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 40bb80ed21e2..78aaad74f4ca 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -306,6 +306,7 @@ static inline int same_magic(const char *amagic, const char *bmagic, bool has_cr #ifdef CONFIG_MODULE_KERNEL_ALIAS void free_mod_aliases(struct module *mod); int module_process_aliases(struct module *mod, struct load_info *info); +bool module_name_match_aliases(struct module *mod, const char *name, size_t len); #else static void free_mod_aliases(struct module *mod) { @@ -314,4 +315,8 @@ static int module_process_aliases(struct module *mod, struct load_info *info) { return 0; } +static bool module_name_match_aliases(struct module *mod, const char *name, size_t len) +{ + return false; +} #endif /* CONFIG_MODULE_KERNEL_ALIAS */ diff --git a/kernel/module/main.c b/kernel/module/main.c index bc9202b60d55..cf044329da3c 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -338,6 +338,28 @@ bool find_symbol(struct find_symbol_arg *fsa) return false; } +static bool module_name_match(struct module *mod, const char *name, size_t len) +{ + unsigned int i; + const char *alias; + + if (strlen(mod->name) == len && !memcmp(mod->name, name, len)) + return true; + + return module_name_match_aliases(mod, name, len); + + for (i=0; i < mod->num_aliases; i++) { + alias = mod->aliases[i]; + if (strlen(alias) == len && !memcmp(alias, name, len)) { + pr_debug("module %s alias matched: alias[%u] = %s\n", + mod->name, i, alias); + return true; + } + } + + return false; +} + /* * Search for module by name: must hold module_mutex (or preempt disabled * for read-only access). @@ -353,7 +375,7 @@ struct module *find_module_all(const char *name, size_t len, lockdep_is_held(&module_mutex)) { if (!even_unformed && mod->state == MODULE_STATE_UNFORMED) continue; - if (strlen(mod->name) == len && !memcmp(mod->name, name, len)) + if (module_name_match(mod, name, len)) return mod; } return NULL;