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
thunderbolt: Prevent XDomain delayed work use-after-free on disconnect

In the Linux kernel, the following vulnerability has been resolved: thunderbolt: Prevent XDomain delayed work use-after-free on disconnect tb_xdp_handle_request() runs on system_wq and queues xd->state_work via queue_delayed_work() in three request handlers: PROPERTIES_CHANGED_REQUEST, UUID_REQUEST (via start_handshake), and LINK_STATE_CHANGE_REQUEST. Similarly, update_xdomain() queues xd->properties_changed_work when local properties change. Concurrently, tb_xdomain_remove() calls stop_handshake() which does cancel_delayed_work_sync() on both delayed works. Later, tb_xdomain_unregister() calls device_unregister() which eventually frees the xdomain. Since commit 559c1e1e0134 ("thunderbolt: Run tb_xdp_handle_request() in system workqueue") moved the request handler off tb->wq, the handler and the remove path are no longer serialized. If queue_delayed_work() executes after cancel_delayed_work_sync() but before the xdomain is freed, the delayed work fires on a freed object. Add xd->removing that tb_xdomain_remove() sets under xd->lock before calling stop_handshake(). Each external queue site holds the same lock and checks removing before calling queue_delayed_work(). This provides the mutual exclusion needed: either the queue site acquires the lock first and queues work that the subsequent cancel will see, or the remove path acquires the lock first and the queue site observes removing == true and skips the queue.

Affected products

Linux
  • =<*
  • =<6.6.*
  • <5.2
  • =<6.18.*
  • =<6.12.*
  • <33c0ee18cf8665c974b00f4e0ba769fbc07efe10
  • <2aa2cde2cc79a79d8ea4a15be9f4a67fc528ae91
  • =<7.1.*
  • <54a62153c765cd24239cde1f2633f2a2fd005368
  • <2c5d2d3c3f70cde2565d7b279b544893a2035842
  • <91b40862a02000f490b63f1d315be3ee31e83871
  • ==5.2
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
gve: fix header buffer corruption with header-split and HW-GRO

In the Linux kernel, the following vulnerability has been resolved: gve: fix header buffer corruption with header-split and HW-GRO The DQO RX datapath programs a per-buffer-queue-descriptor header_buf_addr at post time and reads the split header back at completion time. Both the post and the read currently index the header buffer by queue position rather than by the buffer's identity: - post (gve_rx_post_buffers_dqo): header_buf_addr is computed from bufq->tail - read (gve_rx_dqo): the header is read from desc_idx (the completion queue head index) This relies on the buffer-queue index and the completion-queue index being equal for the start of every packet, i.e. on the device consuming posted buffers and returning completions in the exact same order. That assumption does not hold once HW-GRO is enabled with multiple flows: coalesced segments are accepted and completed in an order that may differ from the order buffers were posted, and segments from different flows may interleave. That results in two problems: 1. Wrong header slot on read. Because the read offset is derived from the completion index (desc_idx) while the device wrote the header to the address programmed for the buffer's buf_id, the driver can copy a header belonging to a different packet. This shows up as throughput drop (about 30% drop and large numbers of TCP retransmissions) with header-split and HW-GRO both enabled and many streams. 2. Header buffer reused while still owned by the device. The driver advances bufq->head by one per completion and re-posts buffers based on that. Arrival of N RX completions only guarantees that at least N RX buffer descriptors have been read by the device. It does not guarantee that the device has relinquished the ownership of all the buffers corresponding to those N descriptors. With out-of-order completions (e.g. the completion for a packet copied into buffer N arrives before the completion for a packet copied into buffer N-1), the driver can re-post and overwrite a header buffer that the device is still going to write into, corrupting the header of a packet whose completion has not yet been processed. Fix both issues by indexing the header buffer by buf_id on both the post and read paths. Reading from buf_id's slot is therefore always correct regardless of completion ordering (fixes problem 1). Indexing by buf_id also ties each header slot to the lifetime of its buffer state. A buffer state is only returned to the free/recycle lists when its own completion (buf_id) is processed, so its header slot can only be re-posted after the device is done with it. This makes header slot reuse safe under out-of-order completions (fixes problem 2). Allocate (gve_rx_alloc_hdr_bufs) and free (gve_rx_free_hdr_bufs) the header buffers based on num_buf_states to match the buf_id indexing.

