[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fd322c64-9fe6-2244-75c3-2c12fbf4503e@gmail.com>
Date: Wed, 8 Jul 2020 17:02:10 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Christoph Paasch <cpaasch@...le.com>, netdev@...r.kernel.org
Cc: David Miller <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, Wei Wang <weiwan@...gle.com>,
Eric Dumazet <edumazet@...gle.com>
Subject: Re: [PATCH v2 net] tcp: make sure listeners don't initialize
congestion-control state
On 7/8/20 4:18 PM, Christoph Paasch wrote:
> syzkaller found its way into setsockopt with TCP_CONGESTION "cdg".
> tcp_cdg_init() does a kcalloc to store the gradients. As sk_clone_lock
> just copies all the memory, the allocated pointer will be copied as
> well, if the app called setsockopt(..., TCP_CONGESTION) on the listener.
> If now the socket will be destroyed before the congestion-control
> has properly been initialized (through a call to tcp_init_transfer), we
> will end up freeing memory that does not belong to that particular
> socket, opening the door to a double-free:
>
> Wei Wang fixed a part of these CDG-malloc issues with commit c12014440750
> ("tcp: memset ca_priv data to 0 properly").
>
> This patch here fixes the listener-scenario: We make sure that listeners
> setting the congestion-control through setsockopt won't initialize it
> (thus CDG never allocates on listeners). For those who use AF_UNSPEC to
> reuse a socket, tcp_disconnect() is changed to cleanup afterwards.
>
> (The issue can be reproduced at least down to v4.4.x.)
>
> Cc: Wei Wang <weiwan@...gle.com>
> Cc: Eric Dumazet <edumazet@...gle.com>
> Fixes: 2b0a8c9eee81 ("tcp: add CDG congestion control")
> Signed-off-by: Christoph Paasch <cpaasch@...le.com>
> ---
>
> Notes:
> v2: Rather prevent listeners from initializign congestion-control state and
> make sure tcp_disconnect() cleans up for those that want to re-use sockets
> with AF_UNSPEC (suggested by Eric)
SGTM, thanks.
Signed-off-by: Eric Dumazet <edumazet@...gle.com>
Powered by blists - more mailing lists