Linux 커널에서는 다음 취약점이 해결되었습니다. drm/xe: 항상 이전/다음 다시 매핑을 추적합니다. 3D 작업 중에 사용자가 다음과 같은 오류를 보고했습니다. [ 413.361679] 경고: vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe]에서 drivers/gpu/drm/xe/xe_vm.c:1217, CPU#7: vkd3d_queue/9925 [ 413.361944] CPU: 7 UID: 1000 PID: 9925 Comm: vkd3d_queue Kdump: 로드됨 오염되지 않음 7.0.0-070000rc3-generic #202603090038 PREEMPT(lazy) [ 413.361949] RIP: 0010:vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe] [ 413
Linux 커널에서는 다음 취약점이 해결되었습니다.
drm/xe: 항상 이전/다음 다시 매핑을 추적합니다.
3D 작업 중에 사용자가 다음과 같은 오류를 보고했습니다.
[ 413.361679] 경고: vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe]에서 drivers/gpu/drm/xe/xe_vm.c:1217, CPU#7: vkd3d_queue/9925 [ 413.361944] CPU: 7 UID: 1000 PID: 9925 Comm: vkd3d_queue Kdump: 로드됨 오염되지 않음 7.0.0-070000rc3-generic #202603090038 PREEMPT(lazy) [ 413.361949] RIP: 0010:vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe] [ 413.362074] RSP: 0018:ffffd4c25c3df930 EFLAGS: 00010282 [ 413.362077] RAX: 0000000000000000 RBX: ffff8f3ee817ed10 RCX: 0000000000000000 [ 413.362078] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 [ 413.362079] RBP: ffffd4c25c3df980 R08: 0000000000000000 R09: 0000000000000000 [ 413.362081] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8f41fbf99380 [ 413.362082] R13: ffff8f3ee817e968 R14: 00000000ffffffef R15: ffff8f43d00bd380 [ 413.362083] FS: 00000001040ff6c0(0000) GS:ffff8f4696d89000(0000) knlGS:00000000330b0000 [ 413.362085] CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033 [ 413.362086] CR2: 00007ddfc4747000 CR3: 00000002e6262005 CR4: 0000000000f72ef0 [ 413.362088] PKRU: 55555554 [ 413.362089] 통화 추적: [ 413.362092] <과제> [ 413.362096] xe_vm_bind_ioctl+0xa9a/0xc60 [xe]
이는 우리가 작업 해제를 위해 다시 삽입하는 vma를 암시하는 것 같습니다. 유효하지 않거나 이미 삽입된 항목과 겹칩니다. VM. 재삽입이므로 유효하지 않으므로 반드시 입력해야 합니다. 전에 일했습니다. 유력한 범인을 이미 배치된 것으로 남겨두기 vma를 삽입하려는 위치입니다.
그 다음에는 리바인드와 같은 작업을 수행하는 경우 vma의 중간, 매핑된 끝 중 하나 또는 둘 모두가 이미 호환됩니다. 해당 vma의 리바인드 수행을 건너뛰고 next/prev를 NULL로 설정합니다. 뿐만 아니라 그런 다음 원래 매핑 해제 va 범위를 조정하여 끝 매핑 해제를 방지합니다. 그러나 해제 경로를 트리거하면 결국 3개의 va가 됩니다. 두 끝은 절대 제거되지 않으며 원래 va 범위는 중간에 있습니다. 여전히 축소된 크기입니다.
이런 일이 발생하면 한 가지 실패 모드는 다른 해제 작업이 필요한 경우입니다. 해당 범위와 상호 작용하며 이는 바인드 벡터에서 발생할 수 있습니다. 에 대한 예를 들어 원래 va 위치에 무언가를 다시 삽입해야 하는 경우입니다. 이 경우 va는 여전히 축소된 버전이므로 제거할 때 그런 다음 다시 삽입하면 끝 부분과 겹칠 수 있습니다. 제거되지 않았으며 위와 같은 경고가 발생하고 VM을 나쁜 상태.
여기에는 두 가지가 필요합니다.
건너뛰기 사례에 대한 이전/다음 추적 누킹을 중지합니다. 대신 필요한 경우 이전/다음 건너뛰기를 확인하는 데 의존합니다. 그런 식으로 unwind 경로를 사용하여 이제 양쪽 끝을 올바르게 제거합니다.
해제 경로에서 매핑 해제 및 축소를 실행 취소합니다. 두 끝으로 이제 매핑 해제 Va가 제거되어 원래 크기로 다시 확장되어야 합니다. 다시 삽입하기 전에.
v2:
(커밋 aec6969f75afbf4e01fd5fb5850ed3e9c27043ac에서 선택된 체리)
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 78.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 78.00 |
VPI 공식 vpi-v1 기준