No description
Find a file
Jens Axboe f8f9ab2d98 io_uring/net: ensure socket is marked connected on connect retry
io_uring does non-blocking connection attempts, which can yield some
unexpected results if a connect request is re-attempted by an an
application. This is equivalent to the following sync syscall sequence:

sock = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP);
connect(sock, &addr, sizeof(addr);

ret == -1 and errno == EINPROGRESS expected here. Now poll for POLLOUT
on sock, and when that returns, we expect the socket to be connected.
But if we follow that procedure with:

connect(sock, &addr, sizeof(addr));

you'd expect ret == -1 and errno == EISCONN here, but you actually get
ret == 0. If we attempt the connection one more time, then we get EISCON
as expected.

io_uring used to do this, but turns out that bluetooth fails with EBADFD
if you attempt to re-connect. Also looks like EISCONN _could_ occur with
this sequence.

Retain the ->in_progress logic, but work-around a potential EISCONN or
EBADFD error and only in those cases look at the sock_error(). This
should work in general and avoid the odd sequence of a repeated connect
request returning success when the socket is already connected.

This is all a side effect of the socket state being in a CONNECTING
state when we get EINPROGRESS, and only a re-connect or other related
operation will turn that into CONNECTED.

Cc: stable@vger.kernel.org
Fixes: 3fb1bd6881 ("io_uring/net: handle -EINPROGRESS correct for IORING_OP_CONNECT")
Link: https://github.com/axboe/liburing/issues/980
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2023-11-03 13:25:50 -06:00
arch As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
block As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
certs This update includes the following changes: 2023-11-02 16:15:30 -10:00
crypto This update includes the following changes: 2023-11-02 16:15:30 -10:00
Documentation Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
drivers As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
fs As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
include As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
init As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
io_uring io_uring/net: ensure socket is marked connected on connect retry 2023-11-03 13:25:50 -06:00
ipc Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
kernel As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
lib As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
LICENSES LICENSES: Add the copyleft-next-0.3.1 license 2022-11-08 15:44:01 +01:00
mm As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
net As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
rust workqueue: Add rust bindings for v6.7 2023-10-30 20:35:48 -10:00
samples Probes updates for v6.7: 2023-11-01 16:15:42 -10:00
scripts As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
security As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
sound As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
tools As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
usr arch: Remove Itanium (IA-64) architecture 2023-09-11 08:13:17 +00:00
virt ARM: 2023-09-07 13:52:20 -07:00
.clang-format iommu: Add for_each_group_device() 2023-05-23 08:15:51 +02:00
.cocciconfig scripts: add Linux .cocciconfig for coccinelle 2016-07-22 12:13:39 +02:00
.get_maintainer.ignore get_maintainer: add Alan to .get_maintainer.ignore 2022-08-20 15:17:44 -07:00
.gitattributes .gitattributes: set diff driver for Rust source code files 2023-05-31 17:48:25 +02:00
.gitignore kbuild: rpm-pkg: rename binkernel.spec to kernel.spec 2023-07-25 00:59:33 +09:00
.mailmap As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
.rustfmt.toml rust: add .rustfmt.toml 2022-09-28 09:02:20 +02:00
COPYING COPYING: state that all contributions really are covered by this file 2020-02-10 13:32:20 -08:00
CREDITS USB: Remove Wireless USB and UWB documentation 2023-08-09 14:17:32 +02:00
Kbuild Kbuild updates for v6.1 2022-10-10 12:00:45 -07:00
Kconfig kbuild: ensure full rebuild when the compiler is updated 2020-05-12 13:28:33 +09:00
MAINTAINERS Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
Makefile linux_kselftest-next-6.7-rc1 2023-11-01 17:08:10 -10:00
README Drop all 00-INDEX files from Documentation/ 2018-09-09 15:08:58 -06:00

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.