Skip to content

Conversation

@bmastbergen
Copy link
Collaborator

Commits

commit 1b6f474b7136f90180c9e0d6515224118da82ef1
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Wed Jan 14 10:19:13 2026 -0500

    usb: dwc3: Fix race condition between concurrent dwc3_remove_requests() call paths

    jira VULN-170020
    cve CVE-2025-68287
    commit-author Manish Nagar <manish.nagar@oss.qualcomm.com>
    commit e4037689a366743c4233966f0e74bc455820d316
commit 74b36d76de2babbd8ef1851100686b809a3cfb31
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Wed Jan 14 10:18:34 2026 -0500

    tls: wait for pending async decryptions if tls_strp_msg_hold fails

    jira VULN-162729
    cve CVE-2025-40176
    commit-author Sabrina Dubroca <sd@queasysnail.net>
    commit b8a6ff84abbcbbc445463de58704686011edc8e1
commit fb594eab5076dff85bf2a4f1f3c253361d9dcdbf
Author: Brett Mastbergen <bmastbergen@ciq.com>
Date:   Wed Jan 14 10:14:07 2026 -0500

    sctp: detect and prevent references to a freed transport in sendmsg

    jira VULN-162439
    cve CVE-2025-23142
    commit-author Ricardo Cañuelo Navarro <rcn@igalia.com>
    commit f1a69a940de58b16e8249dff26f74c8cc59b32be

Build Log

  CLEAN   scripts/mod
  CLEAN   scripts/selinux/genheaders
  CLEAN   scripts/selinux/mdp
  CLEAN   scripts
  CLEAN   include/config include/generated arch/x86/include/generated .config .config.old certs/signing_key.pem certs/signing_key.x509 certs/x509.genkey
[TIMER]{MRPROPER}: 24s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7"
Making olddefconfig
--
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Starting Build
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
--
  LD [M]  sound/x86/snd-hdmi-lpe-audio.ko
  LD [M]  sound/xen/snd_xen_front.ko
  BTF [M] sound/virtio/virtio_snd.ko
  BTF [M] sound/x86/snd-hdmi-lpe-audio.ko
  BTF [M] sound/xen/snd_xen_front.ko
[TIMER]{BUILD}: 2656s
Making Modules
  INSTALL /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/arch/x86/crypto/blowfish-x86_64.ko
  INSTALL /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/arch/x86/crypto/camellia-aesni-avx-x86_64.ko
  INSTALL /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/arch/x86/crypto/blake2s-x86_64.ko
  INSTALL /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/arch/x86/crypto/cast5-avx-x86_64.ko
--
  SIGN    /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/sound/usb/snd-usb-audio.ko
  SIGN    /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  SIGN    /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+/kernel/sound/virtio/virtio_snd.ko
  DEPMOD  /lib/modules/5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+
[TIMER]{MODULES}: 13s
Making Install
sh ./arch/x86/boot/install.sh 5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+ \
	arch/x86/boot/bzImage System.map "/boot"
[TIMER]{INSTALL}: 125s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+ and Index to 2
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 24s
[TIMER]{BUILD}: 2656s
[TIMER]{MODULES}: 13s
[TIMER]{INSTALL}: 125s
[TIMER]{TOTAL} 2841s
Rebooting in 10 seconds

Testing

selftest-5.14.0-570.58.1.el9_6.x86_64-1.log

selftest-5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+-1.log

brett@lycia ~/ciq/many-96-vulns-2026-01-14
 % grep ^ok selftest-5.14.0-570.58.1.el9_6.x86_64-1.log | wc -l
386
brett@lycia ~/ciq/many-96-vulns-2026-01-14
 % grep ^ok selftest-5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+-1.log | wc -l
390
brett@lycia ~/ciq/many-96-vulns-2026-01-14
 % grep ok <(diff -adU0 <(grep ^ok selftest-5.14.0-570.58.1.el9_6.x86_64-1.log | sort -h) <(grep ^ok selftest-5.14.0-bmastbergen_ciqlts9_6_many-vulns-2026-01-14-1b6f474b7+-1.log | sort -h))
