Linux 커널에서는 다음 취약점이 해결되었습니다. nvmet: 비동기 이벤트 작업을 nvmet-wq에서 이동 대상 nvmet_ctrl_free()의 경우 ctrl->async_event_work를 플러시합니다. nvmet_ctrl_free()가 nvmet-wq에서 실행되면 플러시가 작업 대기열에 다시 들어갑니다. 동일한 작업자에 대한 완료:- A. nvmet-wq에 대기 중인 비동기 이벤트 작업(연결 해제 전): nvmet_execute_async_event() queue_work(nvmet_wq, &ctrl->async_event_work) nvmet_add_async_event() queue_work(nvmet_wq, &ctrl->async_event_work) 비.
Linux 커널에서는 다음 취약점이 해결되었습니다.
nvmet: 비동기 이벤트 작업을 nvmet-wq에서 이동
대상 nvmet_ctrl_free()의 경우 ctrl->async_event_work를 플러시합니다. nvmet_ctrl_free()가 nvmet-wq에서 실행되면 플러시가 작업 대기열에 다시 들어갑니다. 동일한 작업자에 대한 완료:-
A. nvmet-wq에 대기 중인 비동기 이벤트 작업(연결 해제 전): nvmet_execute_async_event() queue_work(nvmet_wq, &ctrl->async_event_work)
nvmet_add_async_event() queue_work(nvmet_wq, &ctrl->async_event_work)
B. 전체 사전 작업 체인(RDMA CM 경로): nvmet_rdma_cm_handler() nvmet_rdma_queue_disconnect() __nvmet_rdma_queue_disconnect() queue_work(nvmet_wq, &queue->release_work) process_one_work() lock((wq_completion)nvmet-wq) <--------- 첫 번째 nvmet_rdma_release_queue_work()
C. 재귀 경로(동일 작업자): nvmet_rdma_release_queue_work() nvmet_rdma_free_queue() nvmet_sq_destroy() nvmet_ctrl_put() nvmet_ctrl_free() 플러시_작업(&ctrl->async_event_work) __플러시_작업() touch_wq_lockdep_map() lock((wq_completion)nvmet-wq) <--------- 두 번째
Lockdep 표시:
kworker/u192:42/44933이 잠금을 획득하려고 합니다. ffff888118a00948 ((wq_completion)nvmet-wq){+.+.}-{0:0}, 위치: touch_wq_lockdep_map+0x26/0x90
하지만 작업이 이미 잠겨 있습니다. ffff888118a00948 ((wq_completion)nvmet-wq){+.+.}-{0:0}, 위치: process_one_work+0x53e/0x660
kworker/u192:42/44933이 보유한 잠금 3개: #0: ffff888118a00948 ((wq_completion)nvmet-wq){+.+.}-{0:0}, 위치: process_one_work+0x53e/0x660 #1: ffffc9000e6cbe28 ((work_completion)(&queue->release_work)){+.+.}-{0:0}, 위치: process_one_work+0x1c5/0x660 #2: ffffffff82d4db60 (rcu_read_lock){....}-{1:3}, 위치: __flush_work+0x62/0x530
작업 대기열: nvmet-wq nvmet_rdma_release_queue_work [nvmet_rdma] 통화 추적: __flush_work+0x268/0x530 nvmet_ctrl_free+0x140/0x310 [nvmet] nvmet_cq_put+0x74/0x90 [nvmet] nvmet_rdma_free_queue+0x23/0xe0 [nvmet_rdma] nvmet_rdma_release_queue_work+0x19/0x50 [nvmet_rdma] process_one_work+0x206/0x660 작업자_스레드+0x184/0x320 k스레드+0x10c/0x240 ret_from_fork+0x319/0x390
재진입을 방지하기 위해 비동기 이벤트 작업을 전용 nvmet-aen-wq로 이동합니다. nvmet-wq에서 플러시합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 75.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 75.00 |
VPI 공식 vpi-v1 기준