{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-50175", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-10-21T19:36:19.963Z", "datePublished": "2024-11-08T05:23:57.808Z", "dateUpdated": "2026-08-05T11:42:18.585Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:42:18.585Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmedia: qcom: camss: Remove use_count guard in stop_streaming\n\nThe use_count check was introduced so that multiple concurrent Raw Data\nInterfaces RDIs could be driven by different virtual channels VCs on the\nCSIPHY input driving the video pipeline.\n\nThis is an invalid use of use_count though as use_count pertains to the\nnumber of times a video entity has been opened by user-space not the number\nof active streams.\n\nIf use_count and stream-on count don't agree then stop_streaming() will\nbreak as is currently the case and has become apparent when using CAMSS\nwith libcamera's released softisp 0.3.\n\nThe use of use_count like this is a bit hacky and right now breaks regular\nusage of CAMSS for a single stream case. Stopping qcam results in the splat\nbelow, and then it cannot be started again and any attempts to do so fails\nwith -EBUSY.\n\n[ 1265.509831] WARNING: CPU: 5 PID: 919 at drivers/media/common/videobuf2/videobuf2-core.c:2183 __vb2_queue_cancel+0x230/0x2c8 [videobuf2_common]\n...\n[ 1265.510630] Call trace:\n[ 1265.510636] __vb2_queue_cancel+0x230/0x2c8 [videobuf2_common]\n[ 1265.510648] vb2_core_streamoff+0x24/0xcc [videobuf2_common]\n[ 1265.510660] vb2_ioctl_streamoff+0x5c/0xa8 [videobuf2_v4l2]\n[ 1265.510673] v4l_streamoff+0x24/0x30 [videodev]\n[ 1265.510707] __video_do_ioctl+0x190/0x3f4 [videodev]\n[ 1265.510732] video_usercopy+0x304/0x8c4 [videodev]\n[ 1265.510757] video_ioctl2+0x18/0x34 [videodev]\n[ 1265.510782] v4l2_ioctl+0x40/0x60 [videodev]\n...\n[ 1265.510944] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state\n[ 1265.511175] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state\n[ 1265.511398] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active st\n\nOne CAMSS specific way to handle multiple VCs on the same RDI might be:\n\n- Reference count each pipeline enable for CSIPHY, CSID, VFE and RDIx.\n- The video buffers are already associated with msm_vfeN_rdiX so\n release video buffers when told to do so by stop_streaming.\n- Only release the power-domains for the CSIPHY, CSID and VFE when\n their internal refcounts drop.\n\nEither way refusing to release video buffers based on use_count is\nerroneous and should be reverted. The silicon enabling code for selecting\nVCs is perfectly fine. Its a \"known missing feature\" that concurrent VCs\nwon't work with CAMSS right now.\n\nInitial testing with this code didn't show an error but, SoftISP and \"real\"\nusage with Google Hangouts breaks the upstream code pretty quickly, we need\nto do a partial revert and take another pass at VCs.\n\nThis commit partially reverts commit 89013969e232 (\"media: camss: sm8250:\nPipeline starting and stopping for multiple virtual channels\")" } ], "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 local character-device ioctls on the CAMSS `/dev/videoN` and `/dev/mediaN` nodes (VIDIOC_REQBUFS/QBUF/STREAMON/STREAMOFF, or simply close()). No network or physical-access vector exists.\nAC:L - The attacker controls every precondition: open the video node twice to drive the upstream subdev's use_count to 2, then STREAMON/STREAMOFF; the early return is then taken deterministically with no race or uncontrolled state. The upstream commit reports this breaking on ordinary single-stream libcamera/qcam usage.\nPR:L - Only an unprivileged local account with access to the camera device nodes is needed — `video` group membership or a logind seat ACL on desktop/laptop Qualcomm systems, or the camera service context on Android. No capability check exists in `video_open()`, `vb2_ioctl_streamoff()`, or `video_stop_streaming()`.\nUI:N - The attacker performs the entire open/queue/streamon/streamoff/free sequence from its own process. No victim action or cooperating second party is required.\nS:U - The corruption is confined to kernel heap objects and driver state within the same security authority; there is no VM, IOMMU, or sandbox boundary crossed by the bug itself.\nC:H - Skipping `vfe_flush_buffers()` leaves `output->pending_bufs`, `buf[0]/buf[1]` and `last_buffer` dangling after `__vb2_queue_free()`, and the next STREAMON reads `buf->addr[0]` out of the freed slab; a use-after-free of this kind gives read access to reclaimed kernel heap contents and can leak them back to userspace via vb2 buffers.\nI:H - `vfe_buf_get_pending()` performs `list_del()` on a freed list node — a classic unlink write primitive once the slab is resprayed — and the stale `addr[0]` is programmed as the VFE write-master DMA destination, letting hardware write frame data to an attacker-influenced address. Both yield arbitrary-write potential and control-flow hijack opportunity.\nA:H - The path immediately hits `WARN_ON()` at videobuf2-core.c:2183 (a panic under panic_on_warn), the use-after-free crashes the kernel, and the leaked `media_pipeline` leaves every other video node in the graph permanently returning -EBUSY, disabling the camera subsystem system-wide 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/qcom/camss/camss-video.c" ], "versions": [ { "version": "89013969e23247661f0514c77f26d60fa083216c", "lessThan": "c2218a82f795dc3d0b6210bcaa3d9c5ca736fcd9", "status": "affected", "versionType": "git" }, { "version": "89013969e23247661f0514c77f26d60fa083216c", "lessThan": "a975db8aea152f9907aa53a7f517e557ccb40da3", "status": "affected", "versionType": "git" }, { "version": "89013969e23247661f0514c77f26d60fa083216c", "lessThan": "d7d4dde3decef1b5aa1f5c390147f79aae412dee", "status": "affected", "versionType": "git" }, { "version": "89013969e23247661f0514c77f26d60fa083216c", "lessThan": "25f18cb1b673220b76a86ebef8e7fb79bd303b27", "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/qcom/camss/camss-video.c" ], "versions": [ { "version": "6.4", "status": "affected" }, { "version": "0", "lessThan": "6.4", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.55", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.10.14", "lessThanOrEqual": "6.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.3", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12", "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.55" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.10.14" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.11.3" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.12" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/c2218a82f795dc3d0b6210bcaa3d9c5ca736fcd9" }, { "url": "https://git.kernel.org/stable/c/a975db8aea152f9907aa53a7f517e557ccb40da3" }, { "url": "https://git.kernel.org/stable/c/d7d4dde3decef1b5aa1f5c390147f79aae412dee" }, { "url": "https://git.kernel.org/stable/c/25f18cb1b673220b76a86ebef8e7fb79bd303b27" } ], "title": "media: qcom: camss: Remove use_count guard in stop_streaming", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "cvssV3_1": { "scope": "UNCHANGED", "version": "3.1", "baseScore": 5.5, "attackVector": "LOCAL", "baseSeverity": "MEDIUM", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "integrityImpact": "NONE", "userInteraction": "NONE", "attackComplexity": "LOW", "availabilityImpact": "HIGH", "privilegesRequired": "LOW", "confidentialityImpact": "NONE" } }, { "other": { "type": "ssvc", "content": { "id": "CVE-2024-50175", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2025-10-01T20:19:20.172558Z" } } } ], "problemTypes": [ { "descriptions": [ { "lang": "en", "type": "CWE", "description": "CWE-noinfo Not enough information" } ] } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2025-10-01T20:27:10.500Z" } } ] } }