+ok 10 selftests: netfilter: nft_queue.sh
+ok 10 selftests: net: test_bpf.sh
-ok 1 selftests: livepatch: test-livepatch.sh # SKIP
+ok 1 selftests: livepatch: test-livepatch.sh
-ok 1 selftests: zram: zram.sh # SKIP
+ok 1 selftests: zram: zram.sh
-ok 2 selftests: livepatch: test-callbacks.sh # SKIP
+ok 2 selftests: livepatch: test-callbacks.sh
+ok 33 selftests: net: l2tp.sh
-ok 3 selftests: livepatch: test-shadow-vars.sh # SKIP
+ok 3 selftests: livepatch: test-shadow-vars.sh
-ok 45 selftests: net: txtimestamp.sh
-ok 4 selftests: livepatch: test-state.sh # SKIP
+ok 4 selftests: livepatch: test-state.sh
+ok 58 selftests: net: nl_netdev.py
-ok 5 selftests: livepatch: test-ftrace.sh # SKIP
+ok 5 selftests: livepatch: test-ftrace.sh
+ok 5 selftests: netfilter: conntrack_icmp_related.sh
-ok 6 selftests: livepatch: test-sysfs.sh # SKIP
+ok 6 selftests: livepatch: test-sysfs.sh
-ok 7 selftests: livepatch: test-syscall.sh # SKIP
+ok 7 selftests: livepatch: test-syscall.sh
brett@lycia ~/ciq/many-96-vulns-2026-01-14
 %

jira VULN-162439
cve CVE-2025-23142
commit-author Ricardo Cañuelo Navarro <rcn@igalia.com>
commit f1a69a9

sctp_sendmsg() re-uses associations and transports when possible by
doing a lookup based on the socket endpoint and the message destination
address, and then sctp_sendmsg_to_asoc() sets the selected transport in
all the message chunks to be sent.

There's a possible race condition if another thread triggers the removal
of that selected transport, for instance, by explicitly unbinding an
address with setsockopt(SCTP_SOCKOPT_BINDX_REM), after the chunks have
been set up and before the message is sent. This can happen if the send
buffer is full, during the period when the sender thread temporarily
releases the socket lock in sctp_wait_for_sndbuf().

This causes the access to the transport data in
sctp_outq_select_transport(), when the association outqueue is flushed,
to result in a use-after-free read.

This change avoids this scenario by having sctp_transport_free() signal
the freeing of the transport, tagging it as "dead". In order to do this,
the patch restores the "dead" bit in struct sctp_transport, which was
removed in
commit 47faa1e ("sctp: remove the dead field of sctp_transport").

Then, in the scenario where the sender thread has released the socket
lock in sctp_wait_for_sndbuf(), the bit is checked again after
re-acquiring the socket lock to detect the deletion. This is done while
holding a reference to the transport to prevent it from being freed in
the process.

If the transport was deleted while the socket lock was relinquished,
sctp_sendmsg_to_asoc() will return -EAGAIN to let userspace retry the
send.

The bug was found by a private syzbot instance (see the error report [1]
and the C reproducer that triggers it [2]).

Link: https://people.igalia.com/rcn/kernel_logs/20250402__KASAN_slab-use-after-free_Read_in_sctp_outq_select_transport.txt [1]
Link: https://people.igalia.com/rcn/kernel_logs/20250402__KASAN_slab-use-after-free_Read_in_sctp_outq_select_transport__repro.c [2]
	Cc: stable@vger.kernel.org
Fixes: df132ef ("sctp: clear the transport of some out_chunk_list chunks in sctp_assoc_rm_peer")
	Suggested-by: Xin Long <lucien.xin@gmail.com>
	Signed-off-by: Ricardo Cañuelo Navarro <rcn@igalia.com>
	Acked-by: Xin Long <lucien.xin@gmail.com>