Affected products

Linux
  • <d676c9a73bdcd8237425dbb826f2bd1a25c36e40
  • =<*
  • <9f8e7f59b0c2f466be74bd923726b0f5496c27ad
  • <6.9
  • <35267819b25074084130b6a7be18bbaf44d3ae74
  • ==6.9
  • =<6.18.*
  • =<6.12.*
  • =<7.1.*
  • <84d3753d4bf284ef770ead6dee2270aaabb3ef41
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
netfilter: flowtable: fix and simplify IP6IP6 tunnel handling

In the Linux kernel, the following vulnerability has been resolved: netfilter: flowtable: fix and simplify IP6IP6 tunnel handling Fix nf_flow_ip6_tunnel_proto() to use pskb_may_pull() instead of skb_header_pointer() to ensure the outer IPv6 header is in the skb headroom, which is required for subsequent packet processing. Move ctx->offset update inside the IPPROTO_IPV6 conditional block since it should only be adjusted when an IP6IP6 tunnel is actually detected. Simplify the rx path by removing ipv6_skip_exthdr() and checking ip6h->nexthdr directly, as the flowtable fast path only handles simple IP6IP6 encapsulation without extension headers. Drop the tunnel encapsulation limit destination option support from the tx path to match, since the rx path no longer handles extension headers. Remove the encap_limit parameter from nf_flow_offload_ipv6_forward(), nf_flow_tunnel_ip6ip6_push() and nf_flow_tunnel_v6_push(), along with the ipv6_tel_txoption struct and related headroom/MTU adjustments.

Affected products

Linux
  • =<*
  • ==7.0
  • <f4c2d8668d85ed125985da663c824a9c25498257
  • <7.0
  • =<7.1.*
  • <7f8d816a9aa2729d270418f00c9ef5e85bfc1b31
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
raid1: fix nr_pending leak in REQ_ATOMIC bad-block error path

In the Linux kernel, the following vulnerability has been resolved: raid1: fix nr_pending leak in REQ_ATOMIC bad-block error path In raid1_write_request(), each per-mirror loop iteration begins by incrementing rdev->nr_pending. If a REQ_ATOMIC write encounters a badblock within the requested range, the code jumps to err_handle without dropping the reference taken for the current mirror. err_handle's cleanup loop will only decrements for k < i and r1_bio->bios[k] is non-NULL. The current slot is therefore skipped, leaving its nr_pending reference leaked permanently. The reference prevents the rdev from ever being removed, since raid1_remove_conf() refuses to remove an rdev with nr_pending > 0. Fix this by calling rdev_dec_pending() before jumping to err_handle.

Affected products

Linux
  • <731485617bf862f1289c3f40ed1f800d0475826f
  • =<*
  • =<6.18.*
  • ==6.13
  • <6.13
  • <5ac9e793ba2583d72740d929e7858a6c82e22ed5
  • =<7.1.*
  • <909d9dc3b5730c8ed7b764c68bc788342df2a07b
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
net: ife: require ETH_HLEN to be pullable in ife_decode()

In the Linux kernel, the following vulnerability has been resolved: net: ife: require ETH_HLEN to be pullable in ife_decode() ife decode may return after making only the outer IFE header and metadata pullable. The caller then passes the decapsulated packet to eth_type_trans(), which expects the inner Ethernet header to be accessible from the linear data area. With a malformed IFE frame, the inner Ethernet header may still be shorter than ETH_HLEN in the linear area, which can lead to a crash in the original code. Fix this by extending the pull check in ife_decode() so that the inner Ethernet header is also guaranteed to be pullable before returning.

Affected products

