xf86-video-amdgpu: Branch 'master' - 2 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 23 13:10:25 UTC 2023


 src/drmmode_display.c |    6 ++++++
 1 file changed, 6 insertions(+)

New commits:
commit ae22d12d420efbd8847f9b64b37e7a4cadde2600
Author: Chris Bainbridge <chris.bainbridge at gmail.com>
Date:   Wed Jul 12 21:15:35 2023 +0100

    Free output_ids

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 32e7f21..00247ac 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1264,8 +1264,10 @@ drmmode_set_mode(xf86CrtcPtr crtc, struct drmmode_fb *fb, DisplayModePtr mode,
 		if (output->crtc != crtc)
 			continue;
 
-		if (!drmmode_output->mode_output)
-			return FALSE;
+		if (!drmmode_output->mode_output) {
+			ret = FALSE;
+			goto out;
+		}
 
 		output_ids[output_count] = drmmode_output->mode_output->connector_id;
 		output_count++;
@@ -1285,6 +1287,7 @@ drmmode_set_mode(xf86CrtcPtr crtc, struct drmmode_fb *fb, DisplayModePtr mode,
 			   "failed to set mode: %s\n", strerror(errno));
 	}
 
+out:
 	free(output_ids);
 	return ret;
 }
commit 2897e1769c5d14a74bccbacb483667933807ead8
Author: Chris Bainbridge <chris.bainbridge at gmail.com>
Date:   Tue Jul 4 22:34:27 2023 +0100

    Fix segfault on dock suspend, unplug, resume
    
    `drmmode_set_mode` can segfault if a USB-C dock with external monitors
    is disconnected during suspend. It appears that some data structures are
    not updated, but the associated `drmModeConnectorPtr` associated with
    those structures is NULL. Dereferencing that pointer results in Xorg
    crashing.
    
    Backtrace:
    
        (crtc=crtc at entry=0x55a0c7610390, fb=fb at entry=0x55a0c86d7410, mode=mode at entry=0x55a0c76103a8, x=x at entry=0, y=y at entry=0) at drmmode_display.c:1267
        (crtc=0x55a0c7610390, mode=0x55a0c76103a8, rotation=<optimized out>, x=<optimized out>, y=<optimized out>) at drmmode_display.c:1371
        (main=main at entry=0x55a0c63f4b40, argc=argc at entry=10, argv=argv at entry=0x7fffb7cefbf8)
        at ../sysdeps/nptl/libc_start_call_main.h:58
        (main=0x55a0c63f4b40, argc=10, argv=0x7fffb7cefbf8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffb7cefbe8) at ../csu/libc-start.c:381
    
    Fix this by checking the pointer before dereferencing it.
    
    Fixes: https://gitlab.freedesktop.org/drm/amd/-/issues/2375
    Signed-off-by: Chris Bainbridge <chris.bainbridge at gmail.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 5b73fce..32e7f21 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1264,6 +1264,9 @@ drmmode_set_mode(xf86CrtcPtr crtc, struct drmmode_fb *fb, DisplayModePtr mode,
 		if (output->crtc != crtc)
 			continue;
 
+		if (!drmmode_output->mode_output)
+			return FALSE;
+
 		output_ids[output_count] = drmmode_output->mode_output->connector_id;
 		output_count++;
 	}


More information about the xorg-commit mailing list