From patchwork Fri Dec 2 22:45:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allen Webb X-Patchwork-Id: 630845 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2747C4321E for ; Fri, 2 Dec 2022 22:46:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234694AbiLBWqC (ORCPT ); Fri, 2 Dec 2022 17:46:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41338 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234481AbiLBWqB (ORCPT ); Fri, 2 Dec 2022 17:46:01 -0500 Received: from mail-oo1-xc49.google.com (mail-oo1-xc49.google.com [IPv6:2607:f8b0:4864:20::c49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D005FD01 for ; Fri, 2 Dec 2022 14:46:00 -0800 (PST) Received: by mail-oo1-xc49.google.com with SMTP id g1-20020a4a9241000000b0049fd16671b4so2109144ooh.14 for ; Fri, 02 Dec 2022 14:46:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=H9rB8T4wsLk/XiKnyLn1ChOtKZ9sbnSqHD/TUK5IA5c=; b=FKtnIANVOWz7QVSEbLOapzApcnKHXWL+sDMMTlpRER0DmPvpwDNQWejH44T8rhZ/g/ 4zLMVodKI7oWSvAxUHMUSwSA8Ob4O5iuspJ19UyRqD7f94yzb3qI5m9VqJP73JyxJL20 CjKTY5D1NaTgiiStb1FlHHaLFYXq25aundNcK3gFpDvos/EyOCIQlCv9uS4edmtHEVBE DA/bkR7BAm2HKc1BnJyuLuMSqbrU4NCyTQm1l6jnlp6Vhmq7JH63ZDWOSFo90KwkAOJr 9piAmZPcWCBs3Xya4n+Mts4aeoDe5LvQrCUyUwEy5H4//pYF0Ch0cxiu/mlHTEOdYbUj uL6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=H9rB8T4wsLk/XiKnyLn1ChOtKZ9sbnSqHD/TUK5IA5c=; b=ceaFaAWoRUv1p9X+lXAlvIpWZFYW+f9m6aPqHsyPUA8Wj7zUCMCzDcREqWnmXYSZzi 1lkdgriJOHG5BrsSL58N2Q64+U/W5NYH7ZgpdRCQU7sc8mNUrvacpfs9lNAB9ZkR2JHl pag8eMJl9Y8Uf08rJara4J+Owtlh6ckNhiQEzYK8kn58o5Ozgma5u2/KRiiCfLaGsbm8 A+uQBHGjCFeheIvAPxg1ySSx5E63OiDgcV9vXrfylmbHqahVvlconhNjZP+GEaglnKL+ 2nQOD25bZAzkZLRgKRftZSm57AAw3PY8zHvoqEK+/+ULCSei7dsaYalbeNWH2arD5145 lA1w== X-Gm-Message-State: ANoB5pnTc/6naIG75Qh6PS6bX6WXPnmYD0/ybxz8krnVka/z6++4nCzt 0VVcR43riZPLgFz/wFmBsRobH0pioQSE6Ow= X-Google-Smtp-Source: AA0mqf7wvdGylDyAivlm1FKQpi+Pr3pcLL+c4xJlI61PFCspz/oPv3dAy7P0b8RMerI1ZTHykp7/Yqsj3TbC3T4= X-Received: from allenwebb.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:12e8]) (user=allenwebb job=sendgmr) by 2002:a05:6808:1701:b0:35b:722a:9eac with SMTP id bc1-20020a056808170100b0035b722a9eacmr24273459oib.268.1670021159815; Fri, 02 Dec 2022 14:45:59 -0800 (PST) Date: Fri, 2 Dec 2022 16:45:40 -0600 In-Reply-To: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.39.0.rc0.267.gcb52ba06e7-goog Message-ID: <20221202224540.1446952-1-allenwebb@google.com> Subject: [PATCH v6 0/5] Add sysfs match-id modalias attribute for USB modules From: Allen Webb To: "linux-modules@vger.kernel.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" Cc: Luis Chamberlain , Greg Kroah-Hartman , "Rafael J. Wysocki" , Allen Webb Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Add sysfs match-id modalias attribute for USB modules This patch series (v6) exposes the driver matching values from the modalias to inform policy decisions in userspace for devices with the authorized attribute in sysfs. In other words with this patch tools like USBGuard could leverage not only modules.aliases, but also the aliases for the builtin modules to associate devices with modules that may be bound before deciding to authorize a device or not. This is particularly useful in cases when new devices shouldn't be allowed part of the time like for lock screens. Note that at this point the series only implements USB, but Thunderbolt and other subsystems could be added. CONFIG_SYSFS and CONFIG_MODULES (adds /sys/module/) are both required for the /sys/module/*/modalias attributes to be present. --- # Module sysfs modalias attribute for match ids Note that previous versions of this patch series were flattened into a single patch, and a cover letter was first added in v5 with diffs between each previous version of the patch series. Also this version adds a `Documentation/ABI` entry for `/sys/module/*/modalias`. RFC (broken patch): https://lore.kernel.org/lkml/CAJzde042-M4UbpNYKw0eDVg4JqYmwmPYSsmgK+kCMTqsi+-2Yw@mail.gmail.com/ v1 (missing v1 label): https://lore.kernel.org/lkml/20221111152852.2837363-1-allenwebb@google.com/ v2 (missing v2 label): https://lore.kernel.org/lkml/20221128201332.3482092-1-allenwebb@google.com/ v3: https://lore.kernel.org/lkml/20221129224313.455862-1-allenwebb@google.com/ v4: https://lore.kernel.org/lkml/20221130221447.1202206-1-allenwebb@google.com/ v5: https://lore.kernel.org/lkml/20221201211630.101541-1-allenwebb@google.com/ v6: This version ## Patch series status This series is still going through revisions in response to comments. USB is the only implemented subsystem, but PCI or other subsystems with the authorized attribute could be added. There is still an open question as to whether using kmod would be a better approach to solve the problem. One big hurdle with that approach is match-id-based aliases are not currently exposed through kmod and changing that behavior might have unintended consequences. The particular concerns I have are: - Are we OK with significantly growing the number of aliases handled by kmod by including the match-id-based aliases? - Are other tools that use kmod prepared to handle the addition of match-id-based aliases? - Additional work would be needed for kmod to be able to handle match-id-based aliases and it would likely require subsystem specific elements unless it leveraged files2alias. Also, `mod_devicetable.c` is very similar to files2alias, so there might be some possiblity of having common logic between the two. The big difficulty lies in support both use cases which need to work both at build time and at runtime. Additionally before this is ready, there should be implementations for the other subsystems whose devices have the `authorized` sysfs attribute (Thunderbolt). ## Acknowledgements Thanks to Greg Kroah-Hartman and the Linux maintainers for being patient with me as I have worked through learning the kernel workflow to get this series into a more presentable state. Thanks to Luis Chamberlain for raising the alternative of using kmod to address the primary motivation of the patch series. Also, thanks to Intel's kernel test robot for catching issues that showed up on different kernel configurations. Allen Webb (5): module: Add empty modalias sysfs attribute drivers: Add bus_for_each for iterating over the subsystems Implement modalias sysfs attribute for modules docs: Add entry for /sys/module/*/modalias drivers: Implement module modaliases for USB Documentation/ABI/testing/sysfs-module | 12 ++ drivers/base/Makefile | 2 +- drivers/base/base.h | 8 + drivers/base/bus.c | 42 ++++ drivers/base/mod_devicetable.c | 257 +++++++++++++++++++++++++ drivers/usb/core/driver.c | 2 + include/linux/device/bus.h | 8 + include/linux/module.h | 1 + kernel/module/internal.h | 2 + kernel/module/sysfs.c | 88 +++++++++ kernel/params.c | 7 + 11 files changed, 428 insertions(+), 1 deletion(-) create mode 100644 drivers/base/mod_devicetable.c