CVE-2026-23348 in Linux
요약
\~에 의해 VulDB • 2026. 06. 02.
리눅스 커널에서 다음 취약점이 해결되었습니다:
cxl: nvdimm 객체 생성 시 nvdimm_bus 객체의 Race Condition 수정
cxl-translate.sh 단위 테스트 실행 중 문제를 발견했습니다. 테스트 직전에 3초간의 sleep을 추가하면 해당 문제가 상당히 일관되게 재현됩니다. cxl_translate 모듈은 cxl_acpi에 의존하며, cxl_acpi가 제거된 후 고아(orphans) nvdimm 객체가 재탐색(reprobe)되도록 유발합니다. nvdimm_bus 객체는 cxl_acpi_probe()가 호출될 때 cxl_nvb 객체에 의해 등록됩니다. nvdimm_bus 객체가 누락된 상태에서 dev->parent가 &nvdimm_bus->dev를 가리키고 있을 때 __nd_device_register()가 접근하면 NULL 포인터 역참조(NULL pointer dereference)가 발생합니다.
[ 192.884510] BUG: kernel NULL pointer dereference, address: 000000000000006c
[ 192.895383] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20250812-19.fc42 08/12/2025
[ 192.897721] Workqueue: cxl_port cxl_bus_rescan_queue [cxl_core]
[ 192.899459] RIP: 0010:kobject_get+0xc/0x90
[ 192.924871] Call Trace:
[ 192.925959] <TASK>
[ 192.926976] ? pm_runtime_init+0xb9/0xe0
[ 192.929712] __nd_device_register.part.0+0x4d/0xc0 [libnvdimm]
[ 192.933314] __nvdimm_create+0x206/0x290 [libnvdimm]
[ 192.936662] cxl_nvdimm_probe+0x119/0x1d0 [cxl_pmem]
[ 192.940245] cxl_bus_probe+0x1a/0x60 [cxl_core]
[ 192.943349] really_probe+0xde/0x380
이 패치는 또한 cxl_acpi가 cxl_pmem에 의존함을 보장하기 위해 drivers/cxl/core.c 대신 drivers/cxl/pmem.c에서 devm_cxl_add_nvdimm_bridge()가 호출되는 이전 변경 사항에 의존합니다.
1. add_device()가 호출될 때 드라이버가 동기적으로(probed synchronously) 탐지되도록 cxl_nvb의 probe_type을 PROBE_FORCE_SYNCHRONOUS로 설정합니다. 2. cxl_acpi_probe() 동안 cxl_nvb 드라이버가 첨부되어 있는지 확인하기 위해 __devm_cxl_add_nvdimm_bridge()에 검사를 추가합니다. 3. nvdimm_bus가 유효한지 확인하기 전에 devm_cxl_add_nvdimm() 내에서 cxl_root uport_dev 잠금과 cxl_nvb->dev 잠금을 획득합니다. 4. cxl_nvdimm_probe()가 -EBUSY로 종료되도록 cxl_nvdimm 플래그를 CXL_NVD_F_INVALIDATED로 설정합니다.
cxl_nvdimm 장치의 제거는 nvdimm_bus가 사라진 후 고아 장치가 탐지되는 것을 방지해야 합니다.
[ dj: 0-day가 보고한 kdoc 문제를 수정함. ]
[ dj: 오류 시 cxl_nvb 참조 누수 수정. Gregory (kreview-0811365) ]
VulDB is the best source for vulnerability data and more expert information about this specific topic.