Commit Graph

5374 Commits

Author SHA1 Message Date
Liyi Meng 525be513be chansrv: Make XrdpIme survive reconnects and stop native-client input being eaten
Three fixes in input_ibus.c, found by capturing the IBus session bus while a
native Mac RDP client and a Guacamole (browser) client typed Chinese.

1. Keep the IBus thread alive across client disconnects.
   xrdp_input_unicode_destroy() used to stop the IBus thread and its private
   GMainContext on every disconnect, and unicode_init() started a new pair on
   every reconnect. ibus_bus_new() returns a process-wide singleton whose
   GDBusConnection stays bound to the context that was thread-default when it
   was first created, so a reconnect got the old connection back, bound to a
   context nobody iterates. ibus-daemon's CreateEngine call on our factory was
   never dispatched and every ibus_bus_set_global_engine() timed out ("failed
   to switch global engine to XrdpIme", 15 s each), losing all Unicode input
   until the session was fully logged out. (Same connection name on both
   connects in the bus trace.) destroy() now only restores the user's engine
   and drains the queue on the IBus thread (xrdp_input_reset_cb) and waits,
   bounded, for that; init() takes its existing "already ready" path.

2. Do not re-request XrdpIme while an instance is being created.
   Two characters arriving ~30 us apart each called set_global_engine(): the
   second found the name already XrdpIme but no instance yet, fell through,
   and made ibus destroy the instance under construction and build another
   ("IM enabled / IM disabled / IM enabled"), dropping what was queued for the
   first. A request made within XRDP_INPUT_ENGINE_CREATE_WAIT_US (2 s) is now
   treated as in flight and left alone; an older one is still treated as a
   stale name and re-set.

3. Measure the commit debounce from when the text was queued.
   "Quiet" was measured from the last raw key only. A user who pauses between
   typing the pinyin and confirming it (270 ms in the capture) makes the raw
   keys already quiet when the commit arrives, so it was committed at once and
   the client's cleanup Backspaces, one per leaked key and arriving 1-2 ms
   later, deleted the committed text and kept going into what was there
   before. Quiet is now measured from the later of the last raw key and the
   queue time, so every commit waits at least XRDP_INPUT_COMMIT_QUIET_US and
   any Backspace inside the window extends it (still capped by MAX_WAIT).

Tested against a real xrdp session in the agent-cn image, through guacd with a
script that mimics the native client (raw keys, pause, Unicode commit,
Backspaces after a variable delay): with the old code any delay >= 8 ms lost
the commit ("我是" became "wo"); now delays up to 90 ms pass, 110 ms and up
still fail. A fresh session and a reconnect both commit correctly, and the
"failed to switch global engine" timeouts are gone. Confirmed working with the
native client by hand. Costs every Unicode commit 100 ms of latency.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-19 00:12:39 +00:00
Liyi Meng f35530b523 chansrv: Stop XrdpIme's commit racing the client's own IME cleanup
Microsoft Remote Desktop for Mac was observed to garble Chinese text
typed through its local Pinyin IME: the composed characters would
land with pieces missing or extra characters deleted from the
document. Root cause, confirmed with debug logging plus dbus-monitor
on the live ibus session bus: the client forwards the raw
pre-composition keystrokes over the normal RDP keyboard channel while
composing (these reach XrdpIme's process-key-event handler and, since
it never consumes anything, get typed into the document as literal
ASCII), then once composition finishes sends a compensating burst of
Backspace keystrokes sized to exactly undo them, interleaved with the
final composed text arriving over the separate TS_UNICODE_KEYBOARD_EVENT
side channel. The two channels have no ordering guarantee, so the
side-channel commit could land in the middle of the client's own
backspace cleanup and get partially deleted.

Measured the backspace burst against the leaked raw-character count
across several phrases (23-for-23, 29-for-29) - it's always exactly
right, so this is a pure interleaving race, not a client miscount.
That makes it fixable server-side: xrdp_input_queue_source_prepare/
_check now withhold a queued commit until raw key traffic on the
engine has been quiet for XRDP_INPUT_COMMIT_QUIET_US (100ms), so the
client's own cleanup has time to finish first, capped by
XRDP_INPUT_COMMIT_MAX_WAIT_US (500ms) so back-to-back composition
can't delay a commit indefinitely. This is an empirical mitigation
tuned to observed client behaviour, not a protocol guarantee.

Also fixes two latent data races found while reviewing this code
against the cross-thread invariants already documented at the top of
the file: g_engine and last_input_name are written by the IBus thread
(engine enable/disable, an unexpected daemon disconnect) but were read
and, for last_input_name, also written directly by xrdp_input_enable()
on chansrv's own thread with no synchronization - unlike `bus`, which
already gets this treatment. Both now follow the same
publish/clear-under-state_mutex pattern as `bus`.

Added IBUS-KEY/IBUS-COMMIT debug logging used to diagnose this.

Verified live against a real Microsoft Remote Desktop for Mac client
connected to an xrdp/ibus session: multiple Chinese phrases of varying
length composed and committed cleanly with the debounce in place,
after reliably reproducing the interleaved garbling without it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 13:07:55 +00:00
Liyi Meng 55a4f81083 chansrv: Fix regression from the previous commit breaking Model A entirely
The "don't reclaim a deliberately-chosen engine" guard from the last
commit had a logic bug that broke ordinary Model A composition
completely, not just the edge case it was meant to fix.

ibus_bus_set_global_engine() sets the global engine *name*
synchronously, but the actual engine instance (g_engine) is created
asynchronously afterward. During that brief window, the global engine
name is already "XrdpIme" but g_engine is still NULL - the existing
fast path (name == "XrdpIme" && g_engine != NULL) correctly falls
through in that case, same as always. But the new guard only checked
whether the current name differed from last_input_name, and "XrdpIme"
is *always* different from last_input_name by construction (that's
the name of whatever we switched away from). So every commit that
landed in that async window got misclassified as "a different engine
took over" and silently dropped. Composing even one phrase sends
several characters in quick succession, so this was most of them -
not just the intended edge case.

Fixed by checking name == "XrdpIme" first, independent of g_engine's
readiness, before ever reaching the "is this some other engine"
guard - that window means "still connecting", not "something else
took over".

Verified against the exact failure condition: sent a 9-character
phrase rapid-fire immediately after xrdp_input_unicode_init() (no
settle time), landing correctly as a single unbroken phrase with zero
drops. Also re-ran all four trigger-happy scenarios from the previous
commit, plus a new check sending 5 characters rapid-fire immediately
after a from-original reassertion - all pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 08:22:45 +00:00
Liyi Meng 82b4eb6556 chansrv: Stop reclaiming XrdpIme from a deliberately-chosen engine
xrdp_input_enable() unconditionally reasserted XrdpIme as the global
engine any time it wasn't already active, on the theory that ibus can
silently revert to the user's original engine on its own. That's true,
but the fix was too broad: it also fired whenever the user had
manually switched the session's engine to something else entirely
(e.g. libpinyin, to compose Chinese directly in the remote desktop
rather than via the client's local IME), yanking control away
mid-use. Confirmed happening live: a composition left pending in a
client-side IME and then abandoned got auto-flushed by the OS well
after the fact, silently reclaiming XrdpIme and interrupting an
unrelated libpinyin session already in progress.

Now only reclaims XrdpIme when the current engine is unset or matches
the original one remembered before ever switching away from it
(last_input_name) - the actual "ibus reverted on its own" case this
existed for. Any other named engine is treated as a deliberate choice
and left alone; the stale/deferred commit is dropped instead of
hijacking whatever the user is currently doing.

Also fixes a hang found while testing this: if xrdp_input_unicode_init()
times out waiting for ibus_get_address() (daemon unreachable), it
returned early without resetting ibus_thread_exited back to TRUE, even
though it had just set it FALSE in anticipation of a thread that was
never actually created. No thread means no broadcast ever comes, so
any later xrdp_input_unicode_destroy() or re-init() call blocks on
that condvar forever. Pre-existing in the private-loop rewrite, not
introduced by this change - just surfaced by testing this one harder.

Verified: 20 back-to-back init() calls on a healthy connection still
take the fast path with no false failures; manually switching to a
different engine and then sending a stale commit leaves that engine
untouched and fails the commit; reverting to the original engine still
correctly reasserts XrdpIme; 5 kill/restart cycles still show no
thread leak; an 18-char rapid-fire send against a real focused GTK
entry still lands every character in order.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 08:13:45 +00:00
Liyi Meng a3934cde9a chansrv: Protect bus lifetime across threads, detect stale fast path
Three correctness gaps found in code review of the private-loop
rewrite, all in how chansrv's thread and the IBus thread interact
around `bus`:

- xrdp_input_enable() read the shared `bus` pointer with no
  synchronization at all, despite the IBus thread being free to null
  it out (disconnect, teardown) at any time - a real use-after-free
  risk, not just a formality, since this function actively calls
  methods on it rather than just checking it's non-NULL. Fixed by
  taking a ref under state_mutex before touching it, and using that
  local reference for the rest of the call; bus's creation and
  teardown in xrdp_input_main_loop() now publish/clear the shared
  pointer under the same lock so the ref-under-lock pattern actually
  synchronizes against something.

- xrdp_input_unicode_init()'s fast path trusted ibus_ready without
  re-checking the connection. ibus_ready and connection liveness
  normally change together, but there's a window between the
  underlying socket actually dying and the "disconnected" signal being
  dispatched on the IBus thread. A client that reconnects into that
  window would get a false "unicode input is supported"
  advertisement it could never actually use. Now double-checks
  ibus_bus_is_connected() before taking the fast path.

- That staleness check can't just flip ibus_ready and fall through to
  spawning a new thread - the old one may still be alive and about to
  touch bus/g_engine itself, racing the new thread's own setup. Now
  asks the stale thread to shut down (g_main_loop_quit, safe to call
  cross-thread) and waits on the exit condvar before proceeding, so
  there's never more than one IBus thread alive at a time.

Verified: 20 back-to-back xrdp_input_unicode_init() calls on a healthy
connection all take the fast path correctly (no spurious thread
restarts); 5 kill/restart cycles still show no thread leak; an 18-char
rapid-fire send against a real focused GTK entry still lands every
character in order with zero drops after these changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 06:25:59 +00:00
Liyi Meng 77388dab8a chansrv: Fix deadlock in xrdp_input_enable() from wrong-thread call
XrdpIme never actually became the active engine after the private
main loop rewrite - ibus_bus_set_global_engine() returned FALSE every
time. Confirmed the actual D-Bus error by bypassing the boolean-only
wrapper and calling SetGlobalEngine directly:

  Set global engine failed: Timeout was reached

Root cause: xrdp_input_enable() was being marshaled onto the IBus
thread via g_main_context_invoke(), on the (wrong) theory that it
"must run on the IBus thread" like commit_text does. But
set_global_engine() blocks synchronously waiting for ibus-daemon's
reply, and ibus-daemon can't reply until it finishes instantiating the
engine - which means calling back into our own IBusFactory's
"create-engine" over the same connection. Running xrdp_input_enable()
on the IBus thread left that thread stuck blocked inside its own
synchronous call, unable to service the nested callback ibus-daemon
needed answered before it could reply - a self-deadlock, resolved only
by ibus-daemon's own timeout.

Calling xrdp_input_enable() directly from chansrv's thread instead
(matching the original pre-rewrite code, which did this without
apparent reason but happened to sidestep the deadlock) leaves the IBus
thread free to answer the nested call while chansrv's thread blocks.
GDBusConnection sync calls are documented thread-safe to issue from
any thread, so this doesn't need marshaling despite `bus` otherwise
being owned by the IBus thread.

Verified end-to-end against a real ibus-daemon and a focused GTK entry
widget (not just the D-Bus trace): ibus engine now correctly reports
"XrdpIme" after a send, and 27 characters fired with zero delay
between them - the exact rapid-fire pattern that used to drop most
commits under the old design - landed in order with zero drops and
zero duplicates.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 22:25:29 +00:00
Liyi Meng 2a77f5f3e8 chansrv: Rewrite ibus unicode input around a private main loop
Replace the shared-global-context design with one where chansrv's
thread never touches libibus directly. All IBus objects (bus, engine,
factory, component) are now owned exclusively by a private
GMainContext/GMainLoop created inside the IBus thread; chansrv hands
off unicode codepoints through a thread-safe GAsyncQueue and wakes the
loop, instead of calling ibus_engine_commit_text() from the wrong
thread or relying on ibus_main()/ibus_quit(), which turned out to
operate on a single loop shared by the whole process rather than one
per connection.

Fixes along the way, found by testing against a live ibus-daemon and
a real focused GTK app rather than just reading the diff:

- xrdp_engine_enable()/disable() now take a real reference on g_engine
  (g_object_ref/unref) instead of caching a bare pointer. The old code
  unreffed g_engine on teardown without ever having reffed it - IBusEngine
  derives from GInitiallyUnowned, so that was releasing a reference it
  never owned.
- A custom GSource drains the unicode queue, gated on the engine
  actually existing (engine creation is async once XrdpIme is
  selected), so a character queued before the engine is ready isn't
  lost - it commits as soon as the "enable" signal fires, instead of
  racing a one-shot commit against that async setup.
- ibus_engine_commit_text() releases its IBusText argument itself
  (it's floating, documented behavior for that specific call) - an
  earlier draft of this rewrite added an extra g_object_unref() after
  it, which would have been a double-release.
- bus (and anything else that opens a GDBusConnection) must be created
  after the private GMainContext is pushed as thread-default, not
  before - otherwise its async I/O silently binds to the global
  default context, which nothing here iterates, and signals like
  "disconnected" simply never fire.
- xrdp_input_unicode_init() now blocks on a condvar until the IBus
  thread actually signals ready (or exits), instead of returning
  immediately and hoping the engine shows up in time.
- unicode_init()/destroy() no longer touch bus/g_engine from chansrv's
  own thread while the IBus thread may still be running against them;
  destroy() schedules real teardown on the IBus thread and joins it via
  a condvar before returning.

Known limitation, confirmed empirically rather than assumed: this does
NOT make reconnect-after-daemon-restart (#3230) actually work.
ibus_bus_new() returns a process-wide singleton in this libibus
version - two calls in the same process with no disconnect involved
return the identical pointer - so once its connection dies, every
later call just hands back the same dead object; ibus_bus_is_connected()
on it stays permanently false, confirmed not to be a transient state
via repeated retries with delay. The "disconnected" handler still
tears the thread down cleanly so a later xrdp_input_unicode_init()
fails fast instead of hanging or operating on stale state, but a real
fix would mean bypassing IBusBus for a raw GDBusConnection to
ibus-daemon, which isn't justified given how rarely the daemon
actually restarts mid-session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 22:10:23 +00:00
Liyi Meng 92fdb09959 chansrv: Fix stale engine handling and cross-thread ibus commit
A few follow-on fixes found while testing the ibus reconnect changes
in a live session:

- xrdp_input_unicode_init() failed outright if ibus had no default
  global engine yet at connect time, which is a normal state on a
  fresh session (nothing has chosen one yet), not an error. Since
  nothing else used the return value, this permanently killed unicode
  input for the whole session over a spurious check.

- ibus can disable our engine instance (e.g. on a focus change) while
  leaving the global engine name as "XrdpIme", since those are tracked
  separately. xrdp_input_enable()'s fast path only checked the name,
  so it could skip re-asserting and leave xrdp_input_send_unicode()
  committing text through a disabled g_engine. Clear g_engine on
  disable and require it to be set for the fast path to apply.

- ibus_engine_commit_text() was being called from chansrv's own
  thread, not the thread pumping the glib main loop that owns the
  engine's D-Bus connection (xrdp_input_main_loop). Marshal the actual
  commit through g_main_context_invoke() onto the correct thread.

None of these are the full fix for intermittent dropped commits during
real pinyin input testing - that's still open, with the current lead
being ibus Reset calls interleaved with commit bursts, likely from the
FocusOut/FocusIn churn caused by passing every raw keystroke through
engine_process_key_event_cb. To be continued.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 20:38:20 +00:00
Liyi Meng 38c8db8293 chansrv: Reconnect ibus when the cached connection has gone stale
Fixes #3230. The static `bus` global was only ever checked for
non-NULL, not for whether the underlying connection was still alive.
If ibus disconnected (daemon restart, stale socket) or the initial
connect attempt failed, `bus` was left set to a dead/freed connection,
so every later call to xrdp_input_unicode_init() took the "already
initialized" fast path and operated on it.

- Null out bus/g_engine in the "disconnected" signal handler instead
  of leaving them dangling after g_object_unref().
- Check ibus_bus_is_connected() before trusting a cached bus, and
  tear down + reconnect if it's stale.
- Unref and clear bus on a failed connect attempt instead of leaving
  it set.
- Guard the unrefs in xrdp_input_unicode_destroy() now that bus/
  g_engine can legitimately already be NULL.
2026-08-17 08:59:18 +00:00
Liyi Meng 913ea383d7 Add dev container 2026-08-17 08:58:29 +00:00
matt335672 a02ed62782 Merge pull request #3845 from matt335672/rdpedyc_data_fragments
dechunker: Add support for dynamic virtual channels.
2026-08-14 12:19:49 +01:00
matt335672 a6d80e17ab Code quality: Address Copilot review comments
All accesses to g_drdynvcs[] in chansrv.c have been checked for
unbounded access.
2026-08-14 12:07:48 +01:00
matt335672 f4249b3ca6 chansrv: Use common dynamic dechunker
Addresses CVE-2026-69169

The dynamic channel processing in chansrv is updated to allow
the dechunker to be invoked automatically if the 'data_first' proc
is set to NULL. This mirrors a change made to the xrdp_channel.c.

The processor for the AUDIO_IN channel is updated to take advantage of
this, significantly simplifing the code.
2026-08-14 12:06:20 +01:00
matt335672 77d9b49432 chansrv: Use streams for dynamic channel processing
Change the dynamic channel processing to use streams rather than
a data pointer and a length. This mirrors an earlier commit for
xrdp.

The reason for the change is to make it easier to check for buffer
overflows using standard stream features.
2026-08-12 11:31:47 +01:00
matt335672 63afb676e6 drdynvc: Improve dynamic channel support
The dynamic channel handler in xrdp_channel.c is updated to allow
the procs `data_first` pointer to be NULL. If this is done, the
channel handler performs all the dechunking necessary for the channel,
and only complete data PDUs are passed to procs 'data' callback.

This facility is applied to the dynamic channels supported by xrdp_mm.c.
The incoming callbacks for these channels now provide complete support
for the specification in [MS-RDPEDYC]. The existing channels were
incomplete in these respects:
1) The "Microsoft::Windows::RDS::Graphics" channel handler did not
   support incoming PDUs between 1591 and 1600 bytes. The specification
   calls for these to be sent as a single DATA_FIRST PDU.
2) The "Microsoft::Windows::RDS::DisplayControl" channel handler did
   not support incoming PDUs over 1590 bytes.
2026-08-12 11:31:47 +01:00
matt335672 f745c9152d drdynvc: Change channel processing to use streams
The channel processor in xrdp_channel.c for dynamic streams uses
a data pointer and a length for passing PDUs or PDU fragments. We
replace this with a standard stream pointer, so that the usual
facilities can be used for checking length violcations.
2026-08-12 11:31:47 +01:00
matt335672 e4b0621229 tests: Add tests for dynamic dechunker 2026-08-12 11:19:47 +01:00
matt335672 0a986869cc dechunker: Add handler for Dynamic channels 2026-08-11 15:02:49 +01:00
matt335672 fe850a22c0 Merge pull request #3839 from matt335672/add_dechunker
Add dechunker module
2026-07-28 10:46:27 +01:00
matt335672 3d137431a9 Merge pull request #3837 from the-deniss/fix/trans_force_read_s-bounds-check-uses-wrong-pointer
Fix for trans_force_read_s Bounds Check Uses Wrong Pointer
2026-07-28 10:10:45 +01:00
Denis Skvortsov b36ad7b2d0 Cast to size_t in bounds macros; drop resulting dead check 2026-07-27 15:35:26 +03:00
Denis Skvortsov e4f4364c9b Remove check to avoid -Wtype-limits 2026-07-25 18:47:19 +03:00
Denis Skvortsov 5ae11e2a37 Harden stream bounds checks against pointer-arithmetic overflow 2026-07-25 17:46:28 +03:00
matt335672 2e8a4a82e1 test suite: Add way to run individual common tests 2026-07-23 19:20:28 +01:00
matt335672 3ef2f8830a Dechunker: Add tests 2026-07-23 19:20:28 +01:00
matt335672 be95ba3017 dechunker: Create separate module for dechunking
The code in xrdp_channel.c to handle dechunking on a virtual channel is
moved to a separate module to allow for better sharing of logic.
2026-07-23 19:20:28 +01:00
Denis Skvortsov a2d130bc5b Fix for trans_force_read_s Bounds Check Uses Wrong Pointer 2026-07-22 12:03:58 +03:00
matt335672 de284747ae Merge pull request #3836 from matt335672/update_gfx_state_machine
code quality: Forward-port code review comments
2026-07-20 14:14:39 +01:00
matt335672 a5975210f0 code quality: Forward-port code comments
Minor change to the GFX resize state machine following
review comments on backport to v0.10:

https://github.com/neutrinolabs/xrdp/pull/3834

There are no functional changes as a result of this commit

(cherry picked from commit a2fd7b7ef7c7f7c67b429634d2a1749492198cf2)
2026-07-20 11:35:32 +01:00
matt335672 8812646d0f Merge pull request #3829 from the-deniss/fix/dynvc-multi-chunk-reassembly-logic-defects
Fix for DYNVC Multi-Chunk Reassembly Logic Defects
2026-07-16 10:47:51 +01:00
matt335672 c73c827e5a compilation: Fix errors
Fix compilation issues with b824c93b86
2026-07-16 10:41:40 +01:00
Denis Skvortsov b824c93b86 Fix for DYNVC Multi-Chunk Reassembly Logic Defects 2026-07-15 17:24:30 +03:00
metalefty 3af31df3fc Merge commit from fork
CVE-2026-41252: lib_palette_update Heap Buffer Overflow
2026-07-02 17:33:45 +09:00
metalefty bb0c5984c2 Merge commit from fork
CVE-2026-54538: Pre-auth infinite loop in TS_SHARECONTROLHEADER
2026-07-02 17:30:17 +09:00
metalefty 5642decb5f Merge commit from fork
CVE-2026-41521: lib_framebuffer_update int overflow
2026-07-02 17:24:29 +09:00
metalefty 4bf38e3d8e Merge commit from fork
CVE-2026-44178: Heap overflow in xrdp->chansrv msgs
2026-07-02 17:22:04 +09:00
metalefty 2c2eff3b59 Merge commit from fork
CVE-2026-55639: OOB read in GCC Conference Create Request
2026-07-02 17:09:54 +09:00
metalefty 0aae834802 Merge commit from fork
CVE-2026-55645: OOB read in Client Control PDU processing
2026-07-02 16:57:51 +09:00
metalefty 0af3b1ecf8 Merge commit from fork
CVE-2026-44978: Check FIPS PDU padding value before use
2026-07-01 17:56:20 +09:00
metalefty b3e1a5f17d Merge commit from fork
CVE-2026-55238: Possible OOB reads in capability processing
2026-07-01 17:45:49 +09:00
metalefty 9627823a1b Merge commit from fork
CVE-2026-55626: Disable Xvnc TCP listning in UDS mode
2026-07-01 08:51:16 +09:00
Koichiro Iwao f76a30b577 CVE-2026-55626: Disable Xvnc TCP listning in UDS mode 2026-06-24 08:42:09 +09:00
matt335672 492bd7ed4d Merge pull request #3813 from matt335672/update_librfxcodec
librfxcodec: Update to latest version in devel
2026-06-23 09:45:17 +01:00
matt335672 fea7f56280 librfxcodec: Update to latest version in devel
Adds these changes to the librfxcodec in devel
- 637ffa28 remove some noisy logging on startup
- 1b6c8f5a fixed constVariablePointer Cppcheck warnings
- 0f10c695 always use if-else chain for RFX_USE_ACCEL_* preprocessor checks
- 3c0d7c49 rfxencode_rgb_to_yuv.c: removed some unnecessary return values
2026-06-23 09:27:21 +01:00
matt335672 21d38d0c1e Merge pull request #3811 from matt335672/fix_cve_2026_42218_regression
sesexec: Fix CVE-2026-42218 regression
2026-06-17 10:08:51 +01:00
matt335672 d4d20fc82d sesexec: Fix CVE-2026-42218 regression
cppcheck has picked up on the use of an unitialised variable in
the implementation of the fix for CVE-2026-42218
2026-06-17 09:54:06 +01:00
matt335672 6cb996e355 Merge pull request #3698 from lcniel/enable_token_with_auto_logon
Allow username-affixed token to be used with INFO_AUTOLOGON flag set in client
2026-06-17 09:36:43 +01:00
matt335672 4aa8bdf1ea CVE-2026-55238: Possible OOB reads in capability processing
Add missing per-capability length checks in the RDP Confirm Active PDU
parser, and abort the parser if a buffer length violation is discovered.
2026-06-17 09:22:05 +01:00
matt335672 9d16ec4e75 CVE-2026-55639: OOB read in GCC Conference Create Request 2026-06-17 09:18:20 +01:00
matt335672 b1edb60c1d CVE-2026-55645: OOB read in Client Control PDU processing 2026-06-17 09:14:18 +01:00