summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2016-08-10 17:05:23 -0600
committerEric Anholt <eric@anholt.net>2016-08-15 08:34:05 -0700
commit099489b7917da44de57f3214425ea9b4a8f36482 (patch)
treeeda89ceb0e2f93c2c18fdfc4cdff821c999931bc
parent201d1a7623c83f611761f67d4411c3c266f8f37a (diff)
downloadxorg-lib-libpciaccess-099489b7917da44de57f3214425ea9b4a8f36482.tar.gz
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.c14
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));
}