lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 19 Dec 2017 19:08:50 -0500 From: Neal Cardwell <ncardwell@...gle.com> To: Steve Ibanez <sibanez@...nford.edu> Cc: Eric Dumazet <edumazet@...gle.com>, Yuchung Cheng <ycheng@...gle.com>, Daniel Borkmann <daniel@...earbox.net>, Netdev <netdev@...r.kernel.org>, Florian Westphal <fw@...len.de>, Mohammad Alizadeh <alizadeh@...il.mit.edu>, Lawrence Brakmo <brakmo@...com> Subject: Re: Linux ECN Handling On Tue, Dec 19, 2017 at 5:00 PM, Steve Ibanez <sibanez@...nford.edu> wrote: > Hi Neal, > > I managed to track down the code path that the unACKed CWR packet is > taking. The tcp_rcv_established() function calls tcp_ack_snd_check() > at the end of step5 and then the return statement indicated below is > invoked, which prevents the __tcp_ack_snd_check() function from > running. > > static inline void tcp_ack_snd_check(struct sock *sk) > { > if (!inet_csk_ack_scheduled(sk)) { > /* We sent a data segment already. */ > return; /* <=== here */ > } > __tcp_ack_snd_check(sk, 1); > } > > So somehow tcp_ack_snd_check() thinks that a data segment was already > sent when in fact it wasn't. Do you see a way around this issue? Thanks for tracking that down! AFAICT in this case the call chain we are trying to achieve is as follows: tcp_rcv_established() -> tcp_data_queue() -> tcp_event_data_recv() -> inet_csk_schedule_ack() The only think I can think of would be to add printks that fire for CWR packets, to isolate why the code bails out before it reaches those calls... thanks, neal
Powered by blists - more mailing lists