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 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
HID: letsketch: fix UAF on inrange_timer at driver unbind

In the Linux kernel, the following vulnerability has been resolved: HID: letsketch: fix UAF on inrange_timer at driver unbind letsketch_driver does not provide a .remove callback, but letsketch_probe() arms a per-device timer: timer_setup(&data->inrange_timer, letsketch_inrange_timeout, 0); The timer is re-armed from letsketch_raw_event() with a 100 ms timeout on every pen-in-range report, and its callback dereferences data->input_tablet to deliver a synthetic BTN_TOOL_PEN release. letsketch_data is allocated with devm_kzalloc(), and its input_dev fields are devm-allocated via letsketch_setup_input_tablet(). On device unbind (USB unplug or rmmod), the HID core runs its default teardown and devm cleanup frees both letsketch_data and the input devices. Because no .remove callback exists, nothing drains the timer first: if raw_event armed it within ~100 ms of the unbind, the pending timer fires on freed memory. This is a UAF read of data and of data->input_tablet, followed by input_report_key() / input_sync() into the freed input_dev. The same problem can occur on the probe error path: if hid_hw_start() enabled I/O on an always-poll-quirk device and then failed, raw_event may have armed the timer before devm releases data. Fix by adding a .remove callback that calls hid_hw_stop() first. hid_hw_stop() synchronously kills the URBs that deliver raw_event(), so once it returns no path can re-arm the timer. timer_shutdown_sync() then drains any in-flight callback and permanently disables further mod_timer() calls. Apply the same timer_shutdown_sync() in the probe error path so the timer is guaranteed not to outlive data.

Affected products

Linux
  • =<6.18.*
  • <2bb6e7143cf70ed281822d26c1848b2897ac36e9
  • <17f5928d7010bc9e002930326b59e60e40c09ee3
  • <3eca1a8165b5e7996e699e9df76cb4645e184d42
  • ==5.17
  • =<6.12.*
  • <46c8beeccd8ab2c863827254a85ea877654a3534
  • <df3d8aa1a9392da3de66398e7a03422463806b21
  • <5.17
  • =<7.1.*
  • =<6.1.*
  • =<*
  • =<6.6.*
  • <523db788c0f84612707638e266e8957ca7e3a756
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
Bluetooth: btusb: fix use-after-free on marvell probe failure

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: btusb: fix use-after-free on marvell probe failure Make sure to stop any TX URBs submitted during Marvell OOB wakeup configuration on later probe failures to avoid use-after-free in the completion callback. This issue was reported by Sashiko while reviewing a fix for a wakeup source leak in the btusb probe errors paths.

Affected products

Linux
  • <92c736866244340497a8a65afe2ac25354c2bf5e
  • <c5b600a3c05b1a7a110d558df935a8fc8a471c79
  • <838c917a2f16eefe68def800ebf48a2af591149a
  • <4.11
  • =<6.18.*
  • <1edd524de5cc8143ece9c42c466346983dc5b5ed
  • =<6.12.*
  • ==4.11
  • <a7e941a395711791c7e98d9870c6562c2c9e9ef2
  • <0ccb1cb0a464dab78284c34196cd3e8e18bab4c4
  • =<7.1.*
  • =<6.1.*
  • =<*
  • =<6.6.*
  • <631de465aba7f8ae46478bf5f598111412e8eff8
  • =<5.15.*
  • <6e1b10df890f4663cb38af9fc1c93d36747b75af
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
Input: synaptics-rmi4 - bound the F3A keymap to the GPIO count

In the Linux kernel, the following vulnerability has been resolved: Input: synaptics-rmi4 - bound the F3A keymap to the GPIO count rmi_f3a_initialize() takes the GPIO count from the device query register (f3a->gpio_count = buf & RMI_F3A_GPIO_COUNT, range 0..127). rmi_f3a_map_gpios() then allocates gpio_key_map with min(gpio_count, TRACKSTICK_RANGE_END) == at most 6 entries, but rmi_f3a_attention() iterates the full gpio_count and dereferences gpio_key_map[i], and input->keycodemax is set to the full gpio_count while input->keycode points at the 6-entry allocation. A device that reports gpio_count > 6 therefore causes an out-of-bounds read of gpio_key_map[] on every attention interrupt, and out-of-bounds accesses through the input core's default keymap ioctls: EVIOCGKEYCODE reads past the buffer (leaking adjacent slab memory to user space) and EVIOCSKEYCODE writes a caller-controlled value past it, for any process able to open the evdev node, since input_default_getkeycode() and input_default_setkeycode() only bound the index against keycodemax. Size the keymap for the full gpio_count. The mapping loop is unchanged: it still assigns only the first min(gpio_count, TRACKSTICK_RANGE_END) entries; the remaining slots stay KEY_RESERVED (devm_kcalloc zero-fills) and are skipped when reporting.

