CVE-2026-80818 in Linuxthông tin

Tóm tắt

Bởi VulDB • 04/09/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

iommu/tegra241-cmdqv: Sửa lỗi use-after-free đối với CMD_SYNC khi tháo gỡ (teardown)

Hàm `arm_smmu_impl_remove()` được đăng ký là một hành động devres trong `arm_smmu_impl_probe()`, trước khi `arm_smmu_init_queues()` cấp phát `smmu->cmdq.q.base`. Trong quá trình unwind của devres, dù do probe thất bại hay unbind, hàng đợi (queue) sẽ bị giải phóng đầu tiên và sau đó hàm `arm_smmu_impl_remove()` chạy `tegra241_cmdqv_remove_vintf()`, trong đó thao tác deinit VINTF phát ra lệnh CMD_SYNC trên bộ nhớ đã được giải phóng.

Hiện tượng này quan sát được khi kiểm thử với một bản hack QEMU khiến VCMDQ không thể bật, dẫn đến việc reset impl thất bại và probe bị hủy bỏ vào quá trình unwind devres:

platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: failed to enable, STATUS=0x00000000 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: GERRORN=0x0, GERROR=0x4, CONS=0x0 platform NVDA200C:00: tegra241_cmdqv: VINTF0: VCMDQ0/LVCMDQ0: uncleared error detected, resetting arm-smmu-v3 arm-smmu-v3.0.auto: failed to reset impl arm-smmu-v3 arm-smmu-v3.0.auto: probe with driver arm-smmu-v3 failed with error -110 Unable to handle kernel paging request at virtual address ffff8000891e0098 ... Internal error: Oops: 0000000096000047 [#1] SMP
... Call trace: arm_smmu_cmdq_issue_cmdlist+0x320/0x6fc (P) tegra241_vcmdq_hw_deinit+0x98/0x168 tegra241_vintf_hw_deinit+0x5c/0x1b0 tegra241_cmdqv_remove_vintf+0x34/0xec tegra241_cmdqv_remove+0x40/0x9c arm_smmu_impl_remove+0x20/0x30 devm_action_release+0x14/0x20 devres_release_all+0xa8/0x110 device_unbind_cleanup+0x18/0x84 really_probe+0x1f0/0x29c

Loại bỏ thao tác deinit VINTF khỏi `tegra241_cmdqv_remove_vintf()` để quá trình unwind không còn truy cập vào hàng đợi đã được giải phóng. Thay vào đó, hãy im lặng hóa (quiesce) các VINTFs sớm hơn. Thêm một impl op là `device_disable()` và thực thi nó từ `arm_smmu_disable_action()` trong khi CMDQ vẫn đang hoạt động. Điều này xử lý trường hợp unbind trực tiếp. Một lỗi reset đã được xử lý vì `tegra241_vintf_hw_init()` tự deinit VINTF trên đường dẫn lỗi của chính nó. Hàm `tegra241_cmdqv_remove_vintf()` cũng được sử dụng bởi đường dẫn destroy viommu iommufd, do đó cần im lặng hóa ở đó nữa.

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

26/08/2026

Tiết lộ

04/09/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you know our Splunk app?

Download it now for free!