mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
af_unix: Set drop reason in manage_oob().
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>
This commit is contained in:
parent
c49a157c33
commit
533643b091
|
|
@ -9,6 +9,7 @@
|
|||
FN(SOCKET_CLOSE) \
|
||||
FN(SOCKET_FILTER) \
|
||||
FN(SOCKET_RCVBUFF) \
|
||||
FN(UNIX_SKIP_OOB) \
|
||||
FN(PKT_TOO_SMALL) \
|
||||
FN(TCP_CSUM) \
|
||||
FN(UDP_CSUM) \
|
||||
|
|
@ -145,6 +146,11 @@ enum skb_drop_reason {
|
|||
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 */
|
||||
|
|
|
|||
|
|
@ -2695,7 +2695,7 @@ static struct sk_buff *manage_oob(struct sk_buff *skb, struct sock *sk,
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user