Linux
  • <4.6
  • =<5.10.*
  • <9433578bff9c100c466a6354574892e55293cb8f
  • <be272e159dfe1207b67332ad6e17adcf59b4ea4b
  • =<6.6.*
  • =<*
  • <8c8818e52fddb247ff3214622401a4de6ff8482e
  • <9406f6012b7343661efb516a11c62d4db2b62f75
  • <1cb42ec10294a55380e52e674b3df2b962648242
  • <b69ad768cd4a2ef4e07c18492ae85438ed17c7cb
  • =<6.18.*
  • =<6.12.*
  • =<7.1.*
  • =<5.15.*
  • =<6.1.*
  • ==4.6
  • <70013f9163bef7fbd9fa62f81cf91b2a7ba66163
  • <5526d1997aea6c9bd865ca4d4894b52e799d735c
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
vhost: fix vhost_get_avail_idx for a non empty ring

In the Linux kernel, the following vulnerability has been resolved: vhost: fix vhost_get_avail_idx for a non empty ring vhost_get_avail_idx is supposed to report whether it has updated vq->avail_idx. Instead, it returns whether all entries have been consumed, which is usually the same. But not always - in drivers/vhost/net.c and when mergeable buffers have been enabled, the driver checks whether the combined entries are big enough to store an incoming packet. If not, the driver re-enables notifications with available entries still in the ring. The incorrect return value from vhost_get_avail_idx propagates through vhost_enable_notify and causes the host to livelock if the guest is not making progress, as vhost will immediately disable notifications and retry using the available entries. This goes back to commit d3bb267bbdcb ("vhost: cache avail index in vhost_enable_notify()") which changed vhost_enable_notify() to compare the freshly read avail index against vq->last_avail_idx instead of the previously cached vq->avail_idx. Commit 7ad472397667 ("vhost: move smp_rmb() into vhost_get_avail_idx()") then carried over the same comparison when refactoring vhost_enable_notify() to call the unified vhost_get_avail_idx(). The obvious fix is to make vhost_get_avail_idx do what the comment says it does and report whether new entries have been added.

Affected products

Linux
  • <5.18
  • <a9326b652bc7acd748d7a1143573845c7924d847
  • =<*
  • <09861858a68342f851f71c669ac0f69865c32151
  • <7f229d27bf27c7e589eca690d8612763a7a4801f
  • ==5.18
  • <e115471008111f894c6528d9ab2ce7d0ce306f35
  • =<6.12.*
  • =<6.18.*
  • =<7.1.*
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
rtase: fix double free of multi-frag skb on DMA map failure

In the Linux kernel, the following vulnerability has been resolved: rtase: fix double free of multi-frag skb on DMA map failure In rtase_start_xmit(), when the head buffer DMA mapping fails after rtase_xmit_frags() has mapped all fragments, the error path clears the fragment descriptors with rtase_tx_clear_range(), which frees the skb through the last-frag slot and accounts tx_dropped. Control then falls through to the common error label, which frees the same skb a second time and counts it again. Return right after clearing the fragments when the skb owns frags; the no-frag case still drops through and frees the head skb once.

Affected products

Linux
  • ==6.12
  • <6fb7b769d6ed6d1d2e02af4a80e57a2477f35086
  • <4f09172aff5f73a5e914f4fbc0d00a1c2ea9f7cb
  • =<*
  • <db986098f30881fafcc752800aa3b13fd289c922
  • =<6.18.*
  • <6.12
  • =<6.12.*
  • =<7.1.*
  • <de691dc3227b061c4d0beba9f0128fe1ff33dd68
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
netfilter: xt_connmark: reject invalid shift parameters

In the Linux kernel, the following vulnerability has been resolved: netfilter: xt_connmark: reject invalid shift parameters Revision 2 of the CONNMARK target accepts user-controlled shift parameters and applies them to 32-bit mark values in connmark_tg_shift(). A shift_bits value of 32 or more triggers an undefined-shift bug when the rule is evaluated. Invalid shift_dir values are also accepted and silently fall back to the left-shift path. Reject invalid revision-2 shift parameters in connmark_tg_check() so malformed rules fail at installation time, before they can reach the packet path.

Affected products

