Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

af_unix: Add read_sock for stream socket types

To support sockmap for af_unix stream type, implement
read_sock, which is similar to the read_sock for unix
dgram sockets.

Signed-off-by: Jiang Wang <jiang.wang@bytedance.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Cong Wang <cong.wang@bytedance.com>
Acked-by: Jakub Sitnicki <jakub@cloudflare.com>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20210816190327.2739291-2-jiang.wang@bytedance.com

authored by

Jiang Wang and committed by
Andrii Nakryiko
77462de1 edce1a24

+12
+12
net/unix/af_unix.c
··· 679 679 static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int); 680 680 static int unix_read_sock(struct sock *sk, read_descriptor_t *desc, 681 681 sk_read_actor_t recv_actor); 682 + static int unix_stream_read_sock(struct sock *sk, read_descriptor_t *desc, 683 + sk_read_actor_t recv_actor); 682 684 static int unix_dgram_connect(struct socket *, struct sockaddr *, 683 685 int, int); 684 686 static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t); ··· 734 732 .shutdown = unix_shutdown, 735 733 .sendmsg = unix_stream_sendmsg, 736 734 .recvmsg = unix_stream_recvmsg, 735 + .read_sock = unix_stream_read_sock, 737 736 .mmap = sock_no_mmap, 738 737 .sendpage = unix_stream_sendpage, 739 738 .splice_read = unix_stream_splice_read, ··· 2493 2490 return skb; 2494 2491 } 2495 2492 #endif 2493 + 2494 + static int unix_stream_read_sock(struct sock *sk, read_descriptor_t *desc, 2495 + sk_read_actor_t recv_actor) 2496 + { 2497 + if (unlikely(sk->sk_state != TCP_ESTABLISHED)) 2498 + return -ENOTCONN; 2499 + 2500 + return unix_read_sock(sk, desc, recv_actor); 2501 + } 2496 2502 2497 2503 static int unix_stream_read_generic(struct unix_stream_read_state *state, 2498 2504 bool freezable)