xserver/hw/xfree86
Maarten Lankhorst deb08658e2 xfree86: Strip dangling pointers from desiredMode
Based on the original patch by Chris Wilson, which was a better fix than mine.

We stash a copy of the desiredMode on the crtc so that we can restore it
after a vt switch. This copy is a simple memcpy and so also stashes a
references to the pointers contained within the desiredMode. Those
pointers are freed the next time the outputs are probed and mode list
rebuilt, resulting in us chasing those dangling pointers on the next
mode switch.

==22787== Invalid read of size 1
==22787==    at 0x40293C2: __GI_strlen (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22787==    by 0x668F875: strdup (strdup.c:42)
==22787==    by 0x5DBA00: XNFstrdup (utils.c:1124)
==22787==    by 0x4D72ED: xf86DuplicateMode (xf86Modes.c:209)
==22787==    by 0x4CA848: xf86CrtcSetModeTransform (xf86Crtc.c:276)
==22787==    by 0x4D05B4: xf86SetDesiredModes (xf86Crtc.c:2677)
==22787==    by 0xA7479D0: sna_create_screen_resources
(sna_driver.c:220)
==22787==    by 0x4CB914: xf86CrtcCreateScreenResources (xf86Crtc.c:725)
==22787==    by 0x425498: main (main.c:216)
==22787==  Address 0x72c60e0 is 0 bytes inside a block of size 9 free'd
==22787==    at 0x4027AAE: free (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22787==    by 0x4A547E: xf86DeleteMode (xf86Mode.c:1984)
==22787==    by 0x4CD84F: xf86ProbeOutputModes (xf86Crtc.c:1578)
==22787==    by 0x4DC405: xf86RandR12GetInfo12 (xf86RandR12.c:1537)
==22787==    by 0x518119: RRGetInfo (rrinfo.c:202)
==22787==    by 0x51D997: rrGetScreenResources (rrscreen.c:335)
==22787==    by 0x51E0D0: ProcRRGetScreenResources (rrscreen.c:475)
==22787==    by 0x513852: ProcRRDispatch (randr.c:493)
==22787==    by 0x4346DB: Dispatch (dispatch.c:439)
==22787==    by 0x4256E4: main (main.c:287)

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Reported-by: Zdenek Kabelac <zdenek.kabelac@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=36108
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Keith Packard <keithp@keithp.com>
2012-07-11 15:55:22 -07:00
..
common xfree86: Strip dangling pointers from desiredMode 2012-07-11 15:55:22 -07:00
ddc api: rework the X server driver API to avoid global arrays. 2012-06-05 13:22:18 +01:00
dixmods Remove unused setupFunc from extensions 2012-07-10 00:31:02 -07:00
doc Remove XAA 2012-07-10 00:41:57 -07:00
dri XFree86: DRI: Don't use per-target CFLAGS 2012-07-10 00:31:01 -07:00
dri2 Move DRI2 from external module to built-in 2012-07-10 00:31:01 -07:00
exa api: rework the X server driver API to avoid global arrays. 2012-06-05 13:22:18 +01:00
fbdevhw Make stub version of fbdevHWAdjustFrame match new prototype in fbdevhw.h 2012-06-11 18:29:16 -07:00
i2c Build tda9885.c functions into fi1236 to avoid libtool relinking problems 2012-07-02 11:08:37 -07:00
int10 xserver: fix build on arm tinderbox 2012-06-14 11:09:30 -07:00
loader Move the remnants of loadext.c to miinitext.c 2012-07-10 00:31:02 -07:00
man loader: add Cygwin support 2012-04-05 21:57:04 -05:00
modes xfree86: Strip dangling pointers from desiredMode 2012-07-11 15:55:22 -07:00
os-support XFree86: os-support: Remove unused xf86MakeNewMapping 2012-07-10 00:42:10 -07:00
parser Remove obsolete tab stop comments from hw/xfree86/parser/*.c 2012-06-20 21:41:52 -07:00
ramdac Remove XAA 2012-07-10 00:41:57 -07:00
shadowfb api: rework the X server driver API to avoid global arrays. 2012-06-05 13:22:18 +01:00
utils cvt man page should use Hz, not kHz, for vertical refresh rate 2012-05-18 15:00:47 -07:00
vbe api: rework the X server driver API to avoid global arrays. 2012-06-05 13:22:18 +01:00
vgahw xf86dga: handle DGAAvailable for gpu screens. (v2) 2012-07-07 10:37:10 +01:00
x86emu Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
.gitignore xfree86: Move sdksyms generation to ddx toplevel 2011-06-23 05:28:31 -07:00
Makefile.am Remove XAA 2012-07-10 00:41:57 -07:00
sdksyms.sh Remove XAA 2012-07-10 00:41:57 -07:00
xorgconf.cpp xfree86: use sed rather than cpp to perform string substitutions 2011-01-18 15:11:14 -08:00