Nixpkgs security tracker

Login with GitHub
⚠️ You are using a production deployment that is still only suitable for demo purposes. Any work done in this might be wiped later without notice.

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 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ieee802154: admin-gate legacy LLSEC dump operations

In the Linux kernel, the following vulnerability has been resolved: ieee802154: admin-gate legacy LLSEC dump operations In net/ieee802154/netlink.c, the legacy IEEE802154_NL family ops table builds the LLSEC dump entries (LLSEC_LIST_KEY, LLSEC_LIST_DEV, LLSEC_LIST_DEVKEY, LLSEC_LIST_SECLEVEL) with IEEE802154_DUMP() which sets no .flags, so generic netlink runs them ungated. The modern nl802154 family admin-gates the equivalent reads via NL802154_CMD_GET_SEC_KEY and friends with .flags = GENL_ADMIN_PERM. Any local uid that can open AF_NETLINK / NETLINK_GENERIC can resolve the "802.15.4 MAC" family and dump LLSEC_LIST_KEY on any wpan netdev that has an LLSEC key installed; the dump handler writes the raw 16-byte AES-128 key bytes (IEEE802154_ATTR_LLSEC_KEY_BYTES, copied verbatim from struct ieee802154_llsec_key.key) into the reply. Recovering the AES key compromises 802.15.4 LLSEC link confidentiality and authenticity, since LLSEC uses CCM* and the same key authenticates and encrypts frames. Impact: any local uid with no capabilities can read the raw 16-byte AES-128 LLSEC key from the kernel keytable on any wpan netdev that has an administrator-installed LLSEC key, by issuing an LLSEC_LIST_KEY dump on the legacy IEEE802154_NL generic-netlink family. Introduce IEEE802154_DUMP_PRIV() mirroring IEEE802154_DUMP() but setting .flags = GENL_ADMIN_PERM, and use it for the four LLSEC dump entries. LIST_PHY and LIST_IFACE retain IEEE802154_DUMP() because the modern nl802154 family exposes their equivalents to unprivileged readers by design (NL802154_CMD_GET_WPAN_PHY and NL802154_CMD_GET_INTERFACE carry "can be retrieved by unprivileged users" annotations).

Affected products

Linux
  • <1905ebabe638c946aced00c4bb664da26cac56d5
  • =<5.10.*
  • <5abe94a205539d27945cda3ba43fdcfe295cf2c8
  • =<6.6.*
  • =<*
  • <3465035ba18b1ed50f8d201897d14135d20532b0
  • <3.16
  • <e84708ef7521f3bffc85a449954042018abbd60e
  • <09fd25cd8cd80a6b3edef04e53a7324d06ac2180
  • ==3.16
  • =<6.18.*
  • =<6.12.*
  • =<7.1.*
  • =<5.15.*
  • <9c1e0b6d49471a712511d23fc9d06901561135e8
  • <6383248058956f2a52d720b1e9f8921099cdae04
  • =<6.1.*
  • <dffe745760f38fac0b8288e0dc4759b23d9888ff
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
drm/amdkfd: fix uint32_t overflow in EOP ring buffer size alignment

In the Linux kernel, the following vulnerability has been resolved: drm/amdkfd: fix uint32_t overflow in EOP ring buffer size alignment eop_ring_buffer_size in struct queue_properties is a u32. In kfd_queue_acquire_buffers() the expected EOP buffer size is computed as ALIGN(eop_ring_buffer_size, PAGE_SIZE); ALIGN uses typeof(x), so the addition is done in 32-bit. A user-supplied size of 0xFFFFF001 wraps to 0, causing kfd_queue_buffer_get() to skip its exact-size check (gated on size != 0) and accept any BO mapped at the address. On GFX8/GFX9 the MQD cp_hqd_eop_control is then programmed for an 8KB EOP ring backed by a 4KB BO, so CP EOP writes can land past the buffer and fault the GPU. Cast the operand to u64 so the alignment is computed in 64-bit; the size check in kfd_queue_buffer_get() then rejects the oversized request. (cherry picked from commit ae443117b742c357bfef3a7bddabf76fcf86e9ef)

Affected products

Linux
  • <6.18.44
  • <6.12.103
  • <6.20
  • <7c54bd225d83bc1bcb44430ed4b4d3a5c36b1961
  • =<*
  • <6dc0b4b39ed4f11ef70f76ecea8537e35f45342b
  • ==7.0
  • <7.0
  • =<6.18.*
  • =<6.12.*
  • ==c6ce687077cc67e4f3cbd0c89cb356fbbce91f4c
  • =<7.1.*
  • <273548eb997c6be85230c1236b18784b09f6203c
  • <83463a96ea3c7d8ae636a4d6a0ba63c9ce410724
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
hwmon: (adt7470) Fix divide-by-zero TOCTOU crash in fan speed read

In the Linux kernel, the following vulnerability has been resolved: hwmon: (adt7470) Fix divide-by-zero TOCTOU crash in fan speed read If the fan data becomes 0 between the FAN_DATA_VALID() check and the FAN_PERIOD_TO_RPM() conversion, it will result in a divide-by-zero crash due to a race with a concurrent update of the cached fan value. Fix a TOCTOU issue by reading fan data once.

Affected products

Linux
  • <5.15
  • <832069bec79cf6f903441c5769d3cdba95d0af33
  • <76963b04b2d1c648d69949d8dd521e1ff7f40b51
  • =<6.6.*
  • =<*
  • <96ad57d31763559d376416cdf3bf5ae79bbbebec
  • <1b46fe9dc8f8de59310f37e6c5e5c0e05ded46c3
  • ==5.15
  • =<6.18.*
  • =<6.12.*
  • =<7.1.*
  • <d328175045176f85c15c369bd21dc551351e7935
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
net: ip6_gre: require CAP_NET_ADMIN in the device netns for changelink

In the Linux kernel, the following vulnerability has been resolved: net: ip6_gre: require CAP_NET_ADMIN in the device netns for changelink ip6gre_changelink() and ip6erspan_changelink() operate on at most two netns, dev_net(dev) and the tunnel link netns t->net. They differ once the device is created in or moved to a netns other than the one the request runs in. The rtnl changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a caller privileged there but not in t->net can rewrite a tunnel that lives in t->net. Gate both ops on rtnl_dev_link_net_capable() at their top, before any attribute is parsed.

Affected products

Linux
  • <f00a50876d2818bd6dc86fa98b3ef360884c53c8
  • <4.20
  • <c38c8b0db3c65b597e7ece317b6cb59de3d15e69
  • =<6.6.*
  • =<*
  • =<7.1.*
  • =<5.10.*
  • <129f8939e5af683cec3a1a5edcb40a64636ad81e
  • ==7943bb0f06365cf5e32f3cf8a6b29eeae981fb8a
  • <5.5
  • =<6.18.*
  • =<6.1.*
  • ==5.5
  • <1d4d8ee002083ca4ead5353662bf8362428af57f
  • =<6.12.*
  • <0caa9f348f8b5356900de77b0bb89a697c4aff20
  • =<5.15.*
  • <220162c9fedbe992da70d70f50a10da4f45f914c
  • <03d8843b143ebbbfaf48511922abc6e886575a61
  • ==d0201d2405dac8d9b16773e97709925e397552d0
  • <5.5
  • <e3724dedf57761c6de52f4d604ec74f66fd61611
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ksmbd: fix use-after-free of fp->owner.name in durable handle owner check

In the Linux kernel, the following vulnerability has been resolved: ksmbd: fix use-after-free of fp->owner.name in durable handle owner check Two concurrent SMB2 durable reconnects (DH2C/DHnC) on the same persistent_id race the fp->owner.name compare-read in ksmbd_vfs_compare_durable_owner() against the kfree() in ksmbd_reopen_durable_fd()'s reopen-success path. fp->owner.name is a standalone kstrdup() buffer whose lifetime is independent of the fp refcount, and the two sites share no lock: the compare reads the buffer while the reopen frees it, so the strcmp() can dereference freed memory. Commit 7ce4fc40018d ("ksmbd: fix durable reconnect double-bind race in ksmbd_reopen_durable_fd") made the fp->conn claim atomic under global_ft.lock (closing the owner.name double-free and the ksmbd_file write-UAF), but the compare-read versus reopen-free pair was left unserialized. BUG: KASAN: slab-use-after-free in strcmp+0x2c/0x80 Read of size 1 by task kworker strcmp ksmbd_vfs_compare_durable_owner smb2_check_durable_oplock smb2_open Freed by task kworker: kfree ksmbd_reopen_durable_fd smb2_open Allocated by task kworker: kstrdup session_fd_check smb2_session_logoff The buggy address belongs to the cache kmalloc-8 Serialize both sides of the race with fp->f_lock. The global durable file-table lock still protects the durable reconnect claim, but fp->owner.name is per-open state and does not need to block unrelated durable table lookups or reconnects. The teardown is left at its existing location after the reopen-success point so that an __open_id() rollback still retains owner.name for a later legitimate reconnect to verify.

Affected products

