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 1 month, 1 week 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
  • <b736b12108fd116c41777628f5a333791604df26
  • <6bf41db09ef935d76fcc84ccf213b42c18de95ee
  • <b5699642640d6cff357638738c5293985cd5a53d
  • <a22cb6bb54dc167047ea9e70d97dfbc2c15649e3
  • <9830725078c8483c6831ec10222ae724806ea36b
  • <2.6.12
  • =<6.1.*
  • <36fe7d25dbc40da0c6b1dd4513a4f69ac6164eee
  • ==2.6.12
  • =<5.15.*
  • <5fa1d6a5ec2356d2107dead614437c66fa7138b1
  • =<6.12.*
  • =<6.18.*
  • =<*
  • <1015e1c4b2fadd9c09704e24738e46598778c869
  • =<6.6.*
  • =<5.10.*
  • =<7.1.*
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
rust_binder: clear freeze listener on node removal

In the Linux kernel, the following vulnerability has been resolved: rust_binder: clear freeze listener on node removal Generally userspace is supposed to explicitly clear freeze listeners before they drop the refcount on the node ref to zero, but there's nothing forcing that. Currently, in this scenario the freeze listener remains in the freeze_listeners rbtree and in the remote node's freeze listener list, even though the ref for which the listener is registered is gone. This could potentially lead to a memory leak due to a refcount cycle. Thus, remove the freeze listener in this scenario.

Affected products

Linux
  • <0644da3621ddd8e146280675a2a31d1e06634a1d
  • =<7.1.*
  • =<*
  • <91b27f8172cdbf265240104772fd042a461a7767
  • <6.18
  • =<6.18.*
  • ==6.18
  • <bc4a9828897871ff3e5a1f8a1d346decbf4ee95e
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
iio: pressure: mpl115: fix runtime PM leak on read error

In the Linux kernel, the following vulnerability has been resolved: iio: pressure: mpl115: fix runtime PM leak on read error mpl115_read_raw() takes a runtime PM reference with pm_runtime_get_sync() before reading the processed pressure or raw temperature, but on the read error path it returns without calling pm_runtime_put_autosuspend(). Each failed read therefore leaks a runtime PM reference and prevents the device from autosuspending. Drop the reference before checking the return value so both the success and error paths are balanced.

Affected products

Linux
  • ==6.2
  • <b3f1af4ba8e9cf33aa08c4cdcaa5a17b140521ec
  • =<7.1.*
  • <46e69d3dd429b33e50e2731913239f6af4ea2705
  • =<*
  • <aab0fed636b14a5fd52fcae58b484f1cb96b841d
  • <fbe67ff37a6fd855a6c097f84f3738bd13d0a898
  • =<6.18.*
  • =<6.12.*
  • =<6.6.*
  • <6.2
  • <5022f4ed5aae974ec530e3cbf0bd223be13055f7
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
xhci: sideband: fix ring sg table pages leak

In the Linux kernel, the following vulnerability has been resolved: xhci: sideband: fix ring sg table pages leak xhci_ring_to_sgtable() allocates a temporary pages array and uses it to build the returned sg_table with sg_alloc_table_from_pages(). The error paths free the pages array, but the success path returns the sg_table without freeing it. This leaks the temporary array every time a sideband client gets an endpoint or event ring buffer. Free the pages array after sg_alloc_table_from_pages() succeeds. The returned sg_table has its own scatterlist entries and does not depend on the temporary array after construction.

Affected products

Linux
  • =<*
  • =<7.1.*
  • <49f6e3c3ef19f04f6657ed8dce550e36c763abb8
  • <99d00a9e35e311a91d258029d5bb584377296c34
  • =<6.18.*
  • <a3eaf82ff842d6ca95937ea584417e04828235a6
  • <6.16
  • ==6.16
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
fuse: clear intr_entry in fuse_resend and fuse_remove_pending_req

In the Linux kernel, the following vulnerability has been resolved: fuse: clear intr_entry in fuse_resend and fuse_remove_pending_req When fuse_resend() moves a request from fpq->processing back to fiq->pending, it sets FR_PENDING and clears FR_SENT but does not remove the requests intr_entry from fiq->interrupts. If the request had FR_INTERRUPTED set from a prior signal, intr_entry remains dangling on fiq->interrupts. When the requesting task then receives a fatal signal, fuse_remove_pending_req() sees FR_PENDING=1, removes the request from fiq->pending and frees it via the refcount path, also without cleaning intr_entry. The stale intr_entry causes use-after-free when fuse_read_interrupt() iterates fiq->interrupts: - list_del_init(&req->intr_entry) -> UAF write on freed slab - req->in.h.unique -> UAF read, data leaked to userspace Remove intr_entry from fiq->interrupts in fuse_resend() for interrupted requests before they are placed back on fiq->pending. Add a WARN_ON if the intr_entry is not empty on request destruction.

Affected products

Linux
  • <f8fce75fedf73ac72aa09163deb8f4291fdcaad2
  • <1d8ecd0cd696a5df0b2f72046a4ccee5d2a8ec2c
  • =<7.1.*
  • =<*
  • <6.9
  • =<6.18.*
  • ==6.9
  • <7366e6f4d2b4c7002b13fb01219e83679dad4127
  • <893479015cb6442fd389d3b553ab3036c9541715
  • =<6.12.*
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler The OTG branch of composite_setup() falls back to the first configuration when none is selected: if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value); list_first_entry() never returns NULL. On an empty list it returns container_of() of the list head. So the "if (!config)" check is dead. When cdev->configs is empty, config points at the head inside struct usb_composite_dev. config->descriptors[0] reads whatever sits at that offset. The memcpy copies up to w_length bytes of it into the response buffer. cdev->configs can be empty in two cases. One is a teardown race on gadget unbind with a control transfer in flight. The other is a driver that sets is_otg before it adds a config. A reproducer that holds cdev->configs empty triggers a KASAN fault in this branch. Use list_first_entry_or_null() so the existing check does its job.

Affected products

Linux
  • <2454264b2ab4cf0055c0bfd39e79f830452bd0db
  • <8ac463fe6c0f85bdb1ce8c30e8c9e060802e4483
  • =<6.1.*
  • =<7.1.*
  • =<*
  • ==4.3
  • =<5.15.*
  • <91b3ecd34b60f950c50c560974945b6596a6f207
  • =<5.10.*
  • =<6.18.*
  • <f8f680609c2b3ab795ffcd6f21585b6dfc46d395
  • <d3e72cfef2e38bd588055739a8100d14f9773b17
  • <01feaf024f29618d5ffa7ab0fd858e0579dcbf7b
  • =<6.6.*
  • =<6.12.*
  • <4.3
  • <56add2b9b2e89ec61c0761165d758f73004fdfdf
  • <fcb21bf747640c9d6bd1eda9da85420f076d59c1
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
module: decompress: check return value of module_extend_max_pages()

In the Linux kernel, the following vulnerability has been resolved: module: decompress: check return value of module_extend_max_pages() module_extend_max_pages() calls kvrealloc() internally and returns -ENOMEM on allocation failure. The return value is never checked. If the initial allocation fails, info->pages remains NULL and info->max_pages remains 0. Subsequent calls to module_get_next_page() will attempt to dynamically grow the array by calling module_extend_max_pages(info, 0) since info->used_pages is 0. This results in kvrealloc(NULL, 0) returning ZERO_SIZE_PTR, which is treated as a success, leading to a dereference of ZERO_SIZE_PTR and a kernel oops. Fix: add the missing error check after module_extend_max_pages() and return immediately on failure. This matches the pattern used by every other kvrealloc() caller in the module loading path. [Sami: Corrected the analysis in the commit message.]

Affected products

Linux
  • <168072baf9ad516d5a06046514c7fea4c0671990
  • =<6.1.*
  • <a82e170637e050a803b4f37542371ef216bf66d2
  • =<7.1.*
  • =<*
  • <e7f174715f9f0cbcb9e87b52e4fc4ef149baac98
  • =<6.18.*
  • <786d2d84416a9a1c1a47b71a68d679d886284be2
  • <e7da02659c229f73492fb1ed87ceda4090153aaa
  • ==5.17
  • =<6.6.*
  • =<6.12.*
  • <5.17
  • <afcc0515bbdd28d509a2b5870faaa89b137f5d53
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
usb: gadget: f_fs: Fix DMA fence leak

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_fs: Fix DMA fence leak In ffs_dmabuf_transfer(), a ffs_dma_fence object is kmalloc'd, with the underlying dma_fence later initialized by dma_fence_init(), which sets its kref counter to 1. Then, dma_resv_add_fence() gets a second reference, and a pointer to the ffs_dma_fence is passed as the usb_request's "context" field. The dma-resv mechanism will manage the second reference, but the first reference is never properly released; the ffs_dmabuf_cleanup() function decreases the reference count, but only to balance with the reference grab in ffs_dmabuf_signal_done(). The code will then slowly leak memory as more ffs_dma_fence objects are created without being ever freed. Address this issue by transferring ownership of the fence to the DMA reservation object, by calling dma_fence_put() right after dma_resv_add_fence(). The ffs_dma_fence then gets properly discarded after being signalled.

Affected products

Linux
  • <b7475b2dce5e121e687280ba5732ccefe77ffd2f
  • <e086c16962a1b0142e2675610e9c06fcfcd4c3a8
  • =<7.1.*
  • =<*
  • <6.9
  • =<6.18.*
  • ==6.9
  • =<6.12.*
  • <0cae3d6109427c455bad0a18dfb3e2a91657e38a
  • <baa6b6068a3f2bf2ed525a1cb37975905dadc658
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
ntfs: avoid calling post_write_mst_fixup() for invalid index_block

