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 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
isofs: bound Rock Ridge symlink components to the SL record

In the Linux kernel, the following vulnerability has been resolved: isofs: bound Rock Ridge symlink components to the SL record get_symlink_chunk() and the SL handling in parse_rock_ridge_inode_internal() walk the variable-length components of a Rock Ridge "SL" (symbolic link) record. Each component is a two-byte header (flags, len) followed by len bytes of text, so it occupies slp->len + 2 bytes. Both loops read slp->len and advance to the next component, and get_symlink_chunk() additionally does memcpy(rpnt, slp->text, slp->len), but neither checks that the component lies within the SL record before dereferencing it. A crafted SL record whose component declares a len that runs past the record (rr->len) therefore triggers an out-of-bounds read of up to 255 bytes. When the record sits at the tail of its backing buffer - for example a small kmalloc()ed continuation block reached through a CE record - the read crosses the allocation; get_symlink_chunk() then copies the out-of-bounds bytes into the symlink body returned to user space by readlink(), disclosing adjacent kernel memory. ISO 9660 images are routinely mounted from untrusted removable media - desktop environments auto-mount them (e.g. via udisks2) without CAP_SYS_ADMIN - so the record contents are attacker-controlled. Reject any component that does not fit in the remaining record bytes before using it. In get_symlink_chunk() return NULL, like the existing output-buffer (plimit) checks, so a malformed record makes readlink() fail with -EIO rather than silently returning a truncated target; in parse_rock_ridge_inode_internal() stop the inode-size walk.

Affected products

Linux
  • <5fa1d6a5ec2356d2107dead614437c66fa7138b1
  • <9830725078c8483c6831ec10222ae724806ea36b
  • =<6.18.*
  • <36fe7d25dbc40da0c6b1dd4513a4f69ac6164eee
  • <1015e1c4b2fadd9c09704e24738e46598778c869
  • =<6.12.*
  • <b5699642640d6cff357638738c5293985cd5a53d
  • =<7.1.*
  • <a22cb6bb54dc167047ea9e70d97dfbc2c15649e3
  • <2.6.12
  • =<*
  • =<6.6.*
  • ==2.6.12
  • <b736b12108fd116c41777628f5a333791604df26
  • =<5.15.*
  • =<6.1.*
  • =<5.10.*
  • <6bf41db09ef935d76fcc84ccf213b42c18de95ee
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup

In the Linux kernel, the following vulnerability has been resolved: ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup If acpi_nfit_init() fails after adding the acpi_desc object to the acpi_descs list, that object is never removed from that list because the acpi_nfit_shutdown() devm action is not added for the NFIT device in that case. Next, the acpi_nfit_init() failure causes acpi_nfit_probe() to fail, the acpi_desc object is freed, and a dangling pointer is left behind in the acpi_descs. Any subsequent ACPI Machine Check Exception will trigger nfit_handle_mce() which iterates over acpi_descs and so a use-after-free will occur. Moreover, if acpi_nfit_probe() returns 0 after installing a notify handler for the NFIT device and without allocating the acpi_desc object and setting the NFIT device's driver data pointer, the acpi_desc object will be allocated by acpi_nfit_update_notify() and acpi_nfit_init() will be called to initialize it. Regardless of whether or not acpi_nfit_init() fails in that case, the acpi_nfit_shutdown() devm action is not added for the NFIT device and acpi_desc is never removed from the acpi_descs list. If the acpi_desc object is freed subsequently on driver removal, any subsequent ACPI MCE will lead to a use-after-free like in the previous case. To address the first issue mentioned above, make acpi_nfit_probe() call acpi_nfit_shutdown() directly on acpi_nfit_init() failures and to address the other one, add a remove callback to the driver and make it call acpi_nfit_shutdown(). Also, since it is now possible to pass NULL to acpi_nfit_shutdown() or the acpi_desc object passed to it may not have been initialized, add checks against NULL for acpi_desc and its nvdimm_bus field to that function and make acpi_nfit_unregister() clear the latter after unregistering the NVDIMM bus.

Affected products

Linux
  • ==4.6
  • <b07d22a2d17ad6465c87bd5752bc70e4c16e0ee4
  • <6ff054cc02a763914773b026cacb429e5fbf64fa
  • <4.6
  • =<5.10.*
  • =<6.18.*
  • <ee82078e776ae31266cc70fdf62ac17c3c6f100a
  • =<6.12.*
  • <7d69235bdc581a4346e9bcd6a8bea37d3e1abd25
  • =<7.1.*
  • <df7c92216a1583a76cb0cbf2f21cd68870609b05
  • =<6.1.*
  • =<*
  • =<6.6.*
  • <38bf27511ef41bffebd157ec3eba41fc89ba59cd
  • =<5.15.*
  • <c127dbd832bd4b9aef8a749d9f491b74042f9b47
  • <3b2628f7682aea8d9ce09ad4b9a3bd144b451eaa
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ALSA: firewire: isight: bound the sample count to the packet payload

In the Linux kernel, the following vulnerability has been resolved: ALSA: firewire: isight: bound the sample count to the packet payload isight_packet() takes the frame count from the device iso packet and checks it only against the device claimed iso length. count = be32_to_cpu(payload->sample_count); if (likely(count <= (length - 16) / 4)) isight_samples(isight, payload->samples, count); length is the iso header data_length. It can be up to 0xffff. So the gate allows a count up to about 16379. isight_samples() then copies count frames out of payload->samples into the PCM DMA buffer. payload->samples holds only 2 * MAX_FRAMES_PER_PACKET values. The device multiplexes two samples per frame. A count past MAX_FRAMES_PER_PACKET reads past the payload. A count past the buffer size writes past runtime->dma_area. The smallest PCM buffer is larger than MAX_FRAMES_PER_PACKET. Bounding the count to MAX_FRAMES_PER_PACKET keeps both the read and the write in range. A malicious or faulty Apple iSight on the FireWire bus reaches this during a normal capture. Add the MAX_FRAMES_PER_PACKET bound to the gate.

Affected products

Linux
  • <8e48a29813df8dd71503800b7acf69c12c035045
  • <3.0
  • <29b9667982e4df2ed7744f86b1144f8bb58eb698
  • =<6.18.*
  • <31a01b70bb90e3ef3147f308e2ea899e1d2485ca
  • <ebbffacda6733dcbcef601b5b523460f8d8b671e
  • <31da82b9676c6b112e7c72c7529e6812b919742a
  • =<5.15.*
  • =<6.12.*
  • ==3.0
  • =<7.1.*
  • <57e4d9043afc1eaddee8f50d11def6e65415d273
  • =<*
  • <3ed2fa1ed8cc65f910b8bbc0be3cc366b30f8478
  • =<6.1.*
  • =<6.6.*
  • <24423e0a9251d348c3f1fb0bb0e61b879e1e976c
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
staging: media: ipu7: fix double-free and use-after-free in error paths

In the Linux kernel, the following vulnerability has been resolved: staging: media: ipu7: fix double-free and use-after-free in error paths In both ipu7_isys_init() and ipu7_psys_init(), pdata is allocated and then passed to ipu7_bus_initialize_device(), which stores it in adev->pdata. The ipu7_bus_release() function frees adev->pdata when the device's reference count drops to zero. Two error paths incorrectly call kfree(pdata) after the device teardown has already freed it: 1. When ipu7_mmu_init() fails: put_device() is called, which drops the reference count to zero and triggers ipu7_bus_release() -> kfree(pdata). The subsequent kfree(pdata) is a double-free. 2. When ipu7_bus_add_device() fails: it calls auxiliary_device_uninit() internally, which calls put_device() -> ipu7_bus_release() -> kfree(pdata). The subsequent kfree(pdata) is again a double-free. Note that the kfree(pdata) when ipu7_bus_initialize_device() itself fails is correct, because in that case auxiliary_device_init() failed and the release function was never set up, so pdata must be freed manually. Additionally, the error code was not saved before calling put_device(), causing ERR_CAST() to dereference the already-freed adev pointer when constructing the return value. Fix this by saving the error from dev_err_probe() before put_device() and returning ERR_PTR() instead. Remove the redundant kfree(pdata) calls and fix the use-after-free in the return values of the two affected error paths.

Affected products

Linux
  • ==6.17
  • =<6.18.*
  • <6.17
  • <b5ddc7257bee71f5b8cf9083e2b0ac0427e9fbb3
  • =<7.1.*
  • =<*
  • <837c1f9655421055f751ed34745e820a54a27642
  • <d3a9a8cf2d7fd61a2f63df61f6cbc0a9bb007cc0
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
PCI: mediatek: Fix IRQ domain leak when port fails to enable

In the Linux kernel, the following vulnerability has been resolved: PCI: mediatek: Fix IRQ domain leak when port fails to enable When mtk_pcie_enable_port() fails, mtk_pcie_port_free() removes the port from pcie->ports and frees the port structure. However, the IRQ domains set up earlier by mtk_pcie_init_irq_domain() are never freed. Fix this by refactoring mtk_pcie_irq_teardown() into a per-port helper, mtk_pcie_irq_teardown_port(), and calling it from mtk_pcie_setup() when mtk_pcie_enable_port() fails. Since the IRQ teardown must only happen in the probe error path (during resume, child devices may have active MSI mappings and the NOIRQ context prohibits sleeping locks), mtk_pcie_enable_port() is changed to return an error code so callers can distinguish the two paths and act accordingly. This issue was reported by Sashiko while reviewing the EcoNet EN7528 SoC support series.

Affected products

Linux
  • <1fbe8972a39548a633d06d7b03a01b7b119a2c12
  • =<6.18.*
  • <ce52e494a7555bdae1d990a2654fd7547ef6d986
  • ==4.14
  • <f865a57896bd92d7662eb2818d8f48872e2cbbc7
  • <4.14
  • =<5.15.*
  • =<6.12.*
  • <df77314b3bedbd9ad5d6f0682f98b99e3c5f7e2e
  • =<7.1.*
  • <ec7c05eed47d8b15c45380aee7ca168a82e15035
  • =<6.1.*
  • =<6.6.*
  • =<*
  • <6e6a529d6f779413379b4404c9ef6a36c0337225
  • <fe8c701a53c2816cd82301f66c671d952003c1b0
  • <e23da72ef202654a7d5269885c4fa39a8404db76
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
bpf: Allow LPM map access from sleepable BPF programs

In the Linux kernel, the following vulnerability has been resolved: bpf: Allow LPM map access from sleepable BPF programs trie_lookup_elem() annotates its rcu_dereference_check() walks with only rcu_read_lock_bh_held(). Because rcu_dereference_check(p, c) resolves to "c || rcu_read_lock_held()", this passes for XDP/NAPI and classic RCU readers but fails for sleepable BPF programs, which enter via __bpf_prog_enter_sleepable() and hold only rcu_read_lock_trace(). trie_update_elem() and trie_delete_elem() have the same problem in a different form: they walk the trie with plain rcu_dereference(), which asserts rcu_read_lock_held() unconditionally. Both are reachable from sleepable BPF programs via the bpf_map_update_elem / bpf_map_delete_elem helpers, and from the syscall path under classic rcu_read_lock(). In the writer paths the trie is actually protected by trie->lock (an rqspinlock taken across the walk); we never relied on the RCU read-side lock to keep nodes alive there. A sleepable LSM hook that ends up touching an LPM trie therefore triggers lockdep on debug kernels: ============================= WARNING: suspicious RCU usage 7.1.0-... Tainted: G E ----------------------------- kernel/bpf/lpm_trie.c:249 suspicious rcu_dereference_check() usage! 1 lock held by net_tests/540: #0: (rcu_tasks_trace_srcu_struct){....}-{0:0}, at: __bpf_prog_enter_sleepable+0x26/0x280 Call Trace: dump_stack_lvl lockdep_rcu_suspicious trie_lookup_elem bpf_prog_..._enforce_security_socket_connect bpf_trampoline_... security_socket_connect __sys_connect do_syscall_64 This is lockdep-only -- no UAF, since Tasks Trace RCU does serialize against the trie's reclaim path -- but it spams the console once per distinct callsite on every debug kernel running a sleepable BPF LSM that touches an LPM trie, which is increasingly common. For the lookup path, switch the rcu_dereference_check() annotation from rcu_read_lock_bh_held() to bpf_rcu_lock_held(), which accepts all three contexts (classic, BH, Tasks Trace). Other map types already follow this convention. For trie_update_elem() and trie_delete_elem(), annotate the walks as rcu_dereference_protected(*p, 1) -- matching trie_free() in the same file -- since trie->lock is held across the walk. rqspinlock has no lockdep_map, so the predicate degenerates to '1' rather than lockdep_is_held(&trie->lock); the protection is real but not machine-verifiable. trie_get_next_key() also uses bare rcu_dereference() but is reachable only from the BPF syscall, which holds classic rcu_read_lock() before dispatching, so it is left untouched.

Affected products

Linux
  • <5.14
  • =<6.18.*
  • <f0967d4f1ba4323a3cb7dc8fdba74dd3a8caaf04
  • <bd6ad9a6b30498d845413e863fb95c6fab3babe3
  • =<6.12.*
  • =<7.1.*
  • <ec662a8b2cde01e76b37ccd4b992d0342299e69c
  • <57454944737f3ad9a8703aecbbb79713b513a94b
  • <304ca50582f0c047370f85e13caec456f78c9fcc
  • <9bfdf4b81b0e56d47bc6c46c34a46638be716695
  • ==5.14
  • =<5.15.*
  • =<6.1.*
  • =<6.6.*
  • =<*
  • <2f884d371fafea137afea504d49ee4a7c8d7985b
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
USB: idmouse: fix use-after-free on disconnect race

In the Linux kernel, the following vulnerability has been resolved: USB: idmouse: fix use-after-free on disconnect race mutex_unlock() may access the mutex structure after releasing the lock and therefore cannot be used to manage lifetime of objects directly (unlike spinlocks and refcounts). [1][2] Use a kref to release the driver data to avoid use-after-free in mutex_unlock() when release() races with disconnect(). [1] a51749ab34d9 ("locking/mutex: Document that mutex_unlock() is non-atomic") [2] 2b9d9e0a9ba0 ("locking/mutex: Clarify that mutex_unlock(), and most other sleeping locks, can still use the lock object after it's unlocked")

Affected products

Linux
  • <31e75fed8f90cfea9f8285e7ed135b0e452bf872
  • <f62622e947f82a3854a8502d09492ffbdeb252b4
  • =<6.18.*
  • <60fc5ef4ecea3e3d1fe556cecf53ddd13096ef09
  • <d0f61acb51a8c8f3fd41c303ddb7770cd83e7ed4
  • <54c2b7356b4aeea467f9fb13b85e9e036bc428cb
  • <ff002c153f9722caece3983cc23dc4d9d4652cb4
  • =<6.12.*
  • =<7.1.*
  • <8d53b14ad4ccbff6d306b3a39c812303f4a87d41
  • ==2.6.24
  • =<*
  • =<6.6.*
  • =<6.1.*
  • =<5.15.*
  • <e88cff5fbaa629f3cab45c8b46f395d62c2eb515
  • <2.6.24
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
cpufreq: qcom-cpufreq-hw: Fix possible double free

In the Linux kernel, the following vulnerability has been resolved: cpufreq: qcom-cpufreq-hw: Fix possible double free qcom_cpufreq.data is allocated with devm_kzalloc() in probe() as an array of per-domain data. qcom_cpufreq_hw_cpu_init() stores a pointer to one element of this array in policy->driver_data. qcom_cpufreq_hw_cpu_exit() currently calls kfree() on policy->driver_data. This is not valid because the memory is devm-managed. For the first domain, this can free the devm-managed allocation while the devres entry is still active, leading to a possible double free when the platform device is later detached. For other domains, the pointer may refer to an element inside the array rather than the allocation base. Remove the kfree(data) call and let devres release qcom_cpufreq.data. This issue was found by a static analysis tool I am developing.

Affected products

Linux
  • <9de568ef6cdfc7912d5ea8db02843c0e4ef0c75d
  • <bcb8889c4981fdde42d4fd2c29a77d510fe21da2
  • ==6.2
  • <28a03a3f6e6cda0b0da3b43761d175dec5d14d13
  • =<6.18.*
  • =<6.12.*
  • =<7.1.*
  • =<*
  • <6.2
  • <e904961332801c87355f5d11c65bb433e717c489
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
usb: dwc3: fix dwc3_readl() and dwc3_writel() calls in dwc3_ulpi_setup()

In the Linux kernel, the following vulnerability has been resolved: usb: dwc3: fix dwc3_readl() and dwc3_writel() calls in dwc3_ulpi_setup() The dwc3_ulpi_setup() calls the register read and write calls with dwc3->regs when both these calls take the dwc3 structure directly. Chnage these two calls to fix the following sparse warning, and possibly a nasty bug in the dwc3_ulpi_setup() code: drivers/usb/dwc3/core.c:796:45: warning: incorrect type in argument 1 (different address spaces) drivers/usb/dwc3/core.c:796:45: expected struct dwc3 *dwc drivers/usb/dwc3/core.c:796:45: got void [noderef] __iomem *regs drivers/usb/dwc3/core.c:798:40: warning: incorrect type in argument 1 (different address spaces) drivers/usb/dwc3/core.c:798:40: expected struct dwc3 *dwc drivers/usb/dwc3/core.c:798:40: got void [noderef] __iomem *regs

Affected products

Linux
  • ==7.0
  • <7.0
  • =<6.18.*
  • <41a4e80d5af04855e68ac88f5e2cd07fa67287f8
  • <6.18.40
  • =<7.1.*
  • =<*
  • <4349e487a1149ff33b65d53427b8aca57f2e4578
  • <e0f844d9d74200d311c6438a0f04270834ba5365
Dismissed
(max. allowed matches exceeded)
created 11 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ethtool: tsconfig: fix missing ethnl_ops_complete()

In the Linux kernel, the following vulnerability has been resolved: ethtool: tsconfig: fix missing ethnl_ops_complete() tsconfig_prepare_data() calls ethnl_ops_begin(), we need to call ethnl_ops_complete() before returning the error.

Affected products

Linux
  • =<6.18.*
  • =<7.0.*
  • <d53fe379d1f9a92e8a1bb2556084c8c177ebf8fd
  • =<*
  • <d02342d9bb4f0ab682f1846a4fbc15dd2955f7e6
  • <6.14
  • ==6.14
  • <6386bd772de64e6760306eb91c7e86163af6c22f