Linux
  • <7.1
  • <38637163501fd9e2f684b8cd275d0db5d79f37c6
  • <fb978d72052704c6b06c6b0f129fcd60b77169f5
  • <5a5ac2852cd326529d02f778bc1aa6184701f4d7
  • =<*
  • <7.1
  • =<6.6.*
  • <93d4d46bf9d442a12ea87278049ec416962c627f
  • <6.12.97
  • <6.18.40
  • =<6.18.*
  • ==c908c853f304a4969b5aa10eba0b50350cc65b80
  • =<6.12.*
  • =<7.1.*
  • ==7.1
  • <ed98719be41389d416953b8ef9f07a07dfea6b2b
  • <6.6.145
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
KVM: arm64: vgic: Fix race between LPI release and re-registration

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: vgic: Fix race between LPI release and re-registration Fix a potential race between decrementing an LPI's reference count and evicting that structure from the LPI xarray. LPI structures are maintained in the VGIC LPI xarray (dist->lpi_xa). When the reference count of an LPI structure drops to zero, vgic_release_lpi_locked() removes the structure from the xarray and frees it under the xarray lock. However, the release of an LPI can race with a concurrent LPI re-registration with the same INTID via vgic_add_lpi() on another CPU, since the reference count drop and the xarray eviction are not performed in a single atomic step. This can happen e.g. if the guest issues a DISCARD while the LPI is still referenced from a vCPU's active-pending list (ap_list), and the same INTID is re-mapped via MAPTI. Particularly, vgic_release_lpi_locked() is called from two distinct paths: direct release via vgic_put_irq(), and deferred release via vgic_release_deleted_lpis(). During direct release, the issue can result in deleting a newly registered LPI from the xarray: CPU0 (Releasing LPI) CPU1 (Adding new LPI) ==================== ===================== vgic_put_irq() __vgic_put_irq() refcount_dec_and_test() vgic_add_lpi() xa_lock_irqsave() old_irq = xa_load(.., intid) vgic_try_get_irq_ref(old_irq) == false new IRQ inserted --> __xa_store(.., intid, ..) xa_unlock_irqrestore() xa_lock_irqsave(); vgic_release_lpi_locked() __xa_erase(.., irq->intid) <-- BUG: new IRQ is erased kfree_rcu(old_irq) During the deferred release path, the old IRQ can be leaked: CPU0 (Releasing LPI) CPU1 (Adding new LPI) ==================== ===================== vgic_put_irq_norelease() __vgic_put_irq() refcount_dec_and_test() irq->pending_release = true vgic_add_lpi() xa_lock_irqsave() old_irq = xa_load(.., intid) vgic_try_get_irq_ref(oldirq) == false BUG: old IRQ overwritten --> __xa_store(.., intid, ..) xa_unlock_irqrestore() vgic_release_deleted_lpis() xa_lock_irqsave() xa_for_each() { .. } <-- old IRQ with pending_release = true is gone, so it cannot be released To fix the direct release path, move the reference count drop inside the xarray lock, making sure that vgic_add_lpi() never encounters the to-be-released LPI. In the deferred release path, the refcount drop must happen under a raw spinlock, so the xarray lock cannot be grabbed, and the same solution does not work. Instead, update vgic_add_lpi(), so that if it evicts an LPI from the xarray, it takes on the responsibility of freeing it. Consequently, an LPI may now be freed concurrently after a deferred release drops the refcount, so accessing the pending_release field is no longer safe from use-after-free. Delete all uses of the flag, and update vgic_release_deleted_lpis() to identify orphaned LPIs purely based on their refcount.

Affected products

Linux
  • <6.17
  • ==6.17
  • =<*
  • <292e80a159aa88635bf668a7212cfdf526b8bd52
  • =<7.1.*
  • <cbfe2b24a1ea9de35032dbdd100fdc700f5be92d
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy()

In the Linux kernel, the following vulnerability has been resolved: tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy() TIPC UDP media bearer teardown calls dst_cache_destroy() on its replicast caches before calling synchronize_net() to wait for concurrent RCU readers (transmitters) to finish: static void cleanup_bearer(struct work_struct *work) { ... list_for_each_entry_safe(rcast, tmp, &ub->rcast.list, list) { dst_cache_destroy(&rcast->dst_cache); list_del_rcu(&rcast->list); kfree_rcu(rcast, rcu); } ... dst_cache_destroy(&ub->rcast.dst_cache); udp_tunnel_sock_release(ub->sk); synchronize_net(); ... } This is highly buggy because dst_cache_destroy() immediately frees the per-CPU cache memory (free_percpu()) and releases the cached dst entries without any synchronization. If a concurrent transmitter (e.g., tipc_udp_xmit()) is running on another CPU under RCU protection, it can call dst_cache_get() concurrently, leading to: 1. Use-After-Free on the per-CPU cache pointer itself (crash). 2. "rcuref - imbalanced put()" warning if it attempts to release a dst that was concurrently released by dst_cache_destroy(). Furthermore, calling kfree(ub) immediately after synchronize_net() without closing the socket first (or waiting after closing it) leaves a window where a concurrent receiver (tipc_udp_recv()) could start after synchronize_net(), access ub, and suffer a UAF when kfree(ub) runs. To fix this, we must defer dst_cache_destroy() and kfree(ub) until after we have ensured that no more readers can see the bearer/socket and all existing readers have finished: 1. Defer rcast entry destruction (both dst_cache_destroy() and kfree()) to an RCU callback using call_rcu_hurry(). Using call_rcu_hurry() ensures the dst entries are released quickly. 2. Release the bearer socket using udp_tunnel_sock_release() (stops new receive readers). 3. Call synchronize_net() to wait for all outstanding RCU readers (both transmit and receive) to finish. 4. Now that it is safe, call dst_cache_destroy() on the main bearer cache, and free ub. Note: 3) and 4) can be changed later in net-next to also use call_rcu_hurry() and get rid of the synchronize_net() latency.

