diff options
author | Keith Busch <keith.busch@intel.com> | 2016-08-10 17:05:23 -0600 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2016-08-15 08:34:05 -0700 |
commit | 099489b7917da44de57f3214425ea9b4a8f36482 (patch) | |
tree | eda89ceb0e2f93c2c18fdfc4cdff821c999931bc | |
parent | 201d1a7623c83f611761f67d4411c3c266f8f37a (diff) |
Ignore 32-bit domains
A pci "domain" need not be limited to the 16-bits. The Linux kernel
currently supports 32-bit domains which cause startx to segfault. Updating
libpciaccess to support 32-bit domains breaks the library's ABI, and
domains requiring 32-bits are not necessary for startx anyway, so this
patch ignores them.
Reported-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
-rw-r--r-- | src/linux_sysfs.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c index 6367b11..cd2713d 100644 --- a/src/linux_sysfs.c +++ b/src/linux_sysfs.c @@ -119,18 +119,28 @@ pci_system_linux_sysfs_create( void ) /** - * Filter out the names "." and ".." from the scanned sysfs entries. + * Filter out the names "." and ".." from the scanned sysfs entries, and + * domains requiring 32-bits. * * \param d Directory entry being processed by \c scandir. * * \return - * Zero if the entry name matches either "." or "..", non-zero otherwise. + * Zero if the entry name matches either "." or "..", or the domain requires + * 32 bits, non-zero otherwise. * * \sa scandir, populate_entries */ static int scan_sys_pci_filter( const struct dirent * d ) { + if (d->d_name[0] != '.') { + unsigned dom = 0; + + sscanf(d->d_name, "%x:", &dom); + if (dom > USHRT_MAX) + return 0; + } + return !((strcmp( d->d_name, "." ) == 0) || (strcmp( d->d_name, ".." ) == 0)); } |