CVE-2026-98884 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 23.

리눅스 커널에서 다음 취약점이 해결되었습니다:

mmc: core: 호스트 제공 max_segs에 대한 유효성 검사 추가

max_segs 필드는 unsigned short 타입이며, 호스트 드라이버가 지나치게 큰 값을 설정하면 0으로 잘릴(truncated) 수 있습니다. 이로 인해 mmc_alloc_sg()이 크기 할당 요청으로 0을 사용하여 kmalloc_objs()를 호출하게 되고, 이는 정의되지 않은 동작(undefined behavior)을 초래합니다.

SLUB 할당기에서 kmalloc(0)은 특수 포인터(ZERO_SIZE_PTR)를 반환합니다. 이후 'if (sg)' 체크는 참(true)으로 평가되고, sg_init_table()이 잘못된 메모리에 접근하려고 시도하여 크래시가 발생합니다:

dwmmc_rockchip 2a310000.mmc: Successfully tuned phase to 133 mmc1: new UHS-I speed SDR104 SDHC card at address aaaa Unable to handle kernel paging request at virtual address 0000001ffffffff0 Mem abort info: ESR = 0x0000000096000004 EC = 0x25: DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 FSC = 0x04: level 0 translation fault Data abort info: ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 CM = 0, WnR = 0, TnD = 0, TagAccess = 0 GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 user pgtable: 4k pages, 48-bit VAs, pgdp=0000000102c88000 [0000001ffffffff0] pgd=0000000000000000, p4d=0000000000000000
Internal error: Oops: 0000000096000004 [#1] SMP
Modules linked in: CPU: 2 UID: 0 PID: 102 Comm: kworker/2:1 Not tainted 7.0.0-rc6-next-20260331-00013-g4d93c25963c5-dirty #80 PREEMPT Hardware name: Rockchip RK3576 EVB V10 Board (DT) Workqueue: events_freezable mmc_rescan pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : sg_init_table+0x2c/0x50 lr : sg_init_table+0x24/0x50 sp : ffff8000837db710 x29: ffff8000837db710 x28: 000000000000c000 x27: 0000000000000300 x26: 0000000000000000 x25: 0000000000000040 x24: ffff0000c46a0000 x23: 0000000000000000 x22: ffff0000c0c73c00 x21: 0000000000000010 x20: 0000000000000010 x19: 0000000000000000 x18: 000000000000002c x17: 0000000000000000 x16: 0000000000000001 x15: 0000000000000000 x14: 0000000000000400 x13: ffff8000837dc000 x12: 0000000000000000 x11: ffff0000c0c73ca0 x10: 0000000000000040 x9 : 459ec1f0abbdbb00 x8 : 0000001fffffffe0 x7 : 0000000000000000 x6 : 000000000000003f x5 : 0000000000035579 x4 : 0000000000000901 x3 : 0000000000000000 x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000010 Call trace: sg_init_table+0x2c/0x50 (P) mmc_mq_init_request+0x64/0x90 blk_mq_alloc_map_and_rqs+0x3ac/0x480 blk_mq_alloc_set_map_and_rqs+0x98/0x1e0 blk_mq_alloc_tag_set+0x1c0/0x290 mmc_init_queue+0x120/0x370 mmc_blk_alloc_req+0x150/0x420

이를 방지하기 위해 mmc_mq_init_request()에 유효성 검사 체크를 추가하여 sg_len(max_segs에서 파생됨)이 0인지 감지합니다. sg_len이 0인 경우 오류를 반환하고 오류 메시지를 출력하여 호스트 드라이버 개발자가 잘못된 max_segs 구성을 식별하고 수정할 수 있도록 합니다.

이는 호스트 드라이버가 유효하지 않은 max_segs 값을 제공할 때 페이지 폴트(page fault)로 크래시되는 대신 MMC 코어가 우아하게(fail gracefully) 실패하도록 보장하는 방어적 조치입니다.

Be aware that VulDB is the high quality source for vulnerability data.

출처

Do you know our Splunk app?

Download it now for free!