Linux
  • =<6.6.*
  • =<*
  • <1b47026fb4b35bac850ad6e8a4ad7fc018e09ebc
  • <9657bb11a6376ab0a79f05d433713d6944111e9d
  • <8ace320ac4416f5e5fbcd065309fb2dfcce787b0
  • <230173cc6105bdfb2696d37e6e56687b003fbe63
  • <4.17
  • <c3fa852d117b3fda72265e4230e3967db4a74fcf
  • =<6.12.*
  • ==4.17
  • =<6.18.*
  • =<7.1.*
  • <4eef84b09a3836919360c4232b0f16651a155eec
  • =<5.15.*
  • <d8ce63d928b457fba7ed1e302492dfd32293671c
  • =<6.1.*
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
bpf: Fix effective prog array index with BPF_F_PREORDER

In the Linux kernel, the following vulnerability has been resolved: bpf: Fix effective prog array index with BPF_F_PREORDER replace_effective_prog() and purge_effective_progs() located the slot in the effective array by walking the program hlist and counting entries linearly. That count does not match the array layout: compute_effective_ progs() places BPF_F_PREORDER programs at the front (ancestor cgroup first, attach order within a cgroup) and the rest after them (descendant cgroup first). So when a preorder program is present, the linear hlist position no longer equals the program's index in the effective array. For replace_effective_prog() (bpf_link_update()) this overwrote the wrong slot, corrupting the effective order. For purge_effective_progs(), it could dummy out a slot belonging to a different program and leave the detached program in the array while bpf_prog_put() drops its reference, i.e. a use-after-free. Fix both by replaying compute_effective_progs()'s placement (including the per-cgroup preorder reversal) in a shared effective_prog_pos() helper. Identify the entry by its struct bpf_prog_list pointer rather than by (prog, link) value, so the lookup resolves to exactly the attachment the syscall selected even when the same bpf_prog is attached to several cgroups in the hierarchy.

Affected products

Linux
  • <525e408c27ae714e538b8c608c3a974df3ab6c92
  • ==4707ad649cf662add3058bff47430817811b048d
  • <9697db03e010391c55ae75192cbdf30c5a72c114
  • =<6.6.*
  • <f08aaee3152d0dfc578b3f2586932d82062701dd
  • =<*
  • <6.15
  • ==6.15
  • <6.15
  • <6.12.97
  • <41b4320b84fdafe1ab586b06453d30d50415db59
  • =<6.18.*
  • =<6.12.*
  • <b584f107ab90222bd825dcb4c5977326ff684109
  • =<7.1.*
  • <6.6.145
Dismissed
(max. allowed matches exceeded)
created 3 weeks, 4 days ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
net: phy: sfp: free mii_bus in sfp_i2c_mdiobus_destroy

In the Linux kernel, the following vulnerability has been resolved: net: phy: sfp: free mii_bus in sfp_i2c_mdiobus_destroy sfp_i2c_mdiobus_create() allocates the I2C MDIO bus with mdio_i2c_alloc(), a plain (non-devm) allocation, and registers it. sfp_i2c_mdiobus_destroy() only unregisters the bus and clears sfp->i2c_mii without calling mdiobus_free(). As the only reference to the bus is then cleared, the struct mii_bus is leaked. This is hit whenever a copper/RollBall SFP module that instantiated an MDIO bus is removed: sfp_sm_main() takes the global teardown path and calls sfp_i2c_mdiobus_destroy(). sfp_cleanup(), on driver unbind, frees sfp->i2c_mii directly, which is why the leak only triggered on module hot-removal and not on unbind. Free the bus in sfp_i2c_mdiobus_destroy() to match the allocation done in sfp_i2c_mdiobus_create().

Affected products

Linux
  • <d2c37f26d1a37f8177be5f354537f8ee3ec31cc2
  • <86d379fcf1b79bdf4bc2ac891297f30f63d041d8
  • ==6.1
  • <6.1
  • <8f31efff9206f9f0adb853cad6916086aac4d5ef
  • =<6.6.*
  • =<*
  • <92dd9a522f01ef57f633a8c1953cf6d48ef2bcd5
  • =<6.18.*
  • =<6.12.*
  • <2381bf3f484e8e4fd89a225445872ec14e036ab5
  • <3183b6f5510c876a1c4b4a6bdc3d0ad8940fe742
  • =<7.1.*
  • =<6.1.*