All vulnerabilities
CVE-2026-98969

Linux: net/sched: em_text: reject unterminated algo before autoload

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)No scoreNo FIRST EPSS score in this snapshot yet
Fixed in00bcc303000bac524d62eed054d77372b38ace0fAlso 22182f91c6703af6e9832cffe6d22b381031cb5a, 85e5512369d4fe6e5f2c43712d9f9e01d4ae8437CVE List
Published23 Oct 2026Updated 23 Oct 2026CVE List

What fixes it

  • 00bcc303000bac524d62eed054d77372b38ace0fLinuxCVE List
  • 22182f91c6703af6e9832cffe6d22b381031cb5aLinuxCVE List
  • 85e5512369d4fe6e5f2c43712d9f9e01d4ae8437LinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

In the Linux kernel, the following vulnerability has been resolved:

net/sched: em_text: reject unterminated algo before autoload

This is a follow-up to commit 9c572a83037a ("net/sched: fix potential stack infoleak in em_text_dump()"), which zero-initialised the dump-side struct. Sashiko pointed at a pre-existing bug that exposed the change-side input-validation gap open.

em_text_change() casts the raw netlink attribute payload to struct tcf_em_text and passes conf->algo, a 16-byte array with no enforced NUL terminator, to textsearch_prepare(). On the TS_AUTOLOAD retry textsearch_prepare() calls request_module("ts_%s", algo); vsnprintf() walks %s until it finds a NUL, so an algo[] with no NUL reads past the array into the adjacent struct fields and payload and feeds those bytes to the usermode helper command line. This is an out-of-bounds read and a kernel memory disclosure.

Reject the attribute when no NUL exists within TC_EM_TEXT_ALGOSIZ bytes, matching the check xt_string has had since 3ab720881b6e.

Conditions to recreate the bug:

  • CAP_NET_ADMIN on the target netns (namespace-local via unshare -Urn

is enough)

  • install clsact on an interface, then add a basic filter with one text

ematch whose algo[] is 16 bytes with no NUL (e.g. "A"*16) and pattern_len at least 1

  • the add fails with -ENOENT and the kernel invokes modprobe with a

module name made of "ts_" plus the 16 bytes and the adjacent payload

Text from CVE List

Affected versions 12

  • Linuxaffected: d675c989ed2d4ba23dff615330b04371aea83534 before 00bcc303000bac524d62eed054d77372b38ace0fCVE List
  • Linuxaffected: d675c989ed2d4ba23dff615330b04371aea83534 before 22182f91c6703af6e9832cffe6d22b381031cb5aCVE List
  • Linuxaffected: d675c989ed2d4ba23dff615330b04371aea83534 before 85e5512369d4fe6e5f2c43712d9f9e01d4ae8437CVE List
  • Linuxaffected: d675c989ed2d4ba23dff615330b04371aea83534 before b627c6ba20be20334338229b4820baacb9d96826CVE List
  • Linuxaffected: d675c989ed2d4ba23dff615330b04371aea83534 before c9728fcf2e7fb4a7a8d08ebd9524c3b02ae1a021CVE List
  • Linuxaffected: 2.6.13CVE List
  • Linuxunaffected: all versions before 2.6.13CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.113 through 6.12.*CVE List
  • Linuxunaffected: 6.18.57 through 6.18.*CVE List
  • Linuxunaffected: 7.2.11 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 5