net:修复 sk->sk_forward_alloc 周围的数据竞争(CVE-2024-53124)
CVE编号
CVE-2024-53124
利用情况
暂无
补丁情况
N/A
披露时间
2024-12-02
漏洞描述
这个漏洞是关于Linux内核中的并发访问问题,特别是在处理TCP监听状态下的套接字(socket)时。漏洞描述指出,当两个线程同时调用tcp_v6_do_rcv()和sk_forward_alloc_add()函数时,会发生数据竞争(data-race)。这种情况发生在sk->sk_state为TCP_LISTEN且sk->sk_lock未锁定的情况下。这种并发访问会导致sk->sk_forward_alloc的不稳定状态,可能导致不可预测的行为和可能的系统崩溃。漏洞的详细情况如下:在Syzkaller测试案例中,有两个线程同时调用tcp_v6_do_rcv(),并且每个线程的skb->truesize为768。在这个过程中,sk_forward_alloc的值会发生变化,但由于没有适当的锁定机制,导致数据竞争。当其中一个线程尝试进行内存回收(sk_mem_uncharge)时,另一个线程可能正在同时进行内存分配(sk_forward_alloc_add),这可能导致不正确的状态和不一致的数据。问题的关键在于,当sk->sk_state为TCP_LISTEN时,不应该在tcp_v6_do_rcv()中调用skb_clone_and_charge_r()。这个问题在后续的tcp_v6_syn_recv_sock()中发生。此外,问题还存在于dccp_v6_do_rcv()函数中,需要进行相同的修复。为了解决此问题,需要对相关的代码进行修改,以确保在并发访问时,对sk->sk_forward_alloc的访问是线程安全的。这可能涉及到添加适当的锁定机制或调整代码逻辑,以确保在多个线程尝试修改共享资源时不会发生数据竞争。这样可以确保系统的稳定性和可靠性。
解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
文章评论