In the Linux kernel, the following vulnerability has been resolved: ntfs: avoid calling post_write_mst_fixup() for invalid index_block ntfs_icx_ib_sync_write() calls post_write_mst_fixup() when ntfs_ib_write() returns an error, intending to restore the buffer after a failed write. However, ntfs_ib_write() returns an error immediately if pre_write_mst_fixup() validation fails. The caller, ntfs_icx_ib_sync_write(), interprets any error as a write failure requiring rollback. It does not differentiate between I/O errors and validation failures, and calls post_write_mst_fixup() anyway. Since post_write_mst_fixup() assumes that the index_block contents is correct, it doesn't perform the boundary checks, which results in out-of-bounds memory access. An attacker can craft a malicious NTFS image with: - large index_block.usa_ofs offset, pointing outside the ntfs_record - index_block.usa_count = 0, causing integer underflow - or index_block.usa_count larger than actual number of sectors in the ntfs_record, causing out-of-bounds access KASAN reports describing the memory corruption: ================================================================== BUG: KASAN: slab-out-of-bounds in post_write_mst_fixup+0x19c/0x1d0 Read of size 2 at addr ffff8881586c9018 by task p/9428 Call Trace: <TASK> dump_stack_lvl+0x100/0x190 print_report+0x139/0x4ad ? post_write_mst_fixup+0x19c/0x1d0 ? __virt_addr_valid+0x262/0x500 ? post_write_mst_fixup+0x19c/0x1d0 kasan_report+0xe4/0x1d0 ? post_write_mst_fixup+0x19c/0x1d0 post_write_mst_fixup+0x19c/0x1d0 ntfs_icx_ib_sync_write+0x179/0x220 ntfs_inode_sync_filename+0x83d/0x1080 __ntfs_write_inode+0x1049/0x1480 ntfs_file_fsync+0x131/0x9b0 ================================================================== BUG: KASAN: slab-out-of-bounds in post_write_mst_fixup+0x1aa/0x1d0 Write of size 2 at addr ffff8881586c91fe by task p/9428 Call Trace: <TASK> dump_stack_lvl+0x100/0x190 print_report+0x139/0x4ad ? post_write_mst_fixup+0x1aa/0x1d0 ? __virt_addr_valid+0x262/0x500 ? post_write_mst_fixup+0x1aa/0x1d0 kasan_report+0xe4/0x1d0 ? post_write_mst_fixup+0x1aa/0x1d0 post_write_mst_fixup+0x1aa/0x1d0 ntfs_icx_ib_sync_write+0x179/0x220 ntfs_inode_sync_filename+0x83d/0x1080 __ntfs_write_inode+0x1049/0x1480 ntfs_file_fsync+0x131/0x9b0 ================================================================== Let's move the post_write_mst_fixup() call to ntfs_ib_write(). The ntfs_ib_write() function calls pre_write_mst_fixup() at the beginning. If the index_block contents is invalid, pre_write_mst_fixup() fails and ntfs_ib_write() returns early without calling post_write_mst_fixup() on bad index_block.

Affected products

Linux
  • ==7.1
  • =<7.1.*
  • <5b6eedd7cc2936f9238e852b553a1b326105bde8
  • =<*
  • <e2018628301a6d9f54e34b0cb417f1688c66df1d
  • <7.1
Dismissed
(max. allowed matches exceeded)
created 1 month, 1 week ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
usb: typec: tcpci_rt1711h: unregister TCPCI port with devres

In the Linux kernel, the following vulnerability has been resolved: usb: typec: tcpci_rt1711h: unregister TCPCI port with devres rt1711h_probe() registers the TCPCI port before requesting the interrupt and enabling alert interrupts. If either of those later steps fails, the probe function returns without unregistering the TCPCI port. The explicit unregister currently only happens from the remove callback. Register a devres action immediately after tcpci_register_port() succeeds, so tcpci_unregister_port() runs on later probe failures and on driver detach. Drop the remove callback to avoid unregistering the same port twice. This issue was identified during our ongoing static-analysis research while reviewing kernel code.

Affected products

Linux
  • <e8da46d99d3710106e7c44db14566bf9b57386b5
  • ==4309ab96ab744703871e35d829177dd9347bf643
  • <94b1abf1af94aa5a355e9f03675e07bccfc41c4b
  • <5.8
  • =<7.1.*
  • =<*
  • =<6.18.*
  • <5.5
  • <569f18a83eed0b0be4615f0c7bed40fb5c50e2e6
  • ==745dcedb896a740825160228f98dbb5725a49f85
  • ==895ec8c86e13f85b119c71d5f95491b48867955e
  • <5.8
  • =<6.6.*
  • =<6.12.*
  • <e5406c8fb71cd2f89a46300a746f6e7972e621e8
  • <4.20
  • <ce2e36e8759dfbfe546723810c306f42f484866d
  • ==5.8