[+cc Kees] On Wed, Apr 06, 2022 at 04:11:31PM +0900, David Stevens wrote: > From: David Stevens <stevensd@xxxxxxxxxxxx> > > Add a moduleparam that can be set to bypass the check that limits users > without CAP_SYS_ADMIN to only being able to read the first 64 bytes of > the config space. This allows systems without problematic hardware to be > configured to allow users without CAP_SYS_ADMIN to read PCI > capabilities. Can you expand this a bit to explain the purpose of this? I guess it makes "lspci -v" work without having to be root? How much of a problem is that? Is there some specific use case that needs this change? Maybe there's some way to address that without having to add a new parameter that bypasses CAP_SYS_ADMIN. > Signed-off-by: David Stevens <stevensd@xxxxxxxxxxxx> > --- > drivers/pci/pci-sysfs.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c > index 602f0fb0b007..162423b3c052 100644 > --- a/drivers/pci/pci-sysfs.c > +++ b/drivers/pci/pci-sysfs.c > @@ -28,10 +28,17 @@ > #include <linux/pm_runtime.h> > #include <linux/msi.h> > #include <linux/of.h> > +#include <linux/moduleparam.h> > #include "pci.h" > > static int sysfs_initialized; /* = 0 */ > > +static bool allow_unsafe_config_reads; > +module_param_named(allow_unsafe_config_reads, > + allow_unsafe_config_reads, bool, 0644); > +MODULE_PARM_DESC(allow_unsafe_config_reads, > + "Enable full read access to config space without CAP_SYS_ADMIN."); > + > /* show configuration fields */ > #define pci_config_attr(field, format_string) \ > static ssize_t \ > @@ -696,7 +703,8 @@ static ssize_t pci_read_config(struct file *filp, struct kobject *kobj, > u8 *data = (u8 *) buf; > > /* Several chips lock up trying to read undefined config space */ > - if (file_ns_capable(filp, &init_user_ns, CAP_SYS_ADMIN)) > + if (allow_unsafe_config_reads || > + file_ns_capable(filp, &init_user_ns, CAP_SYS_ADMIN)) > size = dev->cfg_size; > else if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) > size = 128; > -- > 2.35.1.1094.g7c7d902a7c-goog >