From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Borkmann Subject: Re: [bpf PATCH] bpf: sockmap, decrement copied count correctly in redirect error case Date: Tue, 28 Aug 2018 09:04:46 +0200 Message-ID: References: <20180825003659.7508.52198.stgit@john-Precision-Tower-5810> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: netdev@vger.kernel.org To: John Fastabend , alexei.starovoitov@gmail.com Return-path: Received: from www62.your-server.de ([213.133.104.62]:59474 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726446AbeH1KzC (ORCPT ); Tue, 28 Aug 2018 06:55:02 -0400 In-Reply-To: <20180825003659.7508.52198.stgit@john-Precision-Tower-5810> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 08/25/2018 02:37 AM, John Fastabend wrote: > Currently, when a redirect occurs in sockmap and an error occurs in > the redirect call we unwind the scatterlist once in the error path > of bpf_tcp_sendmsg_do_redirect() and then again in sendmsg(). Then > in the error path of sendmsg we decrement the copied count by the > send size. > > However, its possible we partially sent data before the error was > generated. This can happen if do_tcp_sendpages() partially sends the > scatterlist before encountering a memory pressure error. If this > happens we need to decrement the copied value (the value tracking > how many bytes were actually sent to TCP stack) by the number of > remaining bytes _not_ the entire send size. Otherwise we risk > confusing userspace. > > Also we don't need two calls to free the scatterlist one is > good enough. So remove the one in bpf_tcp_sendmsg_do_redirect() and > then properly reduce copied by the number of remaining bytes which > may in fact be the entire send size if no bytes were sent. > > To do this use bool to indicate if free_start_sg() should do mem > accounting or not. > > Signed-off-by: John Fastabend Applied to bpf, thanks John!