Affected products

Linux
  • <8db211aed83733073b0814adaeeab61d4521474e
  • <57c10915f2c16c90e0d46ad00876bf39ece40fc2
  • =<6.18.*
  • <850117b637bcb1dcc14be0cf09ac819a8707b42c
  • <3480e24bc4e178aaa009edb25b6ee12df199e210
  • =<6.12.*
  • <35ed74d32d8260bdfb14a94caf402bf0866bdeec
  • =<7.1.*
  • <502ad7caaa1a445b734c827fa256e5311df67e3d
  • =<6.1.*
  • <5.10
  • =<6.6.*
  • <ba57f430328534501962d60d651e385ffd7af9ca
  • <64fb0e1161ccc6b9e48b8df61f07d3c34c01ec42
  • =<5.15.*
  • =<*
  • ==5.10
  • =<5.10.*
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
iio: buffer: hw-consumer: free scan_mask on buffer release

In the Linux kernel, the following vulnerability has been resolved: iio: buffer: hw-consumer: free scan_mask on buffer release The scan_mask lifetime changed in commit 9a2e1233d38c ("iio: buffer: hw-consumer: remove redundant scan_mask flexible array"). Before that change, the scan mask storage was embedded in struct hw_consumer_buffer, so iio_hw_buf_release() could free the whole allocation with a single kfree(hw_buf). That commit moved the scan mask to a separate bitmap_zalloc() allocation stored in buffer.scan_mask, but left iio_hw_buf_release() unchanged. Free the scan mask in iio_hw_buf_release() before freeing the buffer wrapper.

Affected products

Linux
  • ==7.1
  • <6325d6e2204327965b849c0a16efb6ac9202e5a8
  • =<7.1.*
  • =<*
  • <7.1
  • <fb8e18f8ca724bd4de4643cad5b7c7230b9a5a71
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
crypto: qat - remove unused character device and IOCTLs

In the Linux kernel, the following vulnerability has been resolved: crypto: qat - remove unused character device and IOCTLs The QAT driver exposes a character device (qat_adf_ctl) with IOCTLs for device configuration, start, stop, status query and enumeration. These IOCTLs are not part of any public uAPI header and have no known in-tree or out-of-tree users. Device lifecycle is already managed via sysfs. The ioctl interface also increases the attack surface and is the subject of a number of bug reports. Remove the character device, the IOCTL definitions, and the related data structures (adf_dev_status_info, adf_user_cfg_key_val, adf_user_cfg_section, adf_user_cfg_ctl_data). Drop the now-unused adf_cfg_user.h header and strip adf_ctl_drv.c down to the minimal module_init/module_exit hooks for workqueue, AER, and crypto/compression algorithm registration. Clean up leftover dead code that was only reachable from the removed IOCTL paths: adf_cfg_del_all(), adf_devmgr_verify_id(), adf_devmgr_get_num_dev(), adf_devmgr_get_dev_by_id(), adf_get_vf_real_id() and the unused ADF_CFG macros. Additionally, drop the entry associated to QAT IOCTLs in ioctl-number.rst.

Affected products

Linux
  • <3.17
  • <1de076f43e64bf65fbe7280a269c70e0e60518df
  • <071590a44cbc38483fceb1ab943363ec26868e1b
  • <d237230728c567297f2f98b425d63156ab2ed17f
  • =<7.1.*
  • <b1ea97076bd0a5196290deba172034e480646727
  • =<6.1.*
  • =<5.15.*
  • =<5.10.*
  • =<7.0.*
  • <6848a6e39cac44fdb7cb88f0f777df62172d1551
  • <de2cc38489b629927910b1aeff69bba7bd5c6f1b
  • =<6.6.*
  • =<6.18.*
  • <a4999664a5ef77bdb0c6e6b935f581ac8ce6b63a
  • <b8ebf008696de1ec08c90d51f94d7e40bd448be1
  • =<6.12.*
  • =<*
  • ==3.17
  • <3ae49dd04dbb11fb73f17f58a982dba128abe83a
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
netpoll: fix a use-after-free on shutdown path

