]> www.infradead.org Git - users/dwmw2/linux.git/commit
af_unix: Set drop reason in unix_dgram_disconnected().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Thu, 16 Jan 2025 05:34:40 +0000 (14:34 +0900)
committerJakub Kicinski <kuba@kernel.org>
Mon, 20 Jan 2025 19:27:41 +0000 (11:27 -0800)
commitb3e365bbf4f47b8f76b25b0fcf3f38916ca53e42
tree5c95ac94b8c5120f48409e5d8d55128d68ed3b17
parentbace4b468049a558295a0f59460fcb51e28f8fde
af_unix: Set drop reason in unix_dgram_disconnected().

unix_dgram_disconnected() is called from two places:

  1. when a connect()ed socket dis-connect()s or re-connect()s to
     another socket

  2. when sendmsg() fails because the peer socket that the client
     has connect()ed to has been close()d

Then, the client's recv queue is purged to remove all messages from
the old peer socket.

Let's define a new drop reason for that case.

  # echo 1 > /sys/kernel/tracing/events/skb/kfree_skb/enable

  # python3
  >>> from socket import *
  >>>
  >>> # s1 has a message from s2
  >>> s1, s2 = socketpair(AF_UNIX, SOCK_DGRAM)
  >>> s2.send(b'hello world')
  >>>
  >>> # re-connect() drops the message from s2
  >>> s3 = socket(AF_UNIX, SOCK_DGRAM)
  >>> s3.bind('')
  >>> s1.connect(s3.getsockname())

  # cat /sys/kernel/tracing/trace_pipe
     python3-250 ... kfree_skb: ... location=skb_queue_purge_reason+0xdc/0x110 reason: UNIX_DISCONNECT

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250116053441.5758-8-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/dropreason-core.h
net/unix/af_unix.c