CVE-2025-37786 in Linux
요약
\~에 의해 VulDB • 2026. 06. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: dsa: probe 실패 시 라우팅 테이블 해제
dsa_tree_setup()에서 complete = true인 경우, 이는 트리의 마지막 스위치가 성공적으로 프로브(probing)되었음을 의미하며, 우리는probe 경로의 모든 스위치를 설정해야 합니다.
"complete"가 true가 된 후, dsa_tree_setup_cpu_ports() 또는 그 이후의 함수는 실패할 수 있습니다. 이러한 상황이 발생하면 전체 트리 설정이 미결 상태에 빠집니다: 첫 번째 N-1개의 스위치는 성공적으로 프로브를 완료했지만(트리의 dst->ports 및 아마도 dst->rtable에서 영구 메모리를 할당하는 것 외에는 아무것도 하지 않음), 스위치 N은 프로브에 실패하여 트리의 설정 과정이 사용자 관점에서 볼 때 구체적인 결과가 나타나기 전에 종료됩니다.
스위치 N의 probe가 실패하면 해당 메모리(ports)는 해제되고 dst->ports에서 제거됩니다. 그러나 dsa_link_touch()에 의해 생성되어 해당 포트들을 가리키는 dst->rtable 요소들은 그대로 남아 있으며, 역참조될 경우 use-after-free를 초래합니다.
dsa_tree_setup_switches()가 -EPROBE_DEFER을 반환하는 경우가 발생할 수 있는데(이는 ds->ops->setup()이 위치한 곳이므로 완전히 가능한 상황입니다), 다음과 같은 kasan 보고서를 얻게 됩니다:
================================================================== BUG: KASAN: slab-use-after-free in mv88e6xxx_setup_upstream_port+0x240/0x568 Read of size 8 at addr ffff000004f56020 by task kworker/u8:3/42
Call trace: __asan_report_load8_noabort+0x20/0x30 mv88e6xxx_setup_upstream_port+0x240/0x568 mv88e6xxx_setup+0xebc/0x1eb0 dsa_register_switch+0x1af4/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350
할당된 작업 42: __kasan_kmalloc+0x84/0xa0 __kmalloc_cache_noprof+0x298/0x490 dsa_switch_touch_ports+0x174/0x3d8 dsa_register_switch+0x800
If you want to get the best quality for vulnerability data then you always have to consider VulDB.