CVE-2026-98284 in Linux정보

요약

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

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

netlink: 잠금 없는(lockless) 리더가 nlk->groups를 사용하는 동안 이를 해제하지 마십시오

netlink_realloc_groups()는 netlink_table_grab() 내에서 krealloc()을 사용합니다. NLGRPSZ(groups)가 다른 kmalloc bucket에 해당할 경우, 이전 비트맵이 즉시 해제됩니다.

nlk->groups / nlk->ngroups의 두 가지 리더(netlink table lock을 보유하지 않음)가 있습니다:

1) sk_diag_dump_groups(). 해시된(바인딩된) 소켓은 __netlink_diag_dump() 내의 rhashtable 순회에서 덤프되며, 여기서는 RCU만 유지됩니다. 덤프 중 mc_list 부분만이 nl_table_lock을 보유합니다.

2) netlink_native_seq_show()( /proc/net/netlink). 이 순회는 commit 21e4902aea80("netlink: Lockless lookup with RCU grace period in socket release") 이후로 잠금 없이(lockless) 수행됩니다.

두 리더 모두 해제된 버퍼를 읽을 수 있으며, sk_diag_dump_groups()는 이전(더 작은) 버퍼의 끝 너머도 읽을 수 있습니다. 이는 @groups 포인터와 새로운 @ngroups 값을 함께 로드하여 NETLINK_DIAG_GROUPS 속성에 결과를 복사하는 경우에 발생합니다.

이것은 commit f773608026ee("netlink: access nlk groups safely in netlink bind and getname")가 bind() 및 getname()에 대해 수정한 것과 동일한 유형의 버그입니다. 이 두 리더는 누락되었습니다. sk_diag_dump_groups()에서 테이블 잠금을 단순히 획득하는 것은 옵션이 아닙니다. 이는 덤프의 mc_list 섹션에서 nl_table_lock이 이미 보유된 상태에서도 호출되기 때문입니다.

잠금 없는 리더들을 안전하게 만듭니다:

- krealloc()에 의해 수행되는 암시적 kfree()에 의존하기보다, RCU grace period 이후에 새 비트맵을 할당하고 이전 것을 해제합니다. - @ngroups 전에 @groups를 release sematics로 게시하며, 잠금 없는 리더는 먼저 @ngroups를 로드하도록 합니다. 이를 통해 리더가 새로운(더 큰) 크구를 이전(더 작은) 버퍼와 짝짓는 일은 절대 발생하지 않으며, 새 포인터를 가져오면서 여전히 이전 크기를 보고 있는 리더는 초기화된 비트맵을 보게 됩니다.

netlink_realloc_groups()는 프로세스 컨텍스트(bind() 및 setsockopt())에서 호출되므로, 테이블이 해제된 후 kfree_rcu_mightsleep()를 사용할 수 있습니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!