AF_UNIX SOCK_STREAM socket supports MSG_OOB.
When OOB data is sent to a socket, recv() will break at that point.
If the next recv() does not have MSG_OOB, the normal data following
the OOB data is returned.
Then, the OOB skb is dropped.
Let's define a new drop reason for that case in manage_oob().
  # echo 1 > /sys/kernel/tracing/events/skb/kfree_skb/enable
  # python3
  >>> from socket import *
  >>> s1, s2 = socketpair(AF_UNIX)
  >>> s1.send(b'a', MSG_OOB)
  >>> s1.send(b'b')
  >>> s2.recv(2)
  b'b'
  # cat /sys/kernel/tracing/trace_pipe
  ...
     python3-223 ... kfree_skb: ... location=unix_stream_read_generic+0x59e/0xc20 reason: UNIX_SKIP_OOB
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250116053441.5758-6-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
        FN(SOCKET_CLOSE)                \
        FN(SOCKET_FILTER)               \
        FN(SOCKET_RCVBUFF)              \
+       FN(UNIX_SKIP_OOB)               \
        FN(PKT_TOO_SMALL)               \
        FN(TCP_CSUM)                    \
        FN(UDP_CSUM)                    \
        SKB_DROP_REASON_SOCKET_FILTER,
        /** @SKB_DROP_REASON_SOCKET_RCVBUFF: socket receive buff is full */
        SKB_DROP_REASON_SOCKET_RCVBUFF,
+       /**
+        * @SKB_DROP_REASON_UNIX_SKIP_OOB: Out-Of-Band data is skipped by
+        * recv() without MSG_OOB so dropped.
+        */
+       SKB_DROP_REASON_UNIX_SKIP_OOB,
        /** @SKB_DROP_REASON_PKT_TOO_SMALL: packet size is too small */
        SKB_DROP_REASON_PKT_TOO_SMALL,
        /** @SKB_DROP_REASON_TCP_CSUM: TCP checksum error */
 
        spin_unlock(&sk->sk_receive_queue.lock);
 
        consume_skb(read_skb);
-       kfree_skb(unread_skb);
+       kfree_skb_reason(unread_skb, SKB_DROP_REASON_UNIX_SKIP_OOB);
 
        return skb;
 }