8000 libxi 1.8.4, libxtst 1.2.6: X.Org client-lib advisory (11 CVEs) by bryan-minimal · Pull Request #920 · gominimal/pkgs · GitHub
[go: up one dir, main page]

Skip to content

libxi 1.8.4, libxtst 1.2.6: X.Org client-lib advisory (11 CVEs) - #920

Closed
bryan-minimal wants to merge 1 commit into
mainfrom
bryan/xorg-libxi-libxtst-cves-20261017
Closed

bryan-minimal wants to merge 1 commit into
mainfrom
bryan/xorg-libxi-libxtst-cves-20261017

Conversation

@bryan-minimal
Copy link
Copy Markdown
Member

libxi 1.8.3 → 1.8.4, libxtst 1.2.5 → 1.2.6

Manual bump: the updater can't handle these two packages (see Why manual below). Companion to #917 (libx11 1.8.14 + libxrender 0.9.13, cut by the updater), from the same X.Org advisory.

Package Old New SHA256 (.tar.xz)
libxi 1.8.3 1.8.4 ddd6057b89a91903bc2f884d55c8467440906945e482c36547260dff28661afc
libxtst 1.2.5 1.2.6 f94f0b37c07d80d877f3eda2c2405cc7e62aa9842f6310354aa349e3d66a4fe5

Both SHA256 and SHA512 match the signed release announcements (libXi 1.8.4, libXtst 1.2.6). The new configure.ac dependency lists (x11 xext xfixes inputproto / x11 xext xi recordproto) match the deps the recipes already declare.

Security

Clears 11 CVEs from the X.Org client-library security advisory of 2026-10-16. NVD has not analysed them yet (no CPEs), so the scanner can't list them. Also, neither package emits a vuln query at all today (both are on the updater's "UNSCANNED" list).

libxi 1.8.3 → 1.8.4 (9 CVEs)

  • CVE-2026-93541 (6.5): OOB read in XQueryDeviceState(). A ValuatorClass num_valuators value is trusted without checking it against the class length.
  • CVE-2026-93542 (6.5): OOB read in XI2 class parsing (size_classes()/copy_classes()) via XIQueryDevice replies or XI_DeviceChanged events with inconsistent class lengths.
  • CVE-2026-93543 (5.9): OOB read in the XI2 class parser. Overlong num_classes, a zero or oversized per-class length, or button/key counts larger than the class bytes.
  • CVE-2026-93544 (6.5): OOB read in XIQueryDevice reply parsing. Server-supplied length/num_buttons/num_keycodes are used unchecked.
  • CVE-2026-93545 (5.4): OOB read in XListInputDevices(). A device-name length byte exceeding the remaining reply makes memcpy() read past the buffer.
  • CVE-2026-94281 (5.4): OOB read in XListInputDevices() class parsing. SizeClassInfo() never decrements the remaining size, so individually valid lengths can cumulatively run past the buffer.
  • CVE-2026-94282 (6.1): OOB read in XI2 enter/leave/focus cookie conversion. An oversized buttons_len makes wireToEnterLeave() copy past the event.
  • CVE-2026-109089: heap buffer overflow in XGetDeviceControl(). A control-type mismatch on a DEVICE_RESOLUTION reply leaves a tiny allocation while an unbounded valuator list is filled into it.
  • CVE-2026-109090: heap buffer overflow in XGetDeviceControl(). DEVICE_ENABLE is allocated at the wire length (8 bytes) but filled with a full XDeviceEnableState (12 to 16 bytes).

libxtst 1.2.5 → 1.2.6 (2 CVEs)

  • CVE-2026-94286 (7.1 HIGH): OOB read in the RECORD reply parser. An element's datum_bytes exceeding the reply hands the callback a pointer/length that runs past the buffer, so the client can crash or leak adjacent memory.
  • CVE-2026-109088: endless loop in parse_reply_call_callback(). A zero-progress RECORD EnableContext element hangs XRecordEnableContext() or livelocks Xlib.

⚠ Why manual: mirror upload needed before merge

The source URL here is the upstream https://xorg.freedesktop.org/archive/individual/lib/… archive. It is not the gs://minimal-staging-archives mirror that every other X lib uses. The updater normally mirrors on PR creation, but it can't see these two packages:

  • update --stacked … libxi=1.8.4 libxtst=1.2.6 silently dropped both pins (total=2 skipped=0, no warning).
  • check --package libxi reports no upstream source found. libxi and libxtst have no provenance and no entry in pkgmgr-rs src/upstream_sources.rs's X.Org override table. The runner also sets PKGMGR_SKIP_REPOLOGY=true, so nothing resolves them. libx11/libxrender/libxext all have override entries; libxi/libxtst (and libxt) were added for chromium-bin after that table was written.

Before merge: upload libXi-1.8.4.tar.xz and libXtst-1.2.6.tar.xz to gs://minimal-staging-archives/ (same SHA256 as above) and switch both urls back to gs://minimal-staging-archives/lib…-%{version}.tar.xz. Alternatively, merge as-is if an https source is acceptable for these two. The real fix is two override entries in pkgmgr-rs, so the nightly can track and mirror them from now on.

Blast radius

Direct dependents. Both packages are pulled into the JVM bootstrap ladder:

  • libxi (21): libxtst, raylib, icedtea-7, icedtea-8, openjdk-9 … openjdk-25
  • libxtst (21): chromium-bin, chromium-headless-shell-bin, icedtea-7, icedtea-8, openjdk-9 … openjdk-25

Merging this together with #917 (or right after it) avoids rebuilding the ladder and chromium twice.

🤖 Generated with Claude Code

…ry 2026-10-16)

libxi 1.8.4 fixes CVE-2026-93541..93545, CVE-2026-94281, CVE-2026-94282,
CVE-2026-109089, CVE-2026-109090. libxtst 1.2.6 fixes CVE-2026-94286 and
CVE-2026-109088. Advisory:
https://lists.x.org/archives/xorg-announce/2026-October/003752.html

Source URL points at the upstream xorg.freedesktop.org archive instead of
the gs://minimal-staging-archives mirror: the pkgmgr updater cannot resolve
these two packages (no upstream-source override), so it could not mirror
them. sha256 matches the signed release announcements.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bryan-minimal
bryan-minimal requested a review from a team as a code owner October 17, 2026 19:05
@coderabbitai
coderabbitai Bot commented Oct 17, 2026
Copy link
Copy Markdown
Contributor

Warning

Review limit reached

  • Run on-demand review

This review includes 2 billable files and costs up to $0.50.

  • Ask an admin to make reviews automatic

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

Or wait 26 minutes for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available. Your 55 included PR review attempts over the past 7 days set your current allowance at 2 reviews per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: gominimal/pkgs/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: cb1c13cf-9dab-459b-a8f3-47e449cccbe4
📥 Commits

Reviewing files that changed from the base of the PR and between 5a26fc2 and 44d739e.

📒 Files selected for processing: 2
  • packages/libxi/build.ncl
  • packages/libxtst/build.ncl
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@bryan-minimal
Copy link
Copy Markdown
Member Author

Superseded: X.org lib version tracking (minimal-supply-chain#520, pkgmgr-rs#997) is now deployed, so the updater can produce this bump itself, with the tarballs mirrored to gs://minimal-staging-archives instead of pointing at xorg.freedesktop.org. Replacement PR follows from the updater.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0