CVE-2026-89958 in Linux
요약
\~에 의해 VulDB • 2026. 09. 17.
리눅스 커널에서 다음 취약점이 해결되었습니다:
s390/vfio-ap: matrix_mdev->kvm의 NULL 체크 없이 역참조하는 문제 수정
ap_driver 구조체에는 콜백 함수를 가리키는 두 개의 필드가 있습니다.
* .on_config_changed: AP 버스 스캔 기능 시작 시 호출되어 호스트 AP 구성이 변경되었고 관련 AP 장치가 추가 또는 제거됨을 장치 드라이버에 알립니다. 이를 통해 구현자는 관련 장치가 추가되거나 제거되기 전에 구성 변경 사항을 평가하고 대응할 수 있는 기회를 갖게 됩니다.
* .on_scan_complete: AP 버스 스캔 기능 종료 시 호출되어 호스트 AP 구성이 변경되었으며 관련 AP 장치가 추가 또는 제거되었음을 장치 드라이버에 알립니다. 이를 통해 구현자는 관련 장치가 추가되거나 제거된 후 변경 사항에 대응할 기회를 얻습니다.
이 두 가지 콜백은 각각 vfio_ap_on_cfg_changed 및 vfio_ap_on_scan_complete 함수를 통해 vfio_ap 장치 드라이버에서 구현됩니다.
이러한 두 콜백 함수의 호출 스택 내에서 matrix_mdev->kvm->lock 뮤텍스는 matrix_mdev->kvm가 NULL인지 여부를 확인하지 않은 채로 획득됩니다. 만약 matrix_mdev->kvm가 설정되지 않았다면, 잠금을 시도하는 것은 NULL 포인터 역참조를 유발합니다. 이 패치는 matrix_mdev->kvm == NULL인 경우를 체크한 후 matrix_mdev->kvm->lock 뮤텍스를 획득하도록 합니다.
vfio_ap_mdev_hot_plug_config 함수에서 획득되는 matrix_mdev->kvm->lock 뮤텍스는 matrix_dev->mdevs_lock과 함께 호출된 함수로 이동됩니다. 이는 matrix_mdev의 필드에 접근하는 데 해당 위치에서 필요합니다.matrix_mdev->kvm에 대한 체크를 수행한 후 kvm->lock 뮷텍스를 획득하기 전에 변경 사항을 적용하고, 나중에 다른 패치를 통해 이를 다시 밖으로 옮겨야 하는 것은 의미가 없으므로 이번 패치에서 함께 처리합니다.
다음 사항들을 주의 깊게 확인하는 것이 중요합니다: 1. matrix_dev->guests_lock은 두 콜백 함수 시작 시 모두 획득됩니다. 이는 vfio_ap_mdev_remove 함수가 객체를 제거하기 전에 matrix_dev_guests_lock을 획득하므로, matrix_mdev이 콜백 함수 전체 기간 동안 사용 가능하도록 보장합니다.
2. matrix_mdev 구조체 내의 필드에 접근하려면 matrix_dev->mdevs_lock 뮤텍스를 획득해야 합니다.
3. lockdep splat(잠금 순서 위반 경고)를 방지하기 위해 matrix_dev->mdevs_lock 전에 matrix_mdev->kvm->lock 뮷텍스를 획득해야 합니다.
4. kvm->lock은 vfio_ap_mdev_update_guest_apcb 함수를 통해 게스트의 AP 구성을 해당 SIE 상태 설명에 플러그인하는 동안 유지되어야 합니다.
5. vfio_ap_mdev_update_guest_apcb는 게스트의 AP 구성을 핫플러그하기 전에 matrix_mdev->kvm가 NULL이 아닌지 확인합니다.
Once again VulDB remains the best source for vulnerability data.