FreeRDP/libfreerdp
Pascal Nowack 8d02a07974 core/server: Ignore data PDUs for DVCs that were not opened successfully
When a FreeRDP-based server tried to open a DVC, but the client answered
the DVC create request with a negative CreationStatus in the DVC create
response PDU, the server can then assume that no actual PDUs can be
received for that channel.
However, as long as the channel handle exists, FreeRDP happily forwards
any potential PDU for that handle disregarding the CreationStatus.
This is problematic, since the channel handling usually runs in its own
thread and as a result, the channel may not be destructed yet, when
receiving such stray PDU.
The PDU may be processed, even though it is not expected to be.

A situation, where this becomes problematic is the AUDIO_PLAYBACK_DVC
channel.
It may be the case, that the client answered the DVC create request
with a negative result, the server may try to close the handle and open
the static channel (RDPSND) instead, but before the server can close the
channel handle, the client actually sends PDUs regarding the format
negotiation.
In this case, the server may unintentionally already set things up,
which was not desired (the DVC is about to be closed anyway).

While this specific situation is hypothetical, since it would depend on
a malicious client, it is still possible to happen, especially since the
server implementation does not invoke the format negotiation, but
FreeRDP does it automatically, as soon as the DVC create request is
sent.

Fix this issue by discarding any data PDUs (DYNVC_DATA_FIRST and
DYNVC_DATA) of channels, that were not opened successfully.
2022-12-31 10:14:17 +01:00
..
cache [cache,pointer] ignore pointer cache index violations 2022-12-06 09:08:12 +01:00
codec [codec,xcrush] follow up to #8529 2022-12-13 15:41:58 +01:00
common [settings] regenerated getter with updated script 2022-12-22 18:50:05 +01:00
core core/server: Ignore data PDUs for DVCs that were not opened successfully 2022-12-31 10:14:17 +01:00
crypto crypto: export getSslMethod utility function 2022-12-23 08:42:45 +01:00
emu Decreased logging verbosity for smartcard emulation 2022-10-13 13:57:11 +02:00
gdi [gfx] moved rdpgfx_get_codec_id_string to utils 2022-12-18 15:14:30 +01:00
locale Fixed Wsign-compare warnings 2022-12-09 15:58:26 +01:00
primitives Fixed some warnings 2022-12-09 15:58:26 +01:00
utils [utils] improve rdpdr packet dump 2022-12-22 15:09:03 +01:00
CMakeLists.txt Fixed various compiler warnings 2022-12-09 15:58:26 +01:00
freerdp.pc.in Fixed freerdp pkg-config file 2022-03-03 11:26:48 +01:00
FreeRDPConfig.cmake.in cleanup cmake exports and pkg-config files 2016-01-12 17:32:33 +01:00