Affected products

Linux
  • <1c8393eefa3cadf4ca0b61119ad1321aa32d3c8c
  • <5.3
  • =<*
  • =<7.1.*
  • ==5.3
  • <7116764ca53ff529335d7ab7c364a69f094b23a5
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
tracing: Bound synthetic-field strings with seq_buf

In the Linux kernel, the following vulnerability has been resolved: tracing: Bound synthetic-field strings with seq_buf The synthetic field helpers build a prefixed synthetic variable name and a generated hist command in fixed MAX_FILTER_STR_VAL buffers. The current code appends those strings with raw strcat(), so long key lists, field names, or saved filters can run past the end of the staging buffers. Build both strings with seq_buf and propagate -E2BIG if either the synthetic variable name or the generated command exceeds MAX_FILTER_STR_VAL. This keeps the existing tracing-side limit while using the helper intended for bounded command construction. [ sdr: Moved struct seq_buf *s for upside-down x-mas tree formatting ]

Affected products

Linux
  • =<6.6.*
  • =<*
  • <cf334620036ad2250e008c7e7bb6646a3938b7b0
  • <4.17
  • =<6.18.*
  • <baa333b2700a7fa3529d504529c8c10060fd687c
  • =<6.12.*
  • <0c584c27f6649a93ec12061cc779a4bd8f7c1434
  • <88b901fdc1662b131ff908cbd017333b61e7acc8
  • =<7.1.*
  • ==4.17
  • <f07883450eb14d1cf020b55d9f3a7ec5683bcd26
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
cifs: Fix missing credit release on failure in cifs_issue_read()

In the Linux kernel, the following vulnerability has been resolved: cifs: Fix missing credit release on failure in cifs_issue_read() Fix missing release of credits in the failure path in cifs_issue_read() lest retrying the subreq just overwrites the credits value.

Affected products

Linux
  • ==6.10
  • =<*
  • <3a303f985c6bec8787c2ad4a16b39c14c5bcd765
  • <86652704a7fd41a5a8459027e08640bbd1952826
  • <b9ee1f0347bf56d019ca28ddff090234bb45b05c
  • <c16b8c4cfb4fe2244cc33e469a93c1ab8684146b
  • =<6.12.*
  • =<6.18.*
  • =<7.1.*
  • <6.10
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
irqchip/ts4800: Fix missing chained handler cleanup on remove

In the Linux kernel, the following vulnerability has been resolved: irqchip/ts4800: Fix missing chained handler cleanup on remove The driver installs a chained handler for the parent interrupt during probe using irq_set_chained_handler_and_data(), but the remove function does not clear this handler. This leaves a dangling handler that may be called when the parent interrupt fires after the driver has been removed, potentially accessing freed memory and causing a kernel crash. Additionally, the parent_irq obtained via irq_of_parse_and_map() is not stored, making it inaccessible in the remove function. Moreover, interrupt mappings created during probe are not properly disposed. Fix this by: - Saving parent_irq in probe - Clearing the chained handler with NULL in ts4800_ic_remove() - Disposing all IRQ mappings before domain removal to prevent resource leaks

Affected products

Linux
  • <e6b674dc341c6add7d85bec2ec22caf1aad35795
  • ==4.5
  • =<6.6.*
  • =<*
  • <b5b2b2cb6a91908e6c23958c9ce6d5ba2fdb686c
  • <4.5
  • <3f31f49afffa169cd01e6c37568c4df3eb1051af
  • =<6.12.*
  • <4e8d498d32b6c67d73bb8b317ff316ff37897a3e
  • <98bf7e54cec07d514b3575c11896a8b12d50ecc4
  • =<6.18.*
  • =<7.1.*
  • =<6.1.*
  • <9ed0dca2aa05908b33ecf0bb15c7953947529542