Thread (3 messages) flat view 3 messages, 3 authors, 15d ago

Re: [BUG] general protection fault in espintcp_sendmsg

From: Breno Leitao <leitao@debian.org>
Date: 2026-08-20 10:21:34
Also in: lkml

On Thu, Aug 20, 2026 at 12:53:47AM +0900, Jaeyoung Chung wrote:
Hello,

We found a "general protection fault in espintcp_sendmsg" on Linux v7.2.
The issue was found by our own race fuzzer. We have not analyzed the root
cause, so we do not have a proposed fix to offer.

To reproduce the race reliably, we applied the delay patch below to the
kernel and ran the C reproducer as root inside an x86_64 QEMU guest. The
crash log we observed, the delay patch and the reproducer are all included
below.

The following kernel config options are required to reproduce the issue:
	CONFIG_XFRM=y
	CONFIG_XFRM_USER=y
	CONFIG_INET_ESP=y
	CONFIG_INET_ESPINTCP=y
	CONFIG_KASAN=y

We hope this report is useful. Please let us know if any further
information would help.
this seems to be a real issue.

espintcp_init_sk() installs the espintcp proto and proto_ops before it
publishes the socket's espintcp context:

	sk->sk_prot = &espintcp_prot;
	sk->sk_socket->ops = &espintcp_ops;
	...
	rcu_assign_pointer(icsk->icsk_ulp_data, ctx);

setsockopt(TCP_ULP) holds the socket lock, but the readers pick up the
new handlers without it: inet_sendmsg() and inet_recvmsg() dispatch on
READ_ONCE(sk->sk_prot), sock_poll() on READ_ONCE(sock->ops).

A concurrent write(), read() or poll() then enters espintcp_sendmsg(),
espintcp_recvmsg() or espintcp_poll() with icsk_ulp_data still NULL, and
dereferences it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help