Link: https://patch.msgid.link/20250404-kasan_slab-use-after-free_read_in_sctp_outq_select_transport__20250404-v1-1-5ce4a0b78ef2@igalia.com
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>

(cherry picked from commit f1a69a9)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
jira VULN-162729
cve CVE-2025-40176
commit-author Sabrina Dubroca <sd@queasysnail.net>
commit b8a6ff8

Async decryption calls tls_strp_msg_hold to create a clone of the
input skb to hold references to the memory it uses. If we fail to
allocate that clone, proceeding with async decryption can lead to
various issues (UAF on the skb, writing into userspace memory after
the recv() call has returned).

In this case, wait for all pending decryption requests.

Fixes: 84c61fe ("tls: rx: do not use the standard strparser")
	Reported-by: Jann Horn <jannh@google.com>
	Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Link: https://patch.msgid.link/b9fe61dcc07dab15da9b35cf4c7d86382a98caf2.1760432043.git.sd@queasysnail.net
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit b8a6ff8)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
…() call paths

jira VULN-170020
cve CVE-2025-68287
commit-author Manish Nagar <manish.nagar@oss.qualcomm.com>
commit e403768

This patch addresses a race condition caused by unsynchronized
execution of multiple call paths invoking `dwc3_remove_requests()`,
leading to premature freeing of USB requests and subsequent crashes.

Three distinct execution paths interact with `dwc3_remove_requests()`:
Path 1:
Triggered via `dwc3_gadget_reset_interrupt()` during USB reset
handling. The call stack includes:
- `dwc3_ep0_reset_state()`
- `dwc3_ep0_stall_and_restart()`
- `dwc3_ep0_out_start()`
- `dwc3_remove_requests()`
- `dwc3_gadget_del_and_unmap_request()`

Path 2:
Also initiated from `dwc3_gadget_reset_interrupt()`, but through
`dwc3_stop_active_transfers()`. The call stack includes:
- `dwc3_stop_active_transfers()`
- `dwc3_remove_requests()`
- `dwc3_gadget_del_and_unmap_request()`

Path 3:
Occurs independently during `adb root` execution, which triggers
USB function unbind and bind operations. The sequence includes:
- `gserial_disconnect()`
- `usb_ep_disable()`
- `dwc3_gadget_ep_disable()`
- `dwc3_remove_requests()` with `-ESHUTDOWN` status

Path 3 operates asynchronously and lacks synchronization with Paths
1 and 2. When Path 3 completes, it disables endpoints and frees 'out'
requests. If Paths 1 or 2 are still processing these requests,
accessing freed memory leads to a crash due to use-after-free conditions.

To fix this added check for request completion and skip processing
if already completed and added the request status for ep0 while queue.

Fixes: 72246da ("usb: Introduce DesignWare USB3 DRD Driver")
	Cc: stable <stable@kernel.org>
	Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
	Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
	Signed-off-by: Manish Nagar <manish.nagar@oss.qualcomm.com>
Link: https://patch.msgid.link/20251120074435.1983091-1-manish.nagar@oss.qualcomm.com
	Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit e403768)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
@github-actions
Copy link

🤖 Validation Checks In Progress Workflow run: https://github.com/ctrliq/kernel-src-tree/actions/runs/21042162117

@github-actions
Copy link

Validation checks completed successfully View full results: https://github.com/ctrliq/kernel-src-tree/actions/runs/21042162117

@bmastbergen bmastbergen requested a review from a team January 15, 2026 18:38
Copy link
Collaborator

@PlaidCat PlaidCat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@bmastbergen bmastbergen merged commit ad3a45b into ciqlts9_6 Jan 16, 2026
5 checks passed
@bmastbergen bmastbergen deleted the {bmastbergen}_ciqlts9_6/many-vulns-2026-01-14 branch January 16, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants