🔍 CVE-2026-90184

0.0
CVSS Score
UNKNOWN
2026-09-17
2026-10-19 09:19
✅ 완료

🇰🇷 한글 설명

Linux 커널의 null_blk 드라이버에서 configfs 속성 업데이트와 장치 설정 간의 직렬화가 이루어지지 않아 발생하는 취약점입니다. 장치가 생성되는 도중 동시에 설정값이 변경될 경우, 커널 경고(WARN_ON)가 발생하거나 잘못된 메모리 참조로 인해 시스템 오류가 발생할 수 있습니다.

💡 쉬운 설명

장치가 만들어지는 도중에 사용자가 설정을 바꾸려고 하면, 컴퓨터가 혼란을 느껴 멈추거나 오류를 일으킬 수 있는 문제입니다. 장치 생성이 완전히 끝날 때까지 설정을 바꾸지 못하도록 잠금 장치를 추가하여 해결했습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: null_blk: serialize configfs attribute updates with device setup The attribute store methods generated with NULLB_DEVICE_ATTR() refuse to change the configuration of a live device by testing NULLB_DEV_FL_CONFIGURED, but that flag is only set by nullb_device_power_store() after null_add_dev() has returned, and the store methods take no lock at all. configfs only serializes writes to the same open file (buffer->mutex), so a write to any attribute can run concurrently with null_add_dev() and change the device configuration while it is being used. null_add_dev() reads the configuration several times, e.g. dev->zoned is read once to set up the queue limits and once to initialize the zone resources: CPU0: echo 1 > nullb0/power CPU1: echo 1 > nullb0/zoned nullb_device_power_store() mutex_lock(&lock) null_add_dev() if (dev->zoned) -> false /* no BLK_FEAT_ZONED */ nullb_device_zoned_store() test_bit(FL_CONFIGURED) -> 0 dev->zoned = true blk_mq_alloc_disk() /* queue is not zoned */ if (nullb->dev->zoned) -> true null_register_zoned_dev() blk_revalidate_disk_zones() blk_revalidate_disk_zones() is then called for a queue that does not have BLK_FEAT_ZONED set, which triggers its WARN_ON_ONCE() and fails the device setup with -EIO: WARNING: CPU: 2 PID: 322 at block/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c/0x560 Clearing dev->zoned in the same window is worse: the queue is created with BLK_FEAT_ZONED but the zone resources are never initialized, so add_disk() succeeds for a zoned disk that has no zones. And a store that lands after the last dev->zoned test leaves dev->zoned set while dev->zones is still NULL, which null_process_zoned_cmd() dereferences on the first write. Fix this by taking the global lock, which nullb_device_power_store() already holds across null_add_dev() and null_del_dev(), around both the NULLB_DEV_FL_CONFIGURED test and the update of the device configuration. The submit_queues and poll_queues apply callbacks are now called with that lock held, so remove the locking they did themselves. Since the store methods can run as soon as configfs_register_subsystem() returns, that is, before null_init() gets to mutex_init(&lock), also initialize the lock statically with DEFINE_MUTEX().

📍 영향받는 시스템

Linux kernel (null_blk driver 사용 환경)

⚔️ 공격 벡터

로컬 사용자가 configfs를 통해 장치 설정 속성을 동시에 조작하여 레이스 컨디션(Race Condition) 유발

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 null_blk의 잠금 메커니즘 적용

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel