[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Git][xorg-team/xserver/xorg-server][debian-unstable] dix: Fix use after free in input device shutdown



Title: GitLab

Julien Cristau pushed to branch debian-unstable at X Strike Force / xserver / xorg-server

Commits:

  • 99e7aaca
    by Salvatore Bonaccorso at 2024-01-22T07:50:08+01:00
    dix: Fix use after free in input device shutdown
    
    Closes: #1061110
    

3 changed files:

Changes:

  • debian/changelog
    1
    +xorg-server (2:21.1.11-2) UNRELEASED; urgency=medium
    
    2
    +
    
    3
    +  * dix: Fix use after free in input device shutdown (Closes: #1061110)
    
    4
    +
    
    5
    + -- Salvatore Bonaccorso <carnil@debian.org>  Mon, 22 Jan 2024 07:49:53 +0100
    
    6
    +
    
    1 7
     xorg-server (2:21.1.11-1) unstable; urgency=medium
    
    2 8
     
    
    3 9
       * New upstream release, fixes:
    

  • debian/patches/dix-Fix-use-after-free-in-input-device-shutdown.patch
    1
    +From 1801fe0ac3926882d47d7e1ad6c0518a2cdffd41 Mon Sep 17 00:00:00 2001
    
    2
    +From: Povilas Kanapickas <povilas@radix.lt>
    
    3
    +Date: Sun, 19 Dec 2021 18:11:07 +0200
    
    4
    +Subject: [PATCH] dix: Fix use after free in input device shutdown
    
    5
    +
    
    6
    +This fixes access to freed heap memory via dev->master. E.g. when
    
    7
    +running BarrierNotify.ReceivesNotifyEvents/7 test from
    
    8
    +xorg-integration-tests:
    
    9
    +
    
    10
    +==24736==ERROR: AddressSanitizer: heap-use-after-free on address
    
    11
    +0x619000065020 at pc 0x55c450e2b9cf bp 0x7fffc532fd20 sp 0x7fffc532fd10
    
    12
    +READ of size 4 at 0x619000065020 thread T0
    
    13
    +    #0 0x55c450e2b9ce in GetMaster ../../../dix/devices.c:2722
    
    14
    +    #1 0x55c450e9d035 in IsFloating ../../../dix/events.c:346
    
    15
    +    #2 0x55c4513209c6 in GetDeviceUse ../../../Xi/xiquerydevice.c:525
    
    16
    +../../../Xi/xichangehierarchy.c:95
    
    17
    +    #4 0x55c450e3455c in RemoveDevice ../../../dix/devices.c:1204
    
    18
    +../../../hw/xfree86/common/xf86Xinput.c:1142
    
    19
    +    #6 0x55c450e17b04 in CloseDeviceList ../../../dix/devices.c:1038
    
    20
    +    #7 0x55c450e1de85 in CloseDownDevices ../../../dix/devices.c:1068
    
    21
    +    #8 0x55c450e837ef in dix_main ../../../dix/main.c:302
    
    22
    +    #9 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
    
    23
    +(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
    
    24
    +    #11 0x55c450d0113d in _start (/usr/lib/xorg/Xorg+0x117713d)
    
    25
    +
    
    26
    +0x619000065020 is located 160 bytes inside of 912-byte region
    
    27
    +[0x619000064f80,0x619000065310)
    
    28
    +freed by thread T0 here:
    
    29
    +(/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10d7cf)
    
    30
    +    #1 0x55c450e19f1c in CloseDevice ../../../dix/devices.c:1014
    
    31
    +    #2 0x55c450e343a4 in RemoveDevice ../../../dix/devices.c:1186
    
    32
    +../../../hw/xfree86/common/xf86Xinput.c:1142
    
    33
    +    #4 0x55c450e17b04 in CloseDeviceList ../../../dix/devices.c:1038
    
    34
    +    #5 0x55c450e1de85 in CloseDownDevices ../../../dix/devices.c:1068
    
    35
    +    #6 0x55c450e837ef in dix_main ../../../dix/main.c:302
    
    36
    +    #7 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
    
    37
    +(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
    
    38
    +
    
    39
    +previously allocated by thread T0 here:
    
    40
    +(/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10ddc6)
    
    41
    +    #1 0x55c450e1c57b in AddInputDevice ../../../dix/devices.c:259
    
    42
    +    #2 0x55c450e34840 in AllocDevicePair ../../../dix/devices.c:2755
    
    43
    +    #3 0x55c45130318f in add_master ../../../Xi/xichangehierarchy.c:152
    
    44
    +../../../Xi/xichangehierarchy.c:465
    
    45
    +    #5 0x55c4512cb9f5 in ProcIDispatch ../../../Xi/extinit.c:390
    
    46
    +    #6 0x55c450e6a92b in Dispatch ../../../dix/dispatch.c:551
    
    47
    +    #7 0x55c450e834b7 in dix_main ../../../dix/main.c:272
    
    48
    +    #8 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
    
    49
    +(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
    
    50
    +
    
    51
    +The problem is caused by dev->master being not reset when disabling the
    
    52
    +device, which then causes dangling pointer when the master device itself
    
    53
    +is being deleted when exiting whole server.
    
    54
    +
    
    55
    +Note that RecalculateMasterButtons() requires dev->master to be still
    
    56
    +valid, so we can reset it only at the end of function.
    
    57
    +
    
    58
    +Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
    
    59
    +---
    
    60
    + dix/devices.c | 1 +
    
    61
    + 1 file changed, 1 insertion(+)
    
    62
    +
    
    63
    +diff --git a/dix/devices.c b/dix/devices.c
    
    64
    +index e62c34c55e95..5f9ce1678fc4 100644
    
    65
    +--- a/dix/devices.c
    
    66
    ++++ b/dix/devices.c
    
    67
    +@@ -520,6 +520,7 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
    
    68
    +     }
    
    69
    + 
    
    70
    +     RecalculateMasterButtons(dev);
    
    71
    ++    dev->master = NULL;
    
    72
    + 
    
    73
    +     return TRUE;
    
    74
    + }
    
    75
    +-- 
    
    76
    +2.43.0
    
    77
    +

  • debian/patches/series
    ... ... @@ -5,3 +5,4 @@
    5 5
     05_Revert-Unload-submodules.diff
    
    6 6
     06_use-intel-only-on-pre-gen4.diff
    
    7 7
     07_use-modesetting-driver-by-default-on-GeForce.diff
    
    8
    +dix-Fix-use-after-free-in-input-device-shutdown.patch


  • Reply to: