Nixpkgs security tracker

Login with GitHub

Dismissed suggestions

These automatic suggestions were dismissed after initial triaging.

to select a suggestion for revision.

View:
Compact
Detailed
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ALSA: usx2y: us144mkii: fix work UAF on disconnect

In the Linux kernel, the following vulnerability has been resolved: ALSA: usx2y: us144mkii: fix work UAF on disconnect tascam_disconnect() cancels capture_work and midi_in_work before usb_kill_anchored_urbs() kills the capture/MIDI-in URBs. Those URBs self-resubmit, and their completion handlers reschedule the work. A URB that completes in the small window between cancel_work_sync() and usb_kill_anchored_urbs() therefore re-arms the work after its only cancel. Nothing cancels it again before snd_card_free() frees the card-private tascam structure, so the work handler then runs on freed memory. Kill the anchored URBs before cancelling the work; once the work is cancelled no remaining URB can complete to re-arm it.

Affected products

Linux
  • <6.18
  • =<6.18.*
  • <27161c68d5e78807c9d897db222a775b298d05fd
  • ==6.18
  • <147996e7e7c9e8339c0e04f6fa7ccb3e4d448ff7
  • =<7.1.*
  • <c071df05bcda0e47aac581d4b564b2bebcb1ff60
  • =<*
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
crypto: qat - validate RSA CRT component lengths

In the Linux kernel, the following vulnerability has been resolved: crypto: qat - validate RSA CRT component lengths The generic RSA key parser (rsa_helper.c) bounds each CRT component (p, q, dp, dq, qinv) by the modulus size n_sz, but qat_rsa_setkey_crt() allocates half-size DMA buffers (key_sz / 2) and right-aligns each component with: memcpy(dst + half_key_sz - len, src, len) When a CRT component is larger than half_key_sz the subtraction underflows and memcpy writes past the DMA buffer, causing memory corruption. Add a len > half_key_sz check next to the existing !len check for each of the five CRT components so the driver falls back to the non-CRT path instead of writing out of bounds.

Affected products

Linux
  • =<6.18.*
  • =<6.12.*
  • <c34369473bfe92a0b46ec78d6358e30341c7f481
  • =<7.1.*
  • <500319830d76911c120dc0b9605f8c16d7702844
  • <3d61a214fdcda41f1ebfabbb483404032a7b4d91
  • =<6.1.*
  • =<*
  • =<6.6.*
  • <1002719d13072a5e4be1e993aa61dffb4a604e82
  • ==4.8
  • =<5.15.*
  • <6fb62b767f3e27661e8f8d2f7b85f4e098fcdb1a
  • <ce42224487c504aee4b7ff3a7342e7b4d7e28cc9
  • <b3ac78756588059729b9195fcc9f4b37d54057a5
  • <6d99c5fadd2df488103f64d6475b63ba6852202b
  • =<5.10.*
  • <4.8
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
USB: misc: uss720: unregister parport on probe failure

In the Linux kernel, the following vulnerability has been resolved: USB: misc: uss720: unregister parport on probe failure uss720_probe() registers a parport before reading the 1284 register used to detect unsupported Belkin F5U002 adapters. If get_1284_register() fails, the error path drops the driver private data and the USB device reference, but leaves the parport device registered. Leaving the port registered is more than a private allocation leak: parport_register_port() has already reserved a parport number and registered the parport bus device, while pp->private_data still points at the private data that the common error path is about to release. Undo the pre-announce registration in the get_1284_register() failure branch before jumping to the common private-data cleanup path. Clear priv->pp first, matching the disconnect path and avoiding a stale pointer in the private data. This issue was identified during our ongoing static-analysis research while reviewing kernel code.

Affected products

Linux
  • <5.10.261
  • ==02d13616ca30014ed96302e51a5b0e17664e58bc
  • ==489d77fbd66375972a380d207f7eb39b00c4a67b
  • <48dd0b2ec9f2e97c486eb68cd0a64b25c1c3df3e
  • =<7.1.*
  • =<6.1.*
  • <6bbb98bec71b577fda4f4b48f7aea5874b04a576
  • =<5.15.*
  • ==6.10
  • =<5.10.*
  • <6.10
  • <5.15.212
  • <1712fd71a5aaf81e47c747f180535fa963ad7830
  • <4.20
  • <6.10
  • <0b3073f40cc9f95d5ff0037eb0a06f5c1725a7ea
  • <93563243377f8e9b46cc94d9c4f06533dd31b141
  • ==dff3b01e91a3df93063b03d0f8dd5c40546687ec
  • <6.6.145
  • =<6.6.*
  • <729b68a5bad71220ae0914c8bdab9488ad5be6c8
  • <5.5
  • <5e62d7857fd51b908b8371062ee839739a086bbe
  • <6.1.178
  • =<6.18.*
  • =<6.12.*
  • <b4ecbdc4f8830f5586c4a5cfc384c00f20f8f8b3
  • =<*
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
tracing: Fix NULL pointer dereference in func_set_flag()

In the Linux kernel, the following vulnerability has been resolved: tracing: Fix NULL pointer dereference in func_set_flag() func_set_flag() dereferences tr->current_trace_flags before verifying that the current tracer is actually the function tracer. When the active tracer has been switched away from "function" (e.g., to "wakeup_rt"), tr->current_trace_flags can be NULL, leading to a NULL pointer dereference and kernel crash. The call chain that triggers this is: trace_options_write() -> __set_tracer_option() -> trace->set_flag() /* func_set_flag */ In func_set_flag(), the first operation is: if (!!set == !!(tr->current_trace_flags->val & bit)) This dereferences tr->current_trace_flags unconditionally. The safety check that guards against a non-function tracer: if (tr->current_trace != &function_trace) return 0; is placed *after* the dereference, which is too late. This was observed with the following crash dump: BUG: unable to handle page fault at 0000000000000000 RIP: func_set_flag+0xd Call Trace: __set_tracer_option+0x27 trace_options_write+0x75 vfs_write+0x12a ksys_write+0x66 do_syscall_64+0x5b RIP: ffffffff914c973d RSP: ff67ec88b01dfdf0 RFLAGS: 00010202 RAX: 0000000000000000 RBX: ff3a826e80354580 RCX: 0000000000000001 RDX: 0000000000000001 RSI: 0000000000000000 RDI: ffffffff93918080 The disassembly confirms the fault: func_set_flag+0: mov 0x1f08(%rdi), %rax ; RAX = tr->current_trace_flags = NULL func_set_flag+13: mov (%rax), %eax ; page fault: dereference NULL At the time of the crash: tr->current_trace_flags = 0x0 (NULL) tr->current_trace = wakeup_rt_tracer (not function_trace) The scenario is that a process opens a function tracer option file (such as "func_stack_trace"), then the current tracer is switched to another tracer (e.g., "wakeup_rt"), which sets current_trace_flags to NULL. When the process subsequently writes to the option file, func_set_flag() is invoked and crashes on the NULL dereference. Fix this by moving the current_trace check before the current_trace_flags dereference, so that func_set_flag() returns early when the function tracer is not active.

Affected products

Linux
  • ==6.19
  • =<7.1.*
  • =<*
  • <6.19
  • <69f17ac132a38974cf1defb480cef6b79d1ab768
  • <c3e94604675e3db186111b8942650d86577df9b0
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
writeback: fix race between cgroup_writeback_umount() and inode_switch_wbs()

In the Linux kernel, the following vulnerability has been resolved: writeback: fix race between cgroup_writeback_umount() and inode_switch_wbs() When a container exits, the following BUG_ON() is occasionally triggered: ================================================================== VFS: Busy inodes after unmount of sdb (ext4) ------------[ cut here ]------------ kernel BUG at fs/super.c:695! CPU: 3 PID: 6 Comm: containerd-shim Tainted: G OE K 6.6 #1 pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : generic_shutdown_super+0xf0/0x100 lr : generic_shutdown_super+0xf0/0x100 Call trace: generic_shutdown_super+0xf0/0x100 kill_block_super+0x20/0x48 ext4_kill_sb+0x28/0x60 deactivate_locked_super+0x54/0x130 deactivate_super+0x84/0xa0 cleanup_mnt+0xa4/0x140 __cleanup_mnt+0x18/0x28 task_work_run+0x78/0xe0 do_notify_resume+0x204/0x240 ================================================================== The root cause is a race between cgroup_writeback_umount() and inode_switch_wbs()/cleanup_offline_cgwb(). There is a window between inode_prepare_wbs_switch() returning true and the subsequent wb_queue_isw() call. Following is the process that triggers the issue: CPU A (umount) | CPU B (writeback) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inode_switch_wbs/cleanup_offline_cgwb atomic_inc(&isw_nr_in_flight) inode_prepare_wbs_switch -> passes SB_ACTIVE check __iget(inode) generic_shutdown_super sb->s_flags &= ~SB_ACTIVE cgroup_writeback_umount(sb) smp_mb() atomic_read(&isw_nr_in_flight) rcu_barrier() -> no pending RCU callbacks flush_workqueue(isw_wq) -> nothing queued, returns evict_inodes(sb) -> Inode skipped as isw still holds a ref. sop->put_super(sb) /* destroys percpu counters */ -> VFS: Busy inodes after unmount! wb_queue_isw() queue_work(isw_wq, ...) /* later in work function */ inode_switch_wbs_work_fn process_inode_switch_wbs iput() -> evict percpu_counter_dec() // UAF! Fix this by extending the RCU read-side critical section in inode_switch_wbs() and cleanup_offline_cgwb() to cover from inode_prepare_wbs_switch() through wb_queue_isw(). Since there is no sleep in this window, rcu_read_lock() can be used. Then add a synchronize_rcu() in cgroup_writeback_umount() before the existing rcu_barrier(), so that all in-flight switchers that have passed the SB_ACTIVE check have completed queue_work() before flush_workqueue() is called. The existing rcu_barrier() is intentionally retained so this fix can be backported unchanged to stable kernels (5.10.y, 6.6.y, ...) that still queue switches via queue_rcu_work(). It is a no-op on current mainline (since commit e1b849cfa6b6 ("writeback: Avoid contention on wb->list_lock when switching inodes")) and is removed in a follow-up patch.

Affected products

Linux
  • <c923cc3cb5cd8945ceaf08252754110643446593
  • =<6.18.*
  • <5c3265f3252b2ee50707adaaa3f9bd0df3df72de
  • <685fc15a410885b6d4dee64de0dce721b9428b12
  • <4.5
  • =<6.12.*
  • <cba38ec4cbd3a7b8b942a8d52531a05be8a9ff0d
  • =<7.1.*
  • ==4.5
  • =<6.1.*
  • <3c9c9648f77e4d14e50676bc51c2174ba9c8d361
  • =<6.6.*
  • ==c5cbbec54fe71c4de2d34f8c0ec8fbfdd7f17339
  • =<*
  • <4.5
  • <53eeaf4d63068dbc7708b0c7adb20151c812feca
  • =<5.10.*
  • <087d5b8b501c570f84bf655164e6698c3ce146e0
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
crypto: krb5 - filter out async aead implementations at alloc

In the Linux kernel, the following vulnerability has been resolved: crypto: krb5 - filter out async aead implementations at alloc krb5_aead_encrypt(), krb5_aead_decrypt() in rfc3961_simplified.c and rfc8009_encrypt(), rfc8009_decrypt() in rfc8009_aes2.c set a NULL completion callback and treat any negative return from crypto_aead_{encrypt,decrypt}() as terminal, falling through to kfree_sensitive(buffer). When the encrypt_name resolves to an async AEAD instance the request returns -EINPROGRESS, the buffer is freed while the backend's worker still holds a pointer, and the worker dereferences the freed slab on completion. KASAN report under UML+SLUB with a synthetic async aead backend bound to krb5->encrypt_name: BUG: KASAN: slab-use-after-free in t5_stub_complete+0x7d/0xc7 The helpers were written synchronously, so filter the async instances out at allocation time instead of plumbing crypto_wait_req() through every call site. Reachable via net/rxrpc/rxgk.c, fs/afs/cm_security.c and net/ceph/crypto.c on systems with an async AEAD provider bound to the krb5 enctype name.

Affected products

Linux
  • <6.15
  • =<6.18.*
  • <2b7bd6dccff14b8b632c5244f1fd506918077221
  • <6c9dddeb582fde005360f4fe02c760d45ca05fb5
  • ==6.15
  • =<7.1.*
  • <ef6feb77e2d91761427c5b773edc9c97e1b706ad
  • =<*
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
NFSD: Fix infinite loop in layout state revocation

In the Linux kernel, the following vulnerability has been resolved: NFSD: Fix infinite loop in layout state revocation find_one_sb_stid() skips stids whose sc_status is non-zero, but the SC_TYPE_LAYOUT case in nfsd4_revoke_states() never sets sc_status before calling nfsd4_close_layout(). The retry loop therefore finds the same layout stid on every iteration, hanging the revoker indefinitely.

Affected products

Linux
  • <44e5e4eb3a07bf3e1d931dd9f96f3edcfa376605
  • =<6.18.*
  • <6.9
  • =<7.0.*
  • =<6.12.*
  • <d1fc00ec02e9deb3f8d2bd59caf938c554fbc576
  • =<*
  • ==6.9
  • <4f8ef58c10bfe5f86a643c7c8331b37e69e3dae1
  • <fe59ae27d7346245f5d8d97220f374e63efd28b5
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
Input: mms114 - reject an oversized device packet size

In the Linux kernel, the following vulnerability has been resolved: Input: mms114 - reject an oversized device packet size mms114_interrupt() reads a packet of touch data from the device into a fixed-size on-stack buffer struct mms114_touch touch[MMS114_MAX_TOUCH]; which holds MMS114_MAX_TOUCH (10) events of MMS114_EVENT_SIZE (8) bytes, i.e. 80 bytes. The length of the I2C read into it is taken verbatim from the device: packet_size = mms114_read_reg(data, MMS114_PACKET_SIZE); if (packet_size <= 0) goto out; ... error = __mms114_read_reg(data, MMS114_INFORMATION, packet_size, (u8 *)touch); packet_size is a single device register byte (0x0F) and the only check is the lower bound packet_size <= 0; it is never bounded against the size of touch[]. A malfunctioning, malicious or counterfeit controller (or an attacker tampering with the I2C bus) can report a packet_size of up to 255, so __mms114_read_reg() writes up to 175 bytes past the end of touch[] on the IRQ-thread stack: a stack out-of-bounds write that can overwrite the stack canary, saved registers and the return address. A well-formed device never reports more than the buffer holds, so reject an oversized packet and drop the report, consistent with the handler's other error paths, rather than reading past the buffer.

Affected products

Linux
  • <5d2ea15ba03bf17ed143ff1a0995a4206edc3fb6
  • <b78150729762d47c14fe29a2582bdca5568e62b8
  • =<6.18.*
  • <f3d5e77b27fded71dcb97f409262bf0abba0410e
  • ==3.6
  • <3.6
  • =<6.12.*
  • <66725039f7090afe14c31bd259e2059a68f04023
  • =<7.1.*
  • =<*
  • =<6.6.*
  • <8301c335305344d4da4ab9442b6a399dacfe5b8d
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
mfd: cros_ec: Delay dev_set_drvdata() until probe success

In the Linux kernel, the following vulnerability has been resolved: mfd: cros_ec: Delay dev_set_drvdata() until probe success If ec_device_probe() fails, cros_ec_class_release releases memory for the cros_ec_dev structure. However, because the drvdata was already set, sub-drivers like cros_ec_typec can still retrieve the stale pointer via the platform device. This leads to a use-after-free when cros_ec_typec attempts to access &typec->ec->ec->dev on a device that has already been released. Move dev_set_drvdata() to ensure that the pointer is only made available once all initialization steps have succeeded. sysfs: cannot create duplicate filename '/class/chromeos/cros_ec' Call trace: sysfs_do_create_link_sd+0x94/0xdc sysfs_create_link+0x30/0x44 device_add_class_symlinks+0x90/0x13c device_add+0xf0/0x50c ec_device_probe+0x150/0x4f0 platform_probe+0xa0/0xe0 ... BUG: KASAN: invalid-access in __memcpy+0x44/0x230 Write at addr f5ffff809e2d33ac by task kworker/u32:5/125 Pointer tag: [f5], memory tag: [fe] Tainted : [W]=WARN, [O]=OOT_MODULE Hardware name: Google Navi unprovisioned 0x7FFFFFFF/sku0 board/sku3 Workqueue: events_unbound deferred_probe_work_func Call trace: __memcpy+0x44/0x230 cros_ec_check_features+0x60/0xcc [cros_ec_proto] cros_typec_probe+0xe8/0x6e0 [cros_ec_typec] platform_probe+0xa0/0xe0

Affected products

Linux
  • <8b2c1d41bc36c100b38ce5ee6def246c527eaf8a
  • =<6.18.*
  • <257203d83204b192d1265a916b42ca0d499bb117
  • <24522713034d521ea4b5f5f36342e2b2f7e73bd6
  • <ed2941e5db016a0c600b25f1972620e6e223d9fa
  • =<6.12.*
  • =<7.1.*
  • ==4.12
  • =<6.1.*
  • <f7e81dc181d9fe8ab977158042cd193e8cc12091
  • <b5f41d5bf08e7b1b14fa0bd640975e6d78dc006d
  • <fc030c5b116f668d4ca86dca63742ddbc98d1665
  • =<6.6.*
  • =<5.15.*
  • =<*
  • <729ae27dc2503a7c1f92da1859efb45da03e4fa0
  • <4.12
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 5 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
svcrdma: wake sq waiters when the transport closes

In the Linux kernel, the following vulnerability has been resolved: svcrdma: wake sq waiters when the transport closes Threads parked in svc_rdma_sq_wait() on sc_sq_ticket_wait or sc_send_wait can hang indefinitely in TASK_UNINTERRUPTIBLE state across transport teardown, pinning svc_xprt references and blocking svc_rdma_free(). The close path sets XPT_CLOSE before invoking xpo_detach and both wait_event predicates include an XPT_CLOSE term, but the predicates are re-evaluated only on wakeup. sc_sq_ticket_wait has no completion-driven wake path; it is advanced solely by the chained ticket handoff inside svc_rdma_sq_wait() itself. Without an explicit wake at close, parked threads never observe XPT_CLOSE, hold their svc_xprt_get reference forever, and svc_rdma_free() blocks on xpt_ref dropping to zero. Two close entry points reach this transport. Local teardown runs svc_rdma_detach() from svc_handle_xprt() -> svc_delete_xprt() -> xpo_detach() on a worker thread. A remote disconnect arrives at svc_rdma_cma_handler(), which calls svc_xprt_deferred_close(): that sets XPT_CLOSE and enqueues the transport but does not access either RDMA waitqueue, so a worker already parked in svc_rdma_sq_wait() never re-evaluates its predicate. With every worker parked on this transport, no thread is available to run the local teardown either, and the wake site there is unreachable. Introduce svc_rdma_xprt_deferred_close(), a thin svcrdma wrapper that calls svc_xprt_deferred_close() and then wakes both sc_sq_ticket_wait and sc_send_wait. Convert the svcrdma producers that called svc_xprt_deferred_close() directly: svc_rdma_cma_handler(), qp_event_handler(), svc_rdma_post_send_err(), svc_rdma_wc_send(), the sendto drop path, the rw completion error paths, and the recvfrom flush and read-list error paths. Wake both waitqueues from svc_rdma_detach() as well. The synchronous svc_xprt_close() path (backchannel ENOTCONN, device removal via svc_rdma_xprt_done) reaches detach without flowing through svc_xprt_deferred_close() and therefore does not invoke the new helper. [ cel: add svc_rdma_xprt_deferred_close() to complete the fix ]

Affected products

Linux
  • <40eedc4253dbda0b29b7961200534dfcecb48ace
  • ==7.1
  • =<7.1.*
  • =<*
  • <e5248a7426030db1e126363f72afdb3b71339a5c
  • <7.1