Robert Scheck created GUACAMOLE-1802:
----------------------------------------

             Summary: Regression: Fix for GUACAMOLE-1717 causes guacd segfault
                 Key: GUACAMOLE-1802
                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-1802
             Project: Guacamole
          Issue Type: Bug
          Components: guacd
    Affects Versions: 1.5.2
         Environment: Red Hat Enterprise Linux 8.8, guacd 1.5.2, freerdp 2.2.0
            Reporter: Robert Scheck


I'm the RPM package maintainer of `guacd` in Fedora and EPEL (for CentOS 
Stream, RHEL, Rocky Linux etc.). I received a report that since the update of 
`guacd` from 1.5.1 to 1.5.2 `guacd` segfaults when connecting via RDP 
(downgrading to 1.5.1 again works around the issue). The traceback looks like 
this:

```
(gdb) bt full
#0  __memset_avx2_unaligned_erms () at 
../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:182
No locals.
#1  0x00007f2e4ada6749 in memset (__len=164, __ch=0, __dest=0x0) at 
/usr/include/bits/string_fortified.h:74
No locals.
#2  freerdp_image_copy_from_pointer_data (pDstData=0x0, DstFormat=537168008, 
nDstStep=164, nXDst=0, nYDst=0, nWidth=41, nHeight=39, xorMask=0x7f2e38386b90 
"", xorMaskLength=6396, 
    andMask=0x7f2e38080a20 
"\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\377\377\377\200\377\377\001\377\377\200\377",
 <incomplete sequence \374>, andMaskLength=234, xorBpp=32, 
palette=0x7f2e3804bdc8) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/codec/color.c:544
        pDstLine = 0x0
        y = 0
        dstBitsPerPixel = 32
        dstBytesPerPixel = 4
        _{_}FUNCTION{_}_ = "freerdp_image_copy_from_pointer_data"
#3  0x00007f2e4b067d47 in guac_rdp_pointer_new () from 
/lib64/libguac-client-rdp.so
No symbol table info available.
#4  0x00007f2e4ad1e1c3 in update_pointer_new (pointer_new=0x7f2e3807a610, 
context=0x7f2e38015780) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/cache/pointer.c:222
        pointer = 0x7f2e38386ad0
        cache = 0x7f2e3804c9d0
        pointer = <optimized out>
        cache = <optimized out>
#5  update_pointer_new (context=0x7f2e38015780, pointer_new=0x7f2e3807a610) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/cache/pointer.c:198
        pointer = <optimized out>
        cache = <optimized out>
#6  0x00007f2e4ad78ae4 in fastpath_recv_update 
(fastpath=fastpath@entry=0x7f2e3802f8e0, updateCode=updateCode@entry=11 '\v', 
s=0x7f2e38033960) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/fastpath.c:467
        pointer_new = 0x7f2e3807a610
        rc = 0
        status = 0
        update = <optimized out>
        context = 0x7f2e38015780
        pointer = 0x7f2e3802d690
        _{_}FUNCTION{_}_ = "fastpath_recv_update"
        _log_cached_ptr = <optimized out>
#7  0x00007f2e4ad79097 in fastpath_recv_update_data (s=0x7f2e38384200, 
fastpath=0x7f2e3802f8e0) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/fastpath.c:575
        size = 1361
        status = 0
        compression = <optimized out>
        compressionFlags = <optimized out>
        transport = 0x7f2e380271f0
        rdp = <optimized out>
        bulkStatus = <optimized out>
        updateCode = 11 '\v'
        fragmentation = 0 '\000'
        DstSize = 6646
        pDstData = 0x7f2e3f1c7030 " "
        status = <optimized out>
        size = <optimized out>
        rdp = <optimized out>
        bulkStatus = <optimized out>
        updateCode = <optimized out>
        fragmentation = <optimized out>
        compression = <optimized out>
        compressionFlags = <optimized out>
        DstSize = <optimized out>
        pDstData = <optimized out>
        transport = <optimized out>
        _{_}FUNCTION{_}_ = "fastpath_recv_update_data"
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        totalSize = <optimized out>
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
#8  fastpath_recv_updates (fastpath=0x7f2e3802f8e0, s=s@entry=0x7f2e38384200) 
at /usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/fastpath.c:659
        rc = -2
        update = 0x7f2e3802d2c0
        _{_}FUNCTION{_}_ = "fastpath_recv_updates"
#9  0x00007f2e4ad724e2 in rdp_recv_fastpath_pdu (s=0x7f2e38384200, 
rdp=0x7f2e3801a850) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/rdp.c:1462
        length = 1365
        fastpath = 0x7f2e3802f8e0
        length = <optimized out>
        fastpath = <optimized out>
        _{_}FUNCTION{_}_ = "rdp_recv_fastpath_pdu"
        _log_cached_ptr = 0x0
        _log_cached_ptr = 0x0
        flags = <optimized out>
        _log_cached_ptr = 0x0
#10 rdp_recv_pdu (rdp=rdp@entry=0x7f2e3801a850, s=s@entry=0x7f2e38384200) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/rdp.c:1470
No locals.
#11 0x00007f2e4ad72fb3 in rdp_recv_callback (transport=<optimized out>, 
s=0x7f2e38384200, extra=0x7f2e3801a850) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/rdp.c:1647
        status = 0
        rdp = 0x7f2e3801a850
        _{_}FUNCTION{_}_ = "rdp_recv_callback"
#12 0x00007f2e4ad7cfa4 in transport_check_fds 
(transport=transport@entry=0x7f2e380271f0) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/transport.c:1062
        status = 1368
        recv_status = <optimized out>
        received = 0x7f2e38384200
        now = <optimized out>
        dueDate = 454091
        _{_}FUNCTION{_}_ = "transport_check_fds"
#13 0x00007f2e4ad73a57 in rdp_check_fds (rdp=0x7f2e3801a850) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/rdp.c:1707
        status = <optimized out>
        transport = 0x7f2e380271f0
        _{_}FUNCTION{_}_ = "rdp_check_fds"
#14 0x00007f2e4ad5b1c1 in freerdp_check_fds (instance=0x7f2e380154f0) at 
/usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/freerdp.c:333
        status = <optimized out>
        rdp = <optimized out>
        _{_}FUNCTION{_}_ = "freerdp_check_fds"
#15 0x00007f2e4ad5c226 in freerdp_check_event_handles (context=0x7f2e38015780) 
at /usr/src/debug/freerdp-2.2.0-10.el8.x86_64/libfreerdp/core/freerdp.c:381
        status = <optimized out>
        _{_}FUNCTION{_}_ = "freerdp_check_event_handles"
#16 0x00007f2e4b06948d in guac_rdp_client_thread () from 
/lib64/libguac-client-rdp.so
No symbol table info available.
#17 0x00007f2e4f4731ca in start_thread (arg=<optimized out>) at 
pthread_create.c:479
        ret = <optimized out>
        pd = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf =

{139836629378816, -991114267329111259, 139836637768638, 139836637768639, 0, 
139836629376512, 892376756324326181, 892350843852217125}

, mask_was_saved = 0}}, priv = {pad =

{0x0, 0x0, 0x0, 0x0}

, data =

{prev = 0x0,                cleanup = 0x0, canceltype = 0}

}}
        not_first_call = <optimized out>
#18 0x00007f2e4de0ee73 in clone () at 
../sysdeps/unix/sysv/linux/x86_64/clone.S:95
No locals.
(gdb) 
```

`freerdp_image_copy_from_pointer_data()` leads me back to [commit 
23e42fb6](https://github.com/apache/guacamole-server/commit/23e42fb6c5a5d58f82d9a91dc58036178896ba16)
 which leads me to GUACAMOLE-1717.

Reverting the commit mentioned above in a test build avoids the segfault, which 
makes this IMHO a regression.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to