diff options
author | Damjan Marion <damarion@cisco.com> | 2023-10-12 17:41:14 +0000 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2023-10-13 10:39:10 +0000 |
commit | c9275dadefe42418da3c15726f2a80a550b50156 (patch) | |
tree | fa05cda4eb1632aefd18a7bb621fc59d7ee3e4fd /src | |
parent | bdeee2194b09c85ec1087550177555a24cc5d875 (diff) |
vlib: allow unpriviledged vlib_pci_get_device_info()
When running unpriviledged sysfs allows reading only first
64 bytes of PCI config space.
Change-Id: I62d18328925a2e4936406c2842154b20182cacb9
Type: improvement
Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/vlib/linux/pci.c | 3 | ||||
-rw-r--r-- | src/vlib/pci/pci_config.h | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/vlib/linux/pci.c b/src/vlib/linux/pci.c index 9661827ea0d..1a70c568176 100644 --- a/src/vlib/linux/pci.c +++ b/src/vlib/linux/pci.c @@ -238,7 +238,8 @@ vlib_pci_get_device_info (vlib_main_t * vm, vlib_pci_addr_t * addr, /* You can only read more that 64 bytes of config space as root; so we try to read the full space but fall back to just the first 64 bytes. */ - if (read (fd, &di->config, sizeof (di->config)) < sizeof (di->config)) + if (read (fd, &di->config, sizeof (di->config)) < + sizeof (vlib_pci_config_hdr_t)) { err = clib_error_return_unix (0, "read `%s'", f); close (fd); diff --git a/src/vlib/pci/pci_config.h b/src/vlib/pci/pci_config.h index 3501bde4214..21b40c0f499 100644 --- a/src/vlib/pci/pci_config.h +++ b/src/vlib/pci/pci_config.h @@ -247,9 +247,9 @@ typedef struct #define _(a, b, ...) a b __VA_ARGS__; foreach_pci_config_reg #undef _ -} vlib_pci_config_mandatory_t; +} vlib_pci_config_hdr_t; -STATIC_ASSERT_SIZEOF (vlib_pci_config_mandatory_t, 64); +STATIC_ASSERT_SIZEOF (vlib_pci_config_hdr_t, 64); typedef union { |