lkml.org 
[lkml]   [2020]   [Jun]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH net] rxrpc: Fix race between incoming ACK parser and retransmitter
From
From: David Howells <dhowells@redhat.com>
Date: Thu, 11 Jun 2020 21:57:00 +0100

> There's a race between the retransmission code and the received ACK parser.
> The problem is that the retransmission loop has to drop the lock under
> which it is iterating through the transmission buffer in order to transmit
> a packet, but whilst the lock is dropped, the ACK parser can crank the Tx
> window round and discard the packets from the buffer.
>
> The retransmission code then updated the annotations for the wrong packet
> and a later retransmission thought it had to retransmit a packet that
> wasn't there, leading to a NULL pointer dereference.
>
> Fix this by:
>
> (1) Moving the annotation change to before we drop the lock prior to
> transmission. This means we can't vary the annotation depending on
> the outcome of the transmission, but that's fine - we'll retransmit
> again later if it failed now.
>
> (2) Skipping the packet if the skb pointer is NULL.
>
> The following oops was seen:
>
> BUG: kernel NULL pointer dereference, address: 000000000000002d
> Workqueue: krxrpcd rxrpc_process_call
> RIP: 0010:rxrpc_get_skb+0x14/0x8a
> ...
> Call Trace:
> rxrpc_resend+0x331/0x41e
> ? get_vtime_delta+0x13/0x20
> rxrpc_process_call+0x3c0/0x4ac
> process_one_work+0x18f/0x27f
> worker_thread+0x1a3/0x247
> ? create_worker+0x17d/0x17d
> kthread+0xe6/0xeb
> ? kthread_delayed_work_timer_fn+0x83/0x83
> ret_from_fork+0x1f/0x30
>
> Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
> Signed-off-by: David Howells <dhowells@redhat.com>

Applied, thanks.

\
 
 \ /
  Last update: 2020-06-12 03:19    [W:0.035 / U:0.088 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site