{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-40165","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-04-16T07:20:57.176Z","datePublished":"2025-11-12T10:26:23.806Z","dateUpdated":"2026-08-05T12:08:10.217Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T12:08:10.217Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: nxp: imx8-isi: m2m: Fix streaming cleanup on release\n\nIf streamon/streamoff calls are imbalanced, such as when exiting an\napplication with Ctrl+C when streaming, the m2m usage_count will never\nreach zero and the ISI channel won't be freed. Besides from that, if the\ninput line width is more than 2K, it will trigger a WARN_ON():\n\n[ 59.222120] ------------[ cut here ]------------\n[ 59.226758] WARNING: drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c:631 at mxc_isi_channel_chain+0xa4/0x120, CPU#4: v4l2-ctl/654\n[ 59.238569] Modules linked in: ap1302\n[ 59.242231] CPU: 4 UID: 0 PID: 654 Comm: v4l2-ctl Not tainted 6.16.0-rc4-next-20250704-06511-gff0e002d480a-dirty #258 PREEMPT\n[ 59.253597] Hardware name: NXP i.MX95 15X15 board (DT)\n[ 59.258720] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)\n[ 59.265669] pc : mxc_isi_channel_chain+0xa4/0x120\n[ 59.270358] lr : mxc_isi_channel_chain+0x44/0x120\n[ 59.275047] sp : ffff8000848c3b40\n[ 59.278348] x29: ffff8000848c3b40 x28: ffff0000859b4c98 x27: ffff800081939f00\n[ 59.285472] x26: 000000000000000a x25: ffff0000859b4cb8 x24: 0000000000000001\n[ 59.292597] x23: ffff0000816f4760 x22: ffff0000816f4258 x21: ffff000084ceb780\n[ 59.299720] x20: ffff000084342ff8 x19: ffff000084340000 x18: 0000000000000000\n[ 59.306845] x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffdb369e1c\n[ 59.313969] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000\n[ 59.321093] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000\n[ 59.328217] x8 : ffff8000848c3d48 x7 : ffff800081930b30 x6 : ffff800081930b30\n[ 59.335340] x5 : ffff0000859b6000 x4 : ffff80008193ae80 x3 : ffff800081022420\n[ 59.342464] x2 : ffff0000852f6900 x1 : 0000000000000001 x0 : ffff000084341000\n[ 59.349590] Call trace:\n[ 59.352025]  mxc_isi_channel_chain+0xa4/0x120 (P)\n[ 59.356722]  mxc_isi_m2m_streamon+0x160/0x20c\n[ 59.361072]  v4l_streamon+0x24/0x30\n[ 59.364556]  __video_do_ioctl+0x40c/0x4a0\n[ 59.368560]  video_usercopy+0x2bc/0x690\n[ 59.372382]  video_ioctl2+0x18/0x24\n[ 59.375857]  v4l2_ioctl+0x40/0x60\n[ 59.379168]  __arm64_sys_ioctl+0xac/0x104\n[ 59.383172]  invoke_syscall+0x48/0x104\n[ 59.386916]  el0_svc_common.constprop.0+0xc0/0xe0\n[ 59.391613]  do_el0_svc+0x1c/0x28\n[ 59.394915]  el0_svc+0x34/0xf4\n[ 59.397966]  el0t_64_sync_handler+0xa0/0xe4\n[ 59.402143]  el0t_64_sync+0x198/0x19c\n[ 59.405801] ---[ end trace 0000000000000000 ]---\n\nAddress this issue by moving the streaming preparation and cleanup to\nthe vb2 .prepare_streaming() and .unprepare_streaming() operations. This\nalso simplifies the driver by allowing direct usage of the\nv4l2_m2m_ioctl_streamon() and v4l2_m2m_ioctl_streamoff() helpers."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerability is reached exclusively through V4L2 ioctls and close() on the local `/dev/videoN` m2m device node of the i.MX8 ISI driver. No network or adjacent-network path exists to this code.\nAC:L - Triggering is fully deterministic and requires no race — a single process does S_FMT, STREAMON, then close() without STREAMOFF, and the leaked usage_count/chained state plus the WARN_ON are guaranteed on the next STREAMON. The slab-reuse variant that aliases the dangling `last_ctx` is freely repeatable in a loop by the same attacker.\nPR:L - The attacker needs only an unprivileged local account with access to the video device node, which is the norm for logged-in users (video group / uaccess ACL), camera services on Android, and application accounts on embedded and automotive i.MX8/i.MX9 systems. No root or CAP_SYS_ADMIN is required anywhere along the path.\nUI:N - The attacking process performs every step itself — open, set format, streamon, close, reopen — with no victim action needed. No other user must mount, open, or interact with anything.\nS:U - The corrupted state (`m2m->usage_count`, `chained_count`, `pipe->chained`, dangling `last_ctx`) and all resulting impact are confined to the kernel's own security authority. No hypervisor, IOMMU, or sandbox boundary is crossed.\nC:H - The stale `last_ctx` pointer suppresses hardware reconfiguration in `mxc_isi_m2m_device_run()`, leaving the ISI programmed with the prior context's geometry so it reads far beyond the new, smaller source buffer and copies adjacent kernel physical memory into a destination buffer the attacker mmaps and reads back. That is an attacker-steerable kernel memory disclosure primitive.\nI:H - The same stale-configuration path makes the ISI DMA engine write a full previous-geometry frame (up to 4096x2160) into a buffer allocated for a much smaller format, overwriting adjacent dma-contig/CMA kernel memory with attacker-supplied pixel data. The leaked channel/chaining state additionally leaves the hardware operating with a configuration no context owns.\nA:H - The leaked `chained_count`/`pipe->chained` reliably trips `WARN_ON()` in `mxc_isi_channel_chain()`, which is a kernel panic under panic_on_warn, and the never-released channel permanently returns -EBUSY from `mxc_isi_channel_acquire()`, wedging both pipe 0 and the chained pipe so the camera capture and m2m devices are unusable until reboot."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c"],"versions":[{"version":"cf21f328fcafacf4f96e7a30ef9dceede1076378","lessThan":"50c721be2cff2bf8c9a5f1f4add35c2bbb1df302","status":"affected","versionType":"git"},{"version":"cf21f328fcafacf4f96e7a30ef9dceede1076378","lessThan":"e8b5f4d80775835cf8192d65138e9be1ff202847","status":"affected","versionType":"git"},{"version":"cf21f328fcafacf4f96e7a30ef9dceede1076378","lessThan":"b0d438c7b43314f9128e0dda5f83789e593e684a","status":"affected","versionType":"git"},{"version":"cf21f328fcafacf4f96e7a30ef9dceede1076378","lessThan":"178aa3360220231dd91e7dbc2eb984525886c9c1","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c"],"versions":[{"version":"6.4","status":"affected"},{"version":"0","lessThan":"6.4","status":"unaffected","versionType":"semver"},{"version":"6.6.114","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.55","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.17.5","lessThanOrEqual":"6.17.*","status":"unaffected","versionType":"semver"},{"version":"6.18","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.4","versionEndExcluding":"6.6.114"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.4","versionEndExcluding":"6.12.55"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.4","versionEndExcluding":"6.17.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.4","versionEndExcluding":"6.18"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/50c721be2cff2bf8c9a5f1f4add35c2bbb1df302"},{"url":"https://git.kernel.org/stable/c/e8b5f4d80775835cf8192d65138e9be1ff202847"},{"url":"https://git.kernel.org/stable/c/b0d438c7b43314f9128e0dda5f83789e593e684a"},{"url":"https://git.kernel.org/stable/c/178aa3360220231dd91e7dbc2eb984525886c9c1"}],"title":"media: nxp: imx8-isi: m2m: Fix streaming cleanup on release","x_generator":{"engine":"bippy-1.2.0"}}}}