In the Linux kernel, the following vulnerability has been resolved: netpoll: fix a use-after-free on shutdown path There is a use-after-free error on netpoll, which is clearly detected by KASAN. BUG: KASAN: slab-use-after-free in _raw_spin_lock_irqsave+0x3b/0x80 Read of size 1 at addr ... by task kworker/9:1 Workqueue: events queue_process Call Trace: skb_dequeue+0x1e/0xb0 queue_process+0x2c/0x600 process_scheduled_works+0x4b6/0x850 worker_thread+0x414/0x5a0 Allocated by task 242: __netpoll_setup+0x201/0x4a0 netpoll_setup+0x249/0x550 enabled_store+0x32f/0x380 Freed by task 0: kfree+0x1b7/0x540 rcu_core+0x3f8/0x7a0 The problem happens when there is a pending TX worker running in parallel with the cleanup path. This is what happens on netpoll shutdown path: 1) __netpoll_cleanup() is called 2) set dev->npinfo to NULL 3) call_rcu() with rcu_cleanup_netpoll_info() 3.1) rcu_cleanup_netpoll_info() tries to cancel all workers with cancel_delayed_work(), but doesn't wait for the worker to finish 4) and kfree(npinfo); Because 3.1) doesn't really cancel the work, as the comment says "we can't call cancel_delayed_work_sync here, as we are in softirq", the TX worker can run after 4). Tl;DR: queue_process() is not an RCU reader, it reaches npinfo through the work item via container_of(). Use disable_delayed_work_sync() to ensure the worker is completely stopped and prevent any future re-arming attempts. Once npinfo is set to NULL, senders will bail out and not queue new work. The disable flag ensures any in-flight re-arming attempts also fail silently. In the future, we can do the cleanup inline here without needing the npinfo->rcu rcu_head, but that is net-next material.

Affected products

Linux
  • <5ed09a108d93a3b002cc79823d9455b50c4a8be7
  • <a33f37f8d079da7236ed7b7e2aed2a34ab81e7cf
  • =<6.18.*
  • ==3.6
  • <3.6
  • =<6.12.*
  • =<7.1.*
  • <95ecc5b58042f6b6743b589e6588f1cd7ba336aa
  • =<*
  • <45f1458a85017a023f138b22ac5c76abd477db42
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
iommufd: Use sizeof(*hdr) instead of sizeof(hdr) in veventq read

In the Linux kernel, the following vulnerability has been resolved: iommufd: Use sizeof(*hdr) instead of sizeof(hdr) in veventq read The bound-check in iommufd_veventq_fops_read() for the normal vEVENT path uses sizeof(hdr) where the surrounding code uses sizeof(*hdr): if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) { hdr is declared as struct iommufd_vevent_header *, so sizeof(hdr) evaluates to the size of the pointer. Surrounding code uses sizeof(*hdr) consistently: if (done >= count || sizeof(*hdr) > count - done) { ... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) { ... done += sizeof(*hdr); struct iommufd_vevent_header is currently 8 bytes (two __u32 fields, flags and sequence), so on 64-bit (sizeof(void *) == 8) the two expressions happen to be equal and the check works as intended. On 32-bit (sizeof(void *) == 4) the check under-counts the header by 4 bytes: a vEVENT whose data_len causes 8 + cur->data_len to exceed count - done while 4 + cur->data_len does not will pass the check, then the loop will copy_to_user 8 bytes of header followed by data_len bytes of payload, writing past the user-supplied buffer. It is also a latent bug for any future expansion of struct iommufd_vevent_header beyond sizeof(void *) on 64-bit; the check should not depend on the type happening to match the host pointer width. Use sizeof(*hdr) to match the rest of the function and the actual amount that will be copied.

Affected products

Linux
  • <04a177f91160ee18da98f5689482cf0f589ec869
  • <6.15
  • <0cdbb97a4dbd69abdd2ab998b4fbc7803d4b0b72
  • =<6.18.*
  • <be93d186ae88a92e7aa77e122d4e661fa57b1e39
  • ==6.15
  • =<7.1.*
  • =<*
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
iio: adc: ad_sigma_delta: fix CS held asserted and state leaks

In the Linux kernel, the following vulnerability has been resolved: iio: adc: ad_sigma_delta: fix CS held asserted and state leaks In ad_sigma_delta_single_conversion(), set_mode(AD_SD_MODE_IDLE) and disable_one() were called from the out: block while keep_cs_asserted was still true. This caused any SPI transfer issued by those callbacks to carry cs_change=1, leaving CS permanently asserted after the conversion. Fix by moving both calls into the out_unlock: block, after keep_cs_asserted is cleared, matching the pattern already used in ad_sd_calibrate(). In the error path of ad_sd_buffer_postenable(), if an operation fails after set_mode(AD_SD_MODE_CONTINUOUS) has already succeeded (e.g. spi_offload_trigger_enable()), the device is left in continuous conversion mode with CS physically asserted. Additionally, bus_locked remaining true after spi_bus_unlock() causes subsequent SPI operations to call spi_sync_locked() without the bus lock actually held, allowing concurrent SPI access. Fix the error path by clearing keep_cs_asserted first, then calling set_mode(AD_SD_MODE_IDLE) to revert the device mode and deassert CS, then clearing bus_locked before releasing the bus. For devices that implement neither set_mode nor disable_one (such as MAX11205, which has no physical CS pin), no SPI transfer is issued during cleanup and the cs_change flag has no effect on any physical line.

Affected products

Linux
  • =<6.18.*
  • <c313bb7c38855e94ceef939d152dd75e5a904b5f
  • <f1de829ee87a1198d3465493ce430d36c5fa029c
  • =<7.1.*
  • <c72da0688575e5ef39c36bb44fed53aa18f8ae65
  • =<*
  • <6.14
  • ==6.14
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
Bluetooth: fix UAF in bt_accept_dequeue()

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: fix UAF in bt_accept_dequeue() bt_accept_get() takes a temporary reference before dropping the accept queue lock. bt_accept_dequeue() currently drops that reference before bt_accept_unlink(), leaving only the queue reference. bt_accept_unlink() drops the queue reference. The subsequent sock_hold() therefore accesses freed memory if it was the final reference, as observed by KASAN during listening L2CAP socket cleanup. Retain the temporary queue-walk reference through unlink and hand it to the caller on success. Drop it explicitly on the closed and not-yet-connected paths.

Affected products

Linux
  • <5.10.261
  • <96ad400d5132eb333f28f6f1e2d58f0728ca9547
  • <50c662bdcd51b03033a0abed6716bfd377ba1049
  • =<7.1.*
  • =<6.1.*
  • <4bd0b274054f2679f28b70222b607bb0afc3ab9a
  • <0a98ff4e7b867f72fbb4e1237d81e9fa02ded0a0
  • =<5.15.*
  • =<5.10.*
  • ==a5ca86a6097a8b030ca3226cd300b17ed330f966
  • <5.15.212
  • <6.12.96
  • <7.1
  • <c0577c55219be42b6ea2ea8db11e85bfab6f4e8d
  • <7.1
  • <6.6.145
  • <c66a95e60b65d876a927123b0ed36bd6177d9ca6
  • =<6.6.*
  • <6.1.178
  • =<6.18.*
  • <26168db1ce5a9766cde021b18e590a101c056614
  • ==7.1
  • =<6.12.*
  • =<*
  • <6303ed4bbe0095f4cc195225479bf506e010d1db
  • <6.18.39
Dismissed
(max. allowed matches exceeded)
created 22 hours ago Activity log
  • Created & dismissed (max. allowed matches exceeded) suggestion
udf: validate sparing table length as an entry count, not a byte count

In the Linux kernel, the following vulnerability has been resolved: udf: validate sparing table length as an entry count, not a byte count udf_load_sparable_map() accepts a sparing table when sizeof(*st) + le16_to_cpu(st->reallocationTableLen) > sb->s_blocksize is false, i.e. it treats reallocationTableLen as a number of BYTES that must fit in the block. But the table is walked as an array of 8-byte sparingEntry elements: for (i = 0; i < le16_to_cpu(st->reallocationTableLen); i++) { struct sparingEntry *entry = &st->mapEntry[i]; ... entry->origLocation ... } in udf_get_pblock_spar15() and udf_relocate_blocks(). A reallocationTableLen of N therefore passes the check whenever sizeof(*st) + N <= blocksize, yet the consumers index sizeof(*st) + N * sizeof(struct sparingEntry) bytes -- up to ~8x the block. On a crafted UDF image this is an out-of-bounds read in udf_get_pblock_spar15(); udf_relocate_blocks() additionally feeds the same length to udf_update_tag(), whose crc_itu_t() reads far past the block, and its memmove() through st->mapEntry[] is an out-of-bounds write. Validate reallocationTableLen as the entry count it is, with struct_size().

Affected products

Linux
  • <3.5
  • <3.1
  • ==e240873cb4a9fd18de60a817100a96fe670d4359
  • <3ec997bd5508e9b25210b5bbec89031629cdb093
  • ==3.5
  • =<7.1.*
  • =<6.1.*
  • =<5.15.*
  • =<5.10.*
  • ==9ae30e324a96d0328a575329d7a95a09b3318601
  • <eeb0f3e193f8e523d03e4c9e084f6b4875f50e8e
  • <04f4599a9efb90992d072a814960edf0cd62805d
  • <2d726135099313958f8975532a2e15322ff150ce
  • ==b1c5701ad6b3e5d21d16f65475651cfaaa41e7aa
  • <7285276aa50d2839afb5957ffd491ad282dc8f72
  • <7f7774b9da0ef17b87bfa238cf966ad0b3376150
  • =<6.6.*
  • <2.6.35
  • <0a9b79a951cfd70a9d31ca01ae2d08a20bb730e9
  • <3.3
  • =<6.18.*
  • ==a9f1af04f086656246f30354fb4564ce3b08c4a0
  • =<6.12.*
  • =<*
  • ==4836ee563d65bb492f907cbe267a5761b9693e4d
  • <3.5
  • <2a219acb2ce674d99bbd1b7b35ed8c384dac7200
  • <2.6.33