CVE-2025-39995 (GCVE-0-2025-39995)
Vulnerability from cvelistv5
Published
2025-10-15 07:58
Modified
2025-10-15 10:22
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
media: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe
The state->timer is a cyclic timer that schedules work_i2c_poll and
delayed_work_enable_hotplug, while rearming itself. Using timer_delete()
fails to guarantee the timer isn't still running when destroyed, similarly
cancel_delayed_work() cannot ensure delayed_work_enable_hotplug has
terminated if already executing. During probe failure after timer
initialization, these may continue running as orphans and reference the
already-freed tc358743_state object through tc358743_irq_poll_timer.
The following is the trace captured by KASAN.
BUG: KASAN: slab-use-after-free in __run_timer_base.part.0+0x7d7/0x8c0
Write of size 8 at addr ffff88800ded83c8 by task swapper/1/0
...
Call Trace:
<IRQ>
dump_stack_lvl+0x55/0x70
print_report+0xcf/0x610
? __pfx_sched_balance_find_src_group+0x10/0x10
? __run_timer_base.part.0+0x7d7/0x8c0
kasan_report+0xb8/0xf0
? __run_timer_base.part.0+0x7d7/0x8c0
__run_timer_base.part.0+0x7d7/0x8c0
? rcu_sched_clock_irq+0xb06/0x27d0
? __pfx___run_timer_base.part.0+0x10/0x10
? try_to_wake_up+0xb15/0x1960
? tmigr_update_events+0x280/0x740
? _raw_spin_lock_irq+0x80/0xe0
? __pfx__raw_spin_lock_irq+0x10/0x10
tmigr_handle_remote_up+0x603/0x7e0
? __pfx_tmigr_handle_remote_up+0x10/0x10
? sched_balance_trigger+0x98/0x9f0
? sched_tick+0x221/0x5a0
? _raw_spin_lock_irq+0x80/0xe0
? __pfx__raw_spin_lock_irq+0x10/0x10
? tick_nohz_handler+0x339/0x440
? __pfx_tmigr_handle_remote_up+0x10/0x10
__walk_groups.isra.0+0x42/0x150
tmigr_handle_remote+0x1f4/0x2e0
? __pfx_tmigr_handle_remote+0x10/0x10
? ktime_get+0x60/0x140
? lapic_next_event+0x11/0x20
? clockevents_program_event+0x1d4/0x2a0
? hrtimer_interrupt+0x322/0x780
handle_softirqs+0x16a/0x550
irq_exit_rcu+0xaf/0xe0
sysvec_apic_timer_interrupt+0x70/0x80
</IRQ>
...
Allocated by task 141:
kasan_save_stack+0x24/0x50
kasan_save_track+0x14/0x30
__kasan_kmalloc+0x7f/0x90
__kmalloc_node_track_caller_noprof+0x198/0x430
devm_kmalloc+0x7b/0x1e0
tc358743_probe+0xb7/0x610 i2c_device_probe+0x51d/0x880
really_probe+0x1ca/0x5c0
__driver_probe_device+0x248/0x310
driver_probe_device+0x44/0x120
__device_attach_driver+0x174/0x220
bus_for_each_drv+0x100/0x190
__device_attach+0x206/0x370
bus_probe_device+0x123/0x170
device_add+0xd25/0x1470
i2c_new_client_device+0x7a0/0xcd0
do_one_initcall+0x89/0x300
do_init_module+0x29d/0x7f0
load_module+0x4f48/0x69e0
init_module_from_file+0xe4/0x150
idempotent_init_module+0x320/0x670
__x64_sys_finit_module+0xbd/0x120
do_syscall_64+0xac/0x280
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Freed by task 141:
kasan_save_stack+0x24/0x50
kasan_save_track+0x14/0x30
kasan_save_free_info+0x3a/0x60
__kasan_slab_free+0x3f/0x50
kfree+0x137/0x370
release_nodes+0xa4/0x100
devres_release_group+0x1b2/0x380
i2c_device_probe+0x694/0x880
really_probe+0x1ca/0x5c0
__driver_probe_device+0x248/0x310
driver_probe_device+0x44/0x120
__device_attach_driver+0x174/0x220
bus_for_each_drv+0x100/0x190
__device_attach+0x206/0x370
bus_probe_device+0x123/0x170
device_add+0xd25/0x1470
i2c_new_client_device+0x7a0/0xcd0
do_one_initcall+0x89/0x300
do_init_module+0x29d/0x7f0
load_module+0x4f48/0x69e0
init_module_from_file+0xe4/0x150
idempotent_init_module+0x320/0x670
__x64_sys_finit_module+0xbd/0x120
do_syscall_64+0xac/0x280
entry_SYSCALL_64_after_hwframe+0x77/0x7f
...
Replace timer_delete() with timer_delete_sync() and cancel_delayed_work()
with cancel_delayed_work_sync() to ensure proper termination of timer and
work items before resource cleanup.
This bug was initially identified through static analysis. For reproduction
and testing, I created a functional emulation of the tc358743 device via a
kernel module and introduced faults through the debugfs interface.
References
Impacted products
Vendor | Product | Version | |||||||
---|---|---|---|---|---|---|---|---|---|
▼ | Linux | Linux |
Version: d32d98642de66048f9534a05f3641558e811bbc9 Version: d32d98642de66048f9534a05f3641558e811bbc9 Version: d32d98642de66048f9534a05f3641558e811bbc9 Version: d32d98642de66048f9534a05f3641558e811bbc9 Version: d32d98642de66048f9534a05f3641558e811bbc9 Version: d32d98642de66048f9534a05f3641558e811bbc9 |
||||||
|
{ "containers": { "cna": { "affected": [ { "defaultStatus": "unaffected", "product": "Linux", "programFiles": [ "drivers/media/i2c/tc358743.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThan": "3d17701c156579969470e58b3a906511f8bc018d", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" }, { "lessThan": "228d06c4cbfc750f1216a3fd91b4693b0766d2f6", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" }, { "lessThan": "f92181c0e13cad9671d07b15be695a97fc2534a3", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" }, { "lessThan": "f3f3f00bcabbd2ce0a77a2ac7a6797b8646bfd8b", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" }, { "lessThan": "2610617effb4454d2f1c434c011ccb5cc7140711", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" }, { "lessThan": "79d10f4f21a92e459b2276a77be62c59c1502c9d", "status": "affected", "version": "d32d98642de66048f9534a05f3641558e811bbc9", "versionType": "git" } ] }, { "defaultStatus": "affected", "product": "Linux", "programFiles": [ "drivers/media/i2c/tc358743.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "status": "affected", "version": "4.3" }, { "lessThan": "4.3", "status": "unaffected", "version": "0", "versionType": "semver" }, { "lessThanOrEqual": "6.1.*", "status": "unaffected", "version": "6.1.156", "versionType": "semver" }, { "lessThanOrEqual": "6.6.*", "status": "unaffected", "version": "6.6.111", "versionType": "semver" }, { "lessThanOrEqual": "6.12.*", "status": "unaffected", "version": "6.12.52", "versionType": "semver" }, { "lessThanOrEqual": "6.16.*", "status": "unaffected", "version": "6.16.11", "versionType": "semver" }, { "lessThanOrEqual": "6.17.*", "status": "unaffected", "version": "6.17.1", "versionType": "semver" }, { "lessThanOrEqual": "*", "status": "unaffected", "version": "6.18-rc1", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "cpeMatch": [ { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.1.156", "versionStartIncluding": "4.3", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.6.111", "versionStartIncluding": "4.3", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.12.52", "versionStartIncluding": "4.3", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.16.11", "versionStartIncluding": "4.3", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.17.1", "versionStartIncluding": "4.3", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.18-rc1", "versionStartIncluding": "4.3", "vulnerable": true } ], "negate": false, "operator": "OR" } ] } ], "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe\n\nThe state-\u003etimer is a cyclic timer that schedules work_i2c_poll and\ndelayed_work_enable_hotplug, while rearming itself. Using timer_delete()\nfails to guarantee the timer isn\u0027t still running when destroyed, similarly\ncancel_delayed_work() cannot ensure delayed_work_enable_hotplug has\nterminated if already executing. During probe failure after timer\ninitialization, these may continue running as orphans and reference the\nalready-freed tc358743_state object through tc358743_irq_poll_timer.\n\nThe following is the trace captured by KASAN.\n\nBUG: KASAN: slab-use-after-free in __run_timer_base.part.0+0x7d7/0x8c0\nWrite of size 8 at addr ffff88800ded83c8 by task swapper/1/0\n...\nCall Trace:\n \u003cIRQ\u003e\n dump_stack_lvl+0x55/0x70\n print_report+0xcf/0x610\n ? __pfx_sched_balance_find_src_group+0x10/0x10\n ? __run_timer_base.part.0+0x7d7/0x8c0\n kasan_report+0xb8/0xf0\n ? __run_timer_base.part.0+0x7d7/0x8c0\n __run_timer_base.part.0+0x7d7/0x8c0\n ? rcu_sched_clock_irq+0xb06/0x27d0\n ? __pfx___run_timer_base.part.0+0x10/0x10\n ? try_to_wake_up+0xb15/0x1960\n ? tmigr_update_events+0x280/0x740\n ? _raw_spin_lock_irq+0x80/0xe0\n ? __pfx__raw_spin_lock_irq+0x10/0x10\n tmigr_handle_remote_up+0x603/0x7e0\n ? __pfx_tmigr_handle_remote_up+0x10/0x10\n ? sched_balance_trigger+0x98/0x9f0\n ? sched_tick+0x221/0x5a0\n ? _raw_spin_lock_irq+0x80/0xe0\n ? __pfx__raw_spin_lock_irq+0x10/0x10\n ? tick_nohz_handler+0x339/0x440\n ? __pfx_tmigr_handle_remote_up+0x10/0x10\n __walk_groups.isra.0+0x42/0x150\n tmigr_handle_remote+0x1f4/0x2e0\n ? __pfx_tmigr_handle_remote+0x10/0x10\n ? ktime_get+0x60/0x140\n ? lapic_next_event+0x11/0x20\n ? clockevents_program_event+0x1d4/0x2a0\n ? hrtimer_interrupt+0x322/0x780\n handle_softirqs+0x16a/0x550\n irq_exit_rcu+0xaf/0xe0\n sysvec_apic_timer_interrupt+0x70/0x80\n \u003c/IRQ\u003e\n...\n\nAllocated by task 141:\n kasan_save_stack+0x24/0x50\n kasan_save_track+0x14/0x30\n __kasan_kmalloc+0x7f/0x90\n __kmalloc_node_track_caller_noprof+0x198/0x430\n devm_kmalloc+0x7b/0x1e0\n tc358743_probe+0xb7/0x610 i2c_device_probe+0x51d/0x880\n really_probe+0x1ca/0x5c0\n __driver_probe_device+0x248/0x310\n driver_probe_device+0x44/0x120\n __device_attach_driver+0x174/0x220\n bus_for_each_drv+0x100/0x190\n __device_attach+0x206/0x370\n bus_probe_device+0x123/0x170\n device_add+0xd25/0x1470\n i2c_new_client_device+0x7a0/0xcd0\n do_one_initcall+0x89/0x300\n do_init_module+0x29d/0x7f0\n load_module+0x4f48/0x69e0\n init_module_from_file+0xe4/0x150\n idempotent_init_module+0x320/0x670\n __x64_sys_finit_module+0xbd/0x120\n do_syscall_64+0xac/0x280\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\n\nFreed by task 141:\n kasan_save_stack+0x24/0x50\n kasan_save_track+0x14/0x30\n kasan_save_free_info+0x3a/0x60\n __kasan_slab_free+0x3f/0x50\n kfree+0x137/0x370\n release_nodes+0xa4/0x100\n devres_release_group+0x1b2/0x380\n i2c_device_probe+0x694/0x880\n really_probe+0x1ca/0x5c0\n __driver_probe_device+0x248/0x310\n driver_probe_device+0x44/0x120\n __device_attach_driver+0x174/0x220\n bus_for_each_drv+0x100/0x190\n __device_attach+0x206/0x370\n bus_probe_device+0x123/0x170\n device_add+0xd25/0x1470\n i2c_new_client_device+0x7a0/0xcd0\n do_one_initcall+0x89/0x300\n do_init_module+0x29d/0x7f0\n load_module+0x4f48/0x69e0\n init_module_from_file+0xe4/0x150\n idempotent_init_module+0x320/0x670\n __x64_sys_finit_module+0xbd/0x120\n do_syscall_64+0xac/0x280\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\n...\n\nReplace timer_delete() with timer_delete_sync() and cancel_delayed_work()\nwith cancel_delayed_work_sync() to ensure proper termination of timer and\nwork items before resource cleanup.\n\nThis bug was initially identified through static analysis. For reproduction\nand testing, I created a functional emulation of the tc358743 device via a\nkernel module and introduced faults through the debugfs interface." } ], "providerMetadata": { "dateUpdated": "2025-10-15T10:22:25.496Z", "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux" }, "references": [ { "url": "https://git.kernel.org/stable/c/3d17701c156579969470e58b3a906511f8bc018d" }, { "url": "https://git.kernel.org/stable/c/228d06c4cbfc750f1216a3fd91b4693b0766d2f6" }, { "url": "https://git.kernel.org/stable/c/f92181c0e13cad9671d07b15be695a97fc2534a3" }, { "url": "https://git.kernel.org/stable/c/f3f3f00bcabbd2ce0a77a2ac7a6797b8646bfd8b" }, { "url": "https://git.kernel.org/stable/c/2610617effb4454d2f1c434c011ccb5cc7140711" }, { "url": "https://git.kernel.org/stable/c/79d10f4f21a92e459b2276a77be62c59c1502c9d" } ], "title": "media: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe", "x_generator": { "engine": "bippy-1.2.0" } } }, "cveMetadata": { "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "assignerShortName": "Linux", "cveId": "CVE-2025-39995", "datePublished": "2025-10-15T07:58:20.365Z", "dateReserved": "2025-04-16T07:20:57.151Z", "dateUpdated": "2025-10-15T10:22:25.496Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2025-39995\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-10-15T08:15:37.690\",\"lastModified\":\"2025-10-16T15:28:59.610\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nmedia: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe\\n\\nThe state-\u003etimer is a cyclic timer that schedules work_i2c_poll and\\ndelayed_work_enable_hotplug, while rearming itself. Using timer_delete()\\nfails to guarantee the timer isn\u0027t still running when destroyed, similarly\\ncancel_delayed_work() cannot ensure delayed_work_enable_hotplug has\\nterminated if already executing. During probe failure after timer\\ninitialization, these may continue running as orphans and reference the\\nalready-freed tc358743_state object through tc358743_irq_poll_timer.\\n\\nThe following is the trace captured by KASAN.\\n\\nBUG: KASAN: slab-use-after-free in __run_timer_base.part.0+0x7d7/0x8c0\\nWrite of size 8 at addr ffff88800ded83c8 by task swapper/1/0\\n...\\nCall Trace:\\n \u003cIRQ\u003e\\n dump_stack_lvl+0x55/0x70\\n print_report+0xcf/0x610\\n ? __pfx_sched_balance_find_src_group+0x10/0x10\\n ? __run_timer_base.part.0+0x7d7/0x8c0\\n kasan_report+0xb8/0xf0\\n ? __run_timer_base.part.0+0x7d7/0x8c0\\n __run_timer_base.part.0+0x7d7/0x8c0\\n ? rcu_sched_clock_irq+0xb06/0x27d0\\n ? __pfx___run_timer_base.part.0+0x10/0x10\\n ? try_to_wake_up+0xb15/0x1960\\n ? tmigr_update_events+0x280/0x740\\n ? _raw_spin_lock_irq+0x80/0xe0\\n ? __pfx__raw_spin_lock_irq+0x10/0x10\\n tmigr_handle_remote_up+0x603/0x7e0\\n ? __pfx_tmigr_handle_remote_up+0x10/0x10\\n ? sched_balance_trigger+0x98/0x9f0\\n ? sched_tick+0x221/0x5a0\\n ? _raw_spin_lock_irq+0x80/0xe0\\n ? __pfx__raw_spin_lock_irq+0x10/0x10\\n ? tick_nohz_handler+0x339/0x440\\n ? __pfx_tmigr_handle_remote_up+0x10/0x10\\n __walk_groups.isra.0+0x42/0x150\\n tmigr_handle_remote+0x1f4/0x2e0\\n ? __pfx_tmigr_handle_remote+0x10/0x10\\n ? ktime_get+0x60/0x140\\n ? lapic_next_event+0x11/0x20\\n ? clockevents_program_event+0x1d4/0x2a0\\n ? hrtimer_interrupt+0x322/0x780\\n handle_softirqs+0x16a/0x550\\n irq_exit_rcu+0xaf/0xe0\\n sysvec_apic_timer_interrupt+0x70/0x80\\n \u003c/IRQ\u003e\\n...\\n\\nAllocated by task 141:\\n kasan_save_stack+0x24/0x50\\n kasan_save_track+0x14/0x30\\n __kasan_kmalloc+0x7f/0x90\\n __kmalloc_node_track_caller_noprof+0x198/0x430\\n devm_kmalloc+0x7b/0x1e0\\n tc358743_probe+0xb7/0x610 i2c_device_probe+0x51d/0x880\\n really_probe+0x1ca/0x5c0\\n __driver_probe_device+0x248/0x310\\n driver_probe_device+0x44/0x120\\n __device_attach_driver+0x174/0x220\\n bus_for_each_drv+0x100/0x190\\n __device_attach+0x206/0x370\\n bus_probe_device+0x123/0x170\\n device_add+0xd25/0x1470\\n i2c_new_client_device+0x7a0/0xcd0\\n do_one_initcall+0x89/0x300\\n do_init_module+0x29d/0x7f0\\n load_module+0x4f48/0x69e0\\n init_module_from_file+0xe4/0x150\\n idempotent_init_module+0x320/0x670\\n __x64_sys_finit_module+0xbd/0x120\\n do_syscall_64+0xac/0x280\\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\\n\\nFreed by task 141:\\n kasan_save_stack+0x24/0x50\\n kasan_save_track+0x14/0x30\\n kasan_save_free_info+0x3a/0x60\\n __kasan_slab_free+0x3f/0x50\\n kfree+0x137/0x370\\n release_nodes+0xa4/0x100\\n devres_release_group+0x1b2/0x380\\n i2c_device_probe+0x694/0x880\\n really_probe+0x1ca/0x5c0\\n __driver_probe_device+0x248/0x310\\n driver_probe_device+0x44/0x120\\n __device_attach_driver+0x174/0x220\\n bus_for_each_drv+0x100/0x190\\n __device_attach+0x206/0x370\\n bus_probe_device+0x123/0x170\\n device_add+0xd25/0x1470\\n i2c_new_client_device+0x7a0/0xcd0\\n do_one_initcall+0x89/0x300\\n do_init_module+0x29d/0x7f0\\n load_module+0x4f48/0x69e0\\n init_module_from_file+0xe4/0x150\\n idempotent_init_module+0x320/0x670\\n __x64_sys_finit_module+0xbd/0x120\\n do_syscall_64+0xac/0x280\\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\\n...\\n\\nReplace timer_delete() with timer_delete_sync() and cancel_delayed_work()\\nwith cancel_delayed_work_sync() to ensure proper termination of timer and\\nwork items before resource cleanup.\\n\\nThis bug was initially identified through static analysis. For reproduction\\nand testing, I created a functional emulation of the tc358743 device via a\\nkernel module and introduced faults through the debugfs interface.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/228d06c4cbfc750f1216a3fd91b4693b0766d2f6\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/2610617effb4454d2f1c434c011ccb5cc7140711\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/3d17701c156579969470e58b3a906511f8bc018d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/79d10f4f21a92e459b2276a77be62c59c1502c9d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f3f3f00bcabbd2ce0a77a2ac7a6797b8646bfd8b\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f92181c0e13cad9671d07b15be695a97fc2534a3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}" } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…