From 611b3b1d40f58035582480a3d7cfa77cb288cbc6 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Sun, 31 Jul 2016 12:13:03 +0200 Subject: [PATCH] Autoconfig: Fix the loop adding dectected drivers to the list of screens This loop was written in a buggy style, causing a NULL driver ptr to be passed to copyScreen(). copyScreen() only uses that to generate an identifier string, so this is mostly harmless on systems that accept NULL for asprintf() "%s" format. (the generated identifiers are off by one wrt the driver names and the last one contains NULL. For systems that don't accept NULL for '%s' this would cause a segmentation fault when this code is used (no xorg.conf, but partial config in xorg.conf.d for instance). Signed-off-by: Matthieu Herrb Reviewed-by: Keith Packard --- hw/xfree86/common/xf86AutoConfig.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c index e6ab900aa..940265144 100644 --- a/hw/xfree86/common/xf86AutoConfig.c +++ b/hw/xfree86/common/xf86AutoConfig.c @@ -389,8 +389,7 @@ autoConfigDevice(GDevPtr preconf_device) /* for each other driver found, copy the first screen, insert it * into the list of screens and set the driver */ - i = 0; - while (i++ < num_matches) { + for (i = 1; i < num_matches; i++) { if (!copyScreen(slp[0].screen, ptr, i, matches[i])) return NULL; }