No description
  • C 98.2%
  • Assembly 1%
  • Makefile 0.3%
  • Shell 0.2%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jon Maxwell 9435b2f9c0 tcp: don't free a FIN sk_buff in tcp_remove_empty_skb()
[ Upstream commit cf12e6f9124629b18a6182deefc0315f0a73a199 ]

v1: Implement a more general statement as recommended by Eric Dumazet. The
sequence number will be advanced, so this check will fix the FIN case and
other cases.

A customer reported sockets stuck in the CLOSING state. A Vmcore revealed that
the write_queue was not empty as determined by tcp_write_queue_empty() but the
sk_buff containing the FIN flag had been freed and the socket was zombied in
that state. Corresponding pcaps show no FIN from the Linux kernel on the wire.

Some instrumentation was added to the kernel and it was found that there is a
timing window where tcp_sendmsg() can run after tcp_send_fin().

tcp_sendmsg() will hit an error, for example:

1269 ▹       if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN))↩
1270 ▹       ▹       goto do_error;↩

tcp_remove_empty_skb() will then free the FIN sk_buff as "skb->len == 0". The
TCP socket is now wedged in the FIN-WAIT-1 state because the FIN is never sent.

If the other side sends a FIN packet the socket will transition to CLOSING and
remain that way until the system is rebooted.

Fix this by checking for the FIN flag in the sk_buff and don't free it if that
is the case. Testing confirmed that fixed the issue.

Fixes: fdfc5c8594 ("tcp: remove empty skb from write queue in error cases")
Signed-off-by: Jon Maxwell <jmaxwell37@gmail.com>
Reported-by: Monir Zouaoui <Monir.Zouaoui@mail.schwarz>
Reported-by: Simon Stier <simon.stier@mail.schwarz>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-11-17 09:48:39 +01:00
arch s390/gmap: don't unconditionally call pte_unmap_unlock() in __gmap_zap() 2021-11-17 09:48:39 +01:00
block block: remove inaccurate requeue check 2021-11-17 09:48:31 +01:00
certs certs: Trigger creation of RSA module signing key if it's not an RSA key 2021-09-15 09:47:29 +02:00
crypto crypto: ecc - fix CRYPTO_DEFAULT_RNG dependency 2021-11-17 09:48:36 +01:00
Documentation xen/balloon: add late_initcall_sync() for initial ballooning done 2021-11-17 09:48:25 +01:00
drivers irq: mips: avoid nested irq_enter() 2021-11-17 09:48:39 +01:00
fs btrfs: do not take the uuid_mutex in btrfs_rm_device 2021-11-17 09:48:33 +01:00
include task_stack: Fix end_of_stack() for architectures with upwards-growing stack 2021-11-17 09:48:33 +01:00
init kbuild: add CONFIG_LD_IS_LLD 2021-06-30 08:47:44 -04:00
ipc
kernel PM: hibernate: fix sparse warnings 2021-11-17 09:48:39 +01:00
lib lib/xz: Validate the value before assigning it to an enum variable 2021-11-17 09:48:31 +01:00
LICENSES
mm mm, slub: fix potential memoryleak in kmem_cache_open() 2021-10-27 09:54:28 +02:00
net tcp: don't free a FIN sk_buff in tcp_remove_empty_skb() 2021-11-17 09:48:39 +01:00
samples samples: bpf: Fix tracex7 error raised on the missing argument 2021-09-22 12:26:30 +02:00
scripts leaking_addresses: Always print a trailing newline 2021-11-17 09:48:31 +01:00
security smackfs: use netlbl_cfg_cipsov4_del() for deleting cipso_v4_doi 2021-11-17 09:48:39 +01:00
sound ALSA: mixer: fix deadlock in snd_mixer_oss_set_volume 2021-11-17 09:48:25 +01:00
tools libbpf: Fix BTF data layout checks and allow empty BTF 2021-11-17 09:48:39 +01:00
usr
virt KVM: do not shrink halt_poll_ns below grow_start 2021-10-09 14:39:50 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile Linux 5.4.159 2021-11-12 14:43:05 +01:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.