关键信息 漏洞类型: rxrpc: Fix recv-recv race of completed call 描述: - 当一个调用接收到事件(如传入数据)时,该调用会被放置在套接字的队列中,并且在 中的线程可以被唤醒去处理它。 - 一旦线程从队列中拾取了调用,进一步的事件将导致它被重新排队,一旦套接字锁被释放( 使用 允许套接字并行使用),第二个线程可以进来并再次从套接字队列中弹出调用。 - 在这种情况下,第一个线程将继续接收来自调用的数据,而第二个线程将在 上阻塞。第一个线程可以在此时处理它拾取的事件和第二个线程拾取调用的事件,并可能看到调用终止,在这种情况下,调用将被“释放”,解耦用户调用ID分配给它的控制消息中的调用。 - 第一个线程将正常返回,但第二个线程将唤醒持有 ,如果它看到调用已被释放,则会引发BUG。 修复措施: - 通过仅取消排队调用并在看到已释放时忽略它来修复此问题。我们无法以任何方式告诉用户空间,因为用户调用ID已过期。 相关提交: - Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code") - Reported-by: Junvyang, Tencent Zhuque Lab - Signed-off-by: David Howells - Reviewed-by: Jeffrey Altman - cc: LePremierHomme - cc: Marc Dionne - cc: Simon Horman - cc: linux-afs@lists.infradead.org - Link: https://patchwork.kernel.org/patch/15307631/ - Signed-off-by: Jakub Kicinski - Signed-off-by: Sasha Levin