net: remove addr_len argument of recvmsg() handlers

Use msg->msg_namelen as a place holder instead of a
temporary variable, notably in inet[6]_recvmsg().

This removes stack canaries and allows tail-calls.

$ scripts/bloat-o-meter -t vmlinux.old vmlinux
add/remove: 0/0 grow/shrink: 2/19 up/down: 26/-532 (-506)
Function                                     old     new   delta
rawv6_recvmsg                                744     767     +23
vsock_dgram_recvmsg                           55      58      +3
vsock_connectible_recvmsg                     50      47      -3
unix_stream_recvmsg                          161     158      -3
unix_seqpacket_recvmsg                        62      59      -3
unix_dgram_recvmsg                            42      39      -3
tcp_recvmsg                                  546     543      -3
mptcp_recvmsg                               1568    1565      -3
ping_recvmsg                                 806     800      -6
tcp_bpf_recvmsg_parser                       983     974      -9
ip_recv_error                                588     576     -12
ipv6_recv_rxpmtu                             442     428     -14
udp_recvmsg                                 1243    1224     -19
ipv6_recv_error                             1046    1024     -22
udpv6_recvmsg                               1487    1461     -26
raw_recvmsg                                  465     437     -28
udp_bpf_recvmsg                             1027     984     -43
sock_common_recvmsg                          103      27     -76
inet_recvmsg                                 257     175     -82
inet6_recvmsg                                257     175     -82
tcp_bpf_recvmsg                              663     568     -95
Total: Before=25143834, After=25143328, chg -0.00%

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20260227151120.1346573-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Eric Dumazet
2026-02-27 15:11:20 +00:00
committed by Jakub Kicinski
parent f5ada26d6c
commit 8341c989ac
39 changed files with 99 additions and 127 deletions

View File

@@ -567,7 +567,7 @@ void chtls_shutdown(struct sock *sk, int how);
void chtls_destroy_sock(struct sock *sk); void chtls_destroy_sock(struct sock *sk);
int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size); int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
int chtls_recvmsg(struct sock *sk, struct msghdr *msg, int chtls_recvmsg(struct sock *sk, struct msghdr *msg,
size_t len, int flags, int *addr_len); size_t len, int flags);
void chtls_splice_eof(struct socket *sock); void chtls_splice_eof(struct socket *sock);
int send_tx_flowc_wr(struct sock *sk, int compl, int send_tx_flowc_wr(struct sock *sk, int compl,
u32 snd_nxt, u32 rcv_nxt); u32 snd_nxt, u32 rcv_nxt);

View File

@@ -1332,7 +1332,7 @@ static void chtls_cleanup_rbuf(struct sock *sk, int copied)
} }
static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct chtls_sock *csk = rcu_dereference_sk_user_data(sk); struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
struct chtls_hws *hws = &csk->tlshws; struct chtls_hws *hws = &csk->tlshws;
@@ -1656,7 +1656,7 @@ found_ok_skb:
} }
int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct tcp_sock *tp = tcp_sk(sk); struct tcp_sock *tp = tcp_sk(sk);
struct chtls_sock *csk; struct chtls_sock *csk;
@@ -1670,7 +1670,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
buffers_freed = 0; buffers_freed = 0;
if (unlikely(flags & MSG_OOB)) if (unlikely(flags & MSG_OOB))
return tcp_prot.recvmsg(sk, msg, len, flags, addr_len); return tcp_prot.recvmsg(sk, msg, len, flags);
if (unlikely(flags & MSG_PEEK)) if (unlikely(flags & MSG_PEEK))
return peekmsg(sk, msg, len, flags); return peekmsg(sk, msg, len, flags);
@@ -1684,7 +1684,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
csk = rcu_dereference_sk_user_data(sk); csk = rcu_dereference_sk_user_data(sk);
if (is_tls_rx(csk)) if (is_tls_rx(csk))
return chtls_pt_recvmsg(sk, msg, len, flags, addr_len); return chtls_pt_recvmsg(sk, msg, len, flags);
timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
target = sock_rcvlowat(sk, flags & MSG_WAITALL, len); target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);

View File

@@ -158,7 +158,7 @@ err_nopeer:
} }
static int ovpn_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int ovpn_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
int err = 0, off, copied = 0, ret; int err = 0, off, copied = 0, ret;
struct ovpn_socket *sock; struct ovpn_socket *sock;

View File

@@ -59,8 +59,7 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
int inet_ctl_sock_create(struct sock **sk, unsigned short family, int inet_ctl_sock_create(struct sock **sk, unsigned short family,
unsigned short type, unsigned char protocol, unsigned short type, unsigned char protocol,
struct net *net); struct net *net);
int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int inet_recv_error(struct sock *sk, struct msghdr *msg, int len);
int *addr_len);
struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb); struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb);
int inet_gro_complete(struct sk_buff *skb, int nhoff); int inet_gro_complete(struct sk_buff *skb, int nhoff);

View File

@@ -812,7 +812,7 @@ int ip_getsockopt(struct sock *sk, int level, int optname, char __user *optval,
int ip_ra_control(struct sock *sk, unsigned char on, int ip_ra_control(struct sock *sk, unsigned char on,
void (*destructor)(struct sock *)); void (*destructor)(struct sock *));
int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len); int ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port, void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
u32 info, u8 *payload); u32 info, u8 *payload);
void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport, void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,

View File

@@ -1129,10 +1129,8 @@ int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr_unsized *addr,
int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr); int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr);
void ip6_datagram_release_cb(struct sock *sk); void ip6_datagram_release_cb(struct sock *sk);
int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len);
int *addr_len); int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len);
int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
int *addr_len);
void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port, void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
u32 info, u8 *payload); u32 info, u8 *payload);
void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info); void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info);

View File

@@ -20,8 +20,7 @@
/* Compatibility glue so we can support IPv6 when it's compiled as a module */ /* Compatibility glue so we can support IPv6 when it's compiled as a module */
struct pingv6_ops { struct pingv6_ops {
int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len, int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len);
int *addr_len);
void (*ip6_datagram_recv_common_ctl)(struct sock *sk, void (*ip6_datagram_recv_common_ctl)(struct sock *sk,
struct msghdr *msg, struct msghdr *msg,
struct sk_buff *skb); struct sk_buff *skb);
@@ -64,7 +63,7 @@ int ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
struct sk_buff *); struct sk_buff *);
int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len); int flags);
int ping_common_sendmsg(int family, struct msghdr *msg, size_t len, int ping_common_sendmsg(int family, struct msghdr *msg, size_t len,
void *user_icmph, size_t icmph_len); void *user_icmph, size_t icmph_len);
int ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); int ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);

View File

@@ -1321,7 +1321,7 @@ struct proto {
int (*sendmsg)(struct sock *sk, struct msghdr *msg, int (*sendmsg)(struct sock *sk, struct msghdr *msg,
size_t len); size_t len);
int (*recvmsg)(struct sock *sk, struct msghdr *msg, int (*recvmsg)(struct sock *sk, struct msghdr *msg,
size_t len, int flags, int *addr_len); size_t len, int flags);
void (*splice_eof)(struct socket *sock); void (*splice_eof)(struct socket *sock);
int (*bind)(struct sock *sk, int (*bind)(struct sock *sk,
struct sockaddr_unsized *addr, int addr_len); struct sockaddr_unsized *addr, int addr_len);

View File

@@ -500,7 +500,7 @@ void tcp_reset_keepalive_timer(struct sock *sk, unsigned long timeout);
void tcp_set_keepalive(struct sock *sk, int val); void tcp_set_keepalive(struct sock *sk, int val);
void tcp_syn_ack_timeout(const struct request_sock *req); void tcp_syn_ack_timeout(const struct request_sock *req);
int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len); int flags);
int tcp_set_rcvlowat(struct sock *sk, int val); int tcp_set_rcvlowat(struct sock *sk, int val);
int tcp_set_window_clamp(struct sock *sk, int val); int tcp_set_window_clamp(struct sock *sk, int val);
void tcp_update_recv_tstamps(struct sk_buff *skb, void tcp_update_recv_tstamps(struct sk_buff *skb,

View File

@@ -3967,13 +3967,8 @@ int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags) int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
int addr_len = 0;
int err;
err = sk->sk_prot->recvmsg(sk, msg, size, flags, &addr_len); return sk->sk_prot->recvmsg(sk, msg, size, flags);
if (err >= 0)
msg->msg_namelen = addr_len;
return err;
} }
EXPORT_SYMBOL(sock_common_recvmsg); EXPORT_SYMBOL(sock_common_recvmsg);

View File

@@ -313,7 +313,7 @@ out:
} }
static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
size_t copied = 0; size_t copied = 0;
int err = -EOPNOTSUPP; int err = -EOPNOTSUPP;
@@ -703,7 +703,7 @@ out:
} }
static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
size_t copied = 0; size_t copied = 0;
int err = -EOPNOTSUPP; int err = -EOPNOTSUPP;
@@ -737,7 +737,7 @@ static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
saddr->family = AF_IEEE802154; saddr->family = AF_IEEE802154;
ieee802154_addr_to_sa(&saddr->addr, &mac_cb(skb)->source); ieee802154_addr_to_sa(&saddr->addr, &mac_cb(skb)->source);
*addr_len = sizeof(*saddr); msg->msg_namelen = sizeof(*saddr);
} }
if (ro->want_lqi) { if (ro->want_lqi) {

View File

@@ -877,22 +877,17 @@ void inet_splice_eof(struct socket *sock)
EXPORT_SYMBOL_GPL(inet_splice_eof); EXPORT_SYMBOL_GPL(inet_splice_eof);
INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *, INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *,
size_t, int, int *)); size_t, int));
int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags) int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
int addr_len = 0;
int err;
if (likely(!(flags & MSG_ERRQUEUE))) if (likely(!(flags & MSG_ERRQUEUE)))
sock_rps_record_flow(sk); sock_rps_record_flow(sk);
err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg, return INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
sk, msg, size, flags, &addr_len); sk, msg, size, flags);
if (err >= 0)
msg->msg_namelen = addr_len;
return err;
} }
EXPORT_SYMBOL(inet_recvmsg); EXPORT_SYMBOL(inet_recvmsg);
@@ -1577,15 +1572,15 @@ __be32 inet_current_timestamp(void)
} }
EXPORT_SYMBOL(inet_current_timestamp); EXPORT_SYMBOL(inet_current_timestamp);
int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) int inet_recv_error(struct sock *sk, struct msghdr *msg, int len)
{ {
unsigned int family = READ_ONCE(sk->sk_family); unsigned int family = READ_ONCE(sk->sk_family);
if (family == AF_INET) if (family == AF_INET)
return ip_recv_error(sk, msg, len, addr_len); return ip_recv_error(sk, msg, len);
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
if (family == AF_INET6) if (family == AF_INET6)
return pingv6_ops.ipv6_recv_error(sk, msg, len, addr_len); return pingv6_ops.ipv6_recv_error(sk, msg, len);
#endif #endif
return -EINVAL; return -EINVAL;
} }

View File

@@ -520,7 +520,7 @@ static bool ipv4_datagram_support_cmsg(const struct sock *sk,
/* /*
* Handle MSG_ERRQUEUE * Handle MSG_ERRQUEUE
*/ */
int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
{ {
struct sock_exterr_skb *serr; struct sock_exterr_skb *serr;
struct sk_buff *skb; struct sk_buff *skb;
@@ -557,7 +557,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
serr->addr_offset); serr->addr_offset);
sin->sin_port = serr->port; sin->sin_port = serr->port;
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err)); memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));

View File

@@ -848,8 +848,7 @@ do_confirm:
goto out; goto out;
} }
int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags)
int *addr_len)
{ {
struct inet_sock *isk = inet_sk(sk); struct inet_sock *isk = inet_sk(sk);
int family = sk->sk_family; int family = sk->sk_family;
@@ -864,7 +863,7 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
goto out; goto out;
if (flags & MSG_ERRQUEUE) if (flags & MSG_ERRQUEUE)
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
skb = skb_recv_datagram(sk, flags, &err); skb = skb_recv_datagram(sk, flags, &err);
if (!skb) if (!skb)
@@ -892,7 +891,7 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
sin->sin_port = 0 /* skb->h.uh->source */; sin->sin_port = 0 /* skb->h.uh->source */;
sin->sin_addr.s_addr = ip_hdr(skb)->saddr; sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
if (inet_cmsg_flags(isk)) if (inet_cmsg_flags(isk))
@@ -913,7 +912,7 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
sin6->sin6_scope_id = sin6->sin6_scope_id =
ipv6_iface_scope_id(&sin6->sin6_addr, ipv6_iface_scope_id(&sin6->sin6_addr,
inet6_iif(skb)); inet6_iif(skb));
*addr_len = sizeof(*sin6); msg->msg_namelen = sizeof(*sin6);
} }
if (inet6_sk(sk)->rxopt.all) if (inet6_sk(sk)->rxopt.all)

View File

@@ -739,7 +739,7 @@ out:
*/ */
static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet = inet_sk(sk);
size_t copied = 0; size_t copied = 0;
@@ -751,7 +751,7 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
goto out; goto out;
if (flags & MSG_ERRQUEUE) { if (flags & MSG_ERRQUEUE) {
err = ip_recv_error(sk, msg, len, addr_len); err = ip_recv_error(sk, msg, len);
goto out; goto out;
} }
@@ -777,7 +777,7 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
sin->sin_addr.s_addr = ip_hdr(skb)->saddr; sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
sin->sin_port = 0; sin->sin_port = 0;
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
if (inet_cmsg_flags(inet)) if (inet_cmsg_flags(inet))
ip_cmsg_recv(msg, skb); ip_cmsg_recv(msg, skb);

View File

@@ -2961,14 +2961,13 @@ recv_sndq:
goto out; goto out;
} }
int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags)
int *addr_len)
{ {
int cmsg_flags = 0, ret; int cmsg_flags = 0, ret;
struct scm_timestamping_internal tss; struct scm_timestamping_internal tss;
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
if (sk_can_busy_loop(sk) && if (sk_can_busy_loop(sk) &&
skb_queue_empty_lockless(&sk->sk_receive_queue) && skb_queue_empty_lockless(&sk->sk_receive_queue) &&

View File

@@ -221,8 +221,7 @@ static bool is_next_msg_fin(struct sk_psock *psock)
static int tcp_bpf_recvmsg_parser(struct sock *sk, static int tcp_bpf_recvmsg_parser(struct sock *sk,
struct msghdr *msg, struct msghdr *msg,
size_t len, size_t len,
int flags, int flags)
int *addr_len)
{ {
int peek = flags & MSG_PEEK; int peek = flags & MSG_PEEK;
struct sk_psock *psock; struct sk_psock *psock;
@@ -232,14 +231,14 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
u32 seq; u32 seq;
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
if (!len) if (!len)
return 0; return 0;
psock = sk_psock_get(sk); psock = sk_psock_get(sk);
if (unlikely(!psock)) if (unlikely(!psock))
return tcp_recvmsg(sk, msg, len, flags, addr_len); return tcp_recvmsg(sk, msg, len, flags);
lock_sock(sk); lock_sock(sk);
tcp = tcp_sk(sk); tcp = tcp_sk(sk);
@@ -352,24 +351,24 @@ static int tcp_bpf_ioctl(struct sock *sk, int cmd, int *karg)
} }
static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct sk_psock *psock; struct sk_psock *psock;
int copied, ret; int copied, ret;
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
if (!len) if (!len)
return 0; return 0;
psock = sk_psock_get(sk); psock = sk_psock_get(sk);
if (unlikely(!psock)) if (unlikely(!psock))
return tcp_recvmsg(sk, msg, len, flags, addr_len); return tcp_recvmsg(sk, msg, len, flags);
if (!skb_queue_empty(&sk->sk_receive_queue) && if (!skb_queue_empty(&sk->sk_receive_queue) &&
sk_psock_queue_empty(psock)) { sk_psock_queue_empty(psock)) {
sk_psock_put(sk, psock); sk_psock_put(sk, psock);
return tcp_recvmsg(sk, msg, len, flags, addr_len); return tcp_recvmsg(sk, msg, len, flags);
} }
lock_sock(sk); lock_sock(sk);
msg_bytes_ready: msg_bytes_ready:
@@ -389,7 +388,7 @@ msg_bytes_ready:
goto msg_bytes_ready; goto msg_bytes_ready;
release_sock(sk); release_sock(sk);
sk_psock_put(sk, psock); sk_psock_put(sk, psock);
return tcp_recvmsg(sk, msg, len, flags, addr_len); return tcp_recvmsg(sk, msg, len, flags);
} }
copied = -EAGAIN; copied = -EAGAIN;
} }

View File

@@ -2070,8 +2070,7 @@ EXPORT_IPV6_MOD(udp_read_skb);
* return it, otherwise we block. * return it, otherwise we block.
*/ */
int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags)
int *addr_len)
{ {
struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet = inet_sk(sk);
DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name); DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
@@ -2082,7 +2081,7 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
bool checksum_valid = false; bool checksum_valid = false;
if (flags & MSG_ERRQUEUE) if (flags & MSG_ERRQUEUE)
return ip_recv_error(sk, msg, len, addr_len); return ip_recv_error(sk, msg, len);
try_again: try_again:
off = sk_peek_offset(sk, flags); off = sk_peek_offset(sk, flags);
@@ -2145,11 +2144,11 @@ try_again:
sin->sin_port = udp_hdr(skb)->source; sin->sin_port = udp_hdr(skb)->source;
sin->sin_addr.s_addr = ip_hdr(skb)->saddr; sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk,
(struct sockaddr *)sin, (struct sockaddr *)sin,
addr_len); &msg->msg_namelen);
} }
if (udp_test_bit(GRO_ENABLED, sk)) if (udp_test_bit(GRO_ENABLED, sk))

View File

@@ -12,13 +12,13 @@
static struct proto *udpv6_prot_saved __read_mostly; static struct proto *udpv6_prot_saved __read_mostly;
static int sk_udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int sk_udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
if (sk->sk_family == AF_INET6) if (sk->sk_family == AF_INET6)
return udpv6_prot_saved->recvmsg(sk, msg, len, flags, addr_len); return udpv6_prot_saved->recvmsg(sk, msg, len, flags);
#endif #endif
return udp_prot.recvmsg(sk, msg, len, flags, addr_len); return udp_prot.recvmsg(sk, msg, len, flags);
} }
static bool udp_sk_has_data(struct sock *sk) static bool udp_sk_has_data(struct sock *sk)
@@ -61,23 +61,23 @@ static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
} }
static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct sk_psock *psock; struct sk_psock *psock;
int copied, ret; int copied, ret;
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
if (!len) if (!len)
return 0; return 0;
psock = sk_psock_get(sk); psock = sk_psock_get(sk);
if (unlikely(!psock)) if (unlikely(!psock))
return sk_udp_recvmsg(sk, msg, len, flags, addr_len); return sk_udp_recvmsg(sk, msg, len, flags);
if (!psock_has_data(psock)) { if (!psock_has_data(psock)) {
ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len); ret = sk_udp_recvmsg(sk, msg, len, flags);
goto out; goto out;
} }
@@ -92,7 +92,7 @@ msg_bytes_ready:
if (data) { if (data) {
if (psock_has_data(psock)) if (psock_has_data(psock))
goto msg_bytes_ready; goto msg_bytes_ready;
ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len); ret = sk_udp_recvmsg(sk, msg, len, flags);
goto out; goto out;
} }
copied = -EAGAIN; copied = -EAGAIN;

View File

@@ -18,8 +18,7 @@ int udp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
int udp_getsockopt(struct sock *sk, int level, int optname, int udp_getsockopt(struct sock *sk, int level, int optname,
char __user *optval, int __user *optlen); char __user *optval, int __user *optlen);
int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags);
int *addr_len);
void udp_destroy_sock(struct sock *sk); void udp_destroy_sock(struct sock *sk);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS

View File

@@ -661,25 +661,20 @@ int inet6_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
} }
INDIRECT_CALLABLE_DECLARE(int udpv6_recvmsg(struct sock *, struct msghdr *, INDIRECT_CALLABLE_DECLARE(int udpv6_recvmsg(struct sock *, struct msghdr *,
size_t, int, int *)); size_t, int));
int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags) int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
const struct proto *prot; const struct proto *prot;
int addr_len = 0;
int err;
if (likely(!(flags & MSG_ERRQUEUE))) if (likely(!(flags & MSG_ERRQUEUE)))
sock_rps_record_flow(sk); sock_rps_record_flow(sk);
/* IPV6_ADDRFORM can change sk->sk_prot under us. */ /* IPV6_ADDRFORM can change sk->sk_prot under us. */
prot = READ_ONCE(sk->sk_prot); prot = READ_ONCE(sk->sk_prot);
err = INDIRECT_CALL_2(prot->recvmsg, tcp_recvmsg, udpv6_recvmsg, return INDIRECT_CALL_2(prot->recvmsg, tcp_recvmsg, udpv6_recvmsg,
sk, msg, size, flags, &addr_len); sk, msg, size, flags);
if (err >= 0)
msg->msg_namelen = addr_len;
return err;
} }
const struct proto_ops inet6_stream_ops = { const struct proto_ops inet6_stream_ops = {

View File

@@ -452,7 +452,7 @@ static bool ip6_datagram_support_cmsg(struct sk_buff *skb,
/* /*
* Handle MSG_ERRQUEUE * Handle MSG_ERRQUEUE
*/ */
int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
{ {
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
struct sock_exterr_skb *serr; struct sock_exterr_skb *serr;
@@ -503,7 +503,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
&sin->sin6_addr); &sin->sin6_addr);
sin->sin6_scope_id = 0; sin->sin6_scope_id = 0;
} }
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err)); memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
@@ -545,8 +545,7 @@ EXPORT_SYMBOL_GPL(ipv6_recv_error);
/* /*
* Handle IPV6_RECVPATHMTU * Handle IPV6_RECVPATHMTU
*/ */
int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len, int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
int *addr_len)
{ {
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
struct sk_buff *skb; struct sk_buff *skb;
@@ -579,7 +578,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
sin->sin6_port = 0; sin->sin6_port = 0;
sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id; sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id;
sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr; sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr;
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info); put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info);

View File

@@ -24,8 +24,7 @@
#include <net/ping.h> #include <net/ping.h>
/* Compatibility glue so we can support IPv6 when it's compiled as a module */ /* Compatibility glue so we can support IPv6 when it's compiled as a module */
static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
int *addr_len)
{ {
return -EAFNOSUPPORT; return -EAFNOSUPPORT;
} }

View File

@@ -432,7 +432,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
*/ */
static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name); DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
@@ -444,10 +444,10 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (flags & MSG_ERRQUEUE) if (flags & MSG_ERRQUEUE)
return ipv6_recv_error(sk, msg, len, addr_len); return ipv6_recv_error(sk, msg, len);
if (np->rxopt.bits.rxpmtu && READ_ONCE(np->rxpmtu)) if (np->rxopt.bits.rxpmtu && READ_ONCE(np->rxpmtu))
return ipv6_recv_rxpmtu(sk, msg, len, addr_len); return ipv6_recv_rxpmtu(sk, msg, len);
skb = skb_recv_datagram(sk, flags, &err); skb = skb_recv_datagram(sk, flags, &err);
if (!skb) if (!skb)
@@ -481,7 +481,7 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
sin6->sin6_flowinfo = 0; sin6->sin6_flowinfo = 0;
sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr, sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr,
inet6_iif(skb)); inet6_iif(skb));
*addr_len = sizeof(*sin6); msg->msg_namelen = sizeof(*sin6);
} }
sock_recv_cmsgs(msg, sk, skb); sock_recv_cmsgs(msg, sk, skb);

View File

@@ -465,7 +465,7 @@ static int udp6_skb_len(struct sk_buff *skb)
*/ */
int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet = inet_sk(sk);
@@ -478,10 +478,10 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int is_udp4; int is_udp4;
if (flags & MSG_ERRQUEUE) if (flags & MSG_ERRQUEUE)
return ipv6_recv_error(sk, msg, len, addr_len); return ipv6_recv_error(sk, msg, len);
if (np->rxopt.bits.rxpmtu && READ_ONCE(np->rxpmtu)) if (np->rxopt.bits.rxpmtu && READ_ONCE(np->rxpmtu))
return ipv6_recv_rxpmtu(sk, msg, len, addr_len); return ipv6_recv_rxpmtu(sk, msg, len);
try_again: try_again:
off = sk_peek_offset(sk, flags); off = sk_peek_offset(sk, flags);
@@ -553,11 +553,11 @@ try_again:
ipv6_iface_scope_id(&sin6->sin6_addr, ipv6_iface_scope_id(&sin6->sin6_addr,
inet6_iif(skb)); inet6_iif(skb));
} }
*addr_len = sizeof(*sin6); msg->msg_namelen = sizeof(*sin6);
BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk, BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk,
(struct sockaddr *)sin6, (struct sockaddr *)sin6,
addr_len); &msg->msg_namelen);
} }
if (udp_test_bit(GRO_ENABLED, sk)) if (udp_test_bit(GRO_ENABLED, sk))

View File

@@ -22,8 +22,7 @@ int udpv6_getsockopt(struct sock *sk, int level, int optname,
int udpv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval, int udpv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
unsigned int optlen); unsigned int optlen);
int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len); int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len);
int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags);
int *addr_len);
void udpv6_destroy_sock(struct sock *sk); void udpv6_destroy_sock(struct sock *sk);
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS

View File

@@ -537,7 +537,7 @@ no_route:
} }
static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg, static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
size_t len, int flags, int *addr_len) size_t len, int flags)
{ {
struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet = inet_sk(sk);
size_t copied = 0; size_t copied = 0;
@@ -570,7 +570,7 @@ static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
sin->sin_addr.s_addr = ip_hdr(skb)->saddr; sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
sin->sin_port = 0; sin->sin_port = 0;
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin); msg->msg_namelen = sizeof(*sin);
} }
if (inet_cmsg_flags(inet)) if (inet_cmsg_flags(inet))
ip_cmsg_recv(msg, skb); ip_cmsg_recv(msg, skb);

View File

@@ -679,7 +679,7 @@ do_confirm:
} }
static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name); DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name);
@@ -691,7 +691,7 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
goto out; goto out;
if (flags & MSG_ERRQUEUE) if (flags & MSG_ERRQUEUE)
return ipv6_recv_error(sk, msg, len, addr_len); return ipv6_recv_error(sk, msg, len);
skb = skb_recv_datagram(sk, flags, &err); skb = skb_recv_datagram(sk, flags, &err);
if (!skb) if (!skb)
@@ -719,7 +719,7 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
lsa->l2tp_conn_id = 0; lsa->l2tp_conn_id = 0;
if (ipv6_addr_type(&lsa->l2tp_addr) & IPV6_ADDR_LINKLOCAL) if (ipv6_addr_type(&lsa->l2tp_addr) & IPV6_ADDR_LINKLOCAL)
lsa->l2tp_scope_id = inet6_iif(skb); lsa->l2tp_scope_id = inet6_iif(skb);
*addr_len = sizeof(*lsa); msg->msg_namelen = sizeof(*lsa);
} }
if (np->rxopt.all) if (np->rxopt.all)

View File

@@ -2259,7 +2259,7 @@ static unsigned int mptcp_inq_hint(const struct sock *sk)
} }
static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct mptcp_sock *msk = mptcp_sk(sk); struct mptcp_sock *msk = mptcp_sk(sk);
struct scm_timestamping_internal tss; struct scm_timestamping_internal tss;
@@ -2269,7 +2269,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
/* MSG_ERRQUEUE is really a no-op till we support IP_RECVERR */ /* MSG_ERRQUEUE is really a no-op till we support IP_RECVERR */
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
lock_sock(sk); lock_sock(sk);
if (unlikely(sk->sk_state == TCP_LISTEN)) { if (unlikely(sk->sk_state == TCP_LISTEN)) {

View File

@@ -109,7 +109,7 @@ static int pn_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
} }
static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct sk_buff *skb = NULL; struct sk_buff *skb = NULL;
struct sockaddr_pn sa; struct sockaddr_pn sa;
@@ -143,7 +143,7 @@ static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
if (msg->msg_name != NULL) { if (msg->msg_name != NULL) {
__sockaddr_check_size(sizeof(sa)); __sockaddr_check_size(sizeof(sa));
memcpy(msg->msg_name, &sa, sizeof(sa)); memcpy(msg->msg_name, &sa, sizeof(sa));
*addr_len = sizeof(sa); msg->msg_namelen = sizeof(sa);
} }
out: out:

View File

@@ -1262,7 +1262,7 @@ struct sk_buff *pep_read(struct sock *sk)
} }
static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct sk_buff *skb; struct sk_buff *skb;
int err; int err;

View File

@@ -2087,7 +2087,7 @@ static int sctp_skb_pull(struct sk_buff *skb, int len)
* 5 for complete description of the flags. * 5 for complete description of the flags.
*/ */
static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct sctp_ulpevent *event = NULL; struct sctp_ulpevent *event = NULL;
struct sctp_sock *sp = sctp_sk(sk); struct sctp_sock *sp = sctp_sk(sk);
@@ -2096,11 +2096,11 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int err = 0; int err = 0;
int skb_len; int skb_len;
pr_debug("%s: sk:%p, msghdr:%p, len:%zd, flags:0x%x, addr_len:%p)\n", pr_debug("%s: sk:%p, msghdr:%p, len:%zd, flags:0x%x)\n",
__func__, sk, msg, len, flags, addr_len); __func__, sk, msg, len, flags);
if (unlikely(flags & MSG_ERRQUEUE)) if (unlikely(flags & MSG_ERRQUEUE))
return inet_recv_error(sk, msg, len, addr_len); return inet_recv_error(sk, msg, len);
if (sk_can_busy_loop(sk) && if (sk_can_busy_loop(sk) &&
skb_queue_empty_lockless(&sk->sk_receive_queue)) skb_queue_empty_lockless(&sk->sk_receive_queue))
@@ -2141,9 +2141,9 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
sock_recv_cmsgs(msg, sk, head_skb); sock_recv_cmsgs(msg, sk, head_skb);
if (sctp_ulpevent_is_notification(event)) { if (sctp_ulpevent_is_notification(event)) {
msg->msg_flags |= MSG_NOTIFICATION; msg->msg_flags |= MSG_NOTIFICATION;
sp->pf->event_msgname(event, msg->msg_name, addr_len); sp->pf->event_msgname(event, msg->msg_name, &msg->msg_namelen);
} else { } else {
sp->pf->skb_msgname(head_skb, msg->msg_name, addr_len); sp->pf->skb_msgname(head_skb, msg->msg_name, &msg->msg_namelen);
} }
/* Check if we allow SCTP_NXTINFO. */ /* Check if we allow SCTP_NXTINFO. */

View File

@@ -161,7 +161,7 @@ void tls_sw_free_resources_rx(struct sock *sk);
void tls_sw_release_resources_rx(struct sock *sk); void tls_sw_release_resources_rx(struct sock *sk);
void tls_sw_free_ctx_rx(struct tls_context *tls_ctx); void tls_sw_free_ctx_rx(struct tls_context *tls_ctx);
int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len); int flags);
bool tls_sw_sock_is_readable(struct sock *sk); bool tls_sw_sock_is_readable(struct sock *sk);
ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos, ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
struct pipe_inode_info *pipe, struct pipe_inode_info *pipe,

View File

@@ -2031,8 +2031,7 @@ static void tls_rx_reader_unlock(struct sock *sk, struct tls_sw_context_rx *ctx)
int tls_sw_recvmsg(struct sock *sk, int tls_sw_recvmsg(struct sock *sk,
struct msghdr *msg, struct msghdr *msg,
size_t len, size_t len,
int flags, int flags)
int *addr_len)
{ {
struct tls_context *tls_ctx = tls_get_ctx(sk); struct tls_context *tls_ctx = tls_get_ctx(sk);
struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx); struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);

View File

@@ -2665,7 +2665,7 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t si
const struct proto *prot = READ_ONCE(sk->sk_prot); const struct proto *prot = READ_ONCE(sk->sk_prot);
if (prot != &unix_dgram_proto) if (prot != &unix_dgram_proto)
return prot->recvmsg(sk, msg, size, flags, NULL); return prot->recvmsg(sk, msg, size, flags);
#endif #endif
return __unix_dgram_recvmsg(sk, msg, size, flags); return __unix_dgram_recvmsg(sk, msg, size, flags);
} }
@@ -3139,7 +3139,7 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
const struct proto *prot = READ_ONCE(sk->sk_prot); const struct proto *prot = READ_ONCE(sk->sk_prot);
if (prot != &unix_stream_proto) if (prot != &unix_stream_proto)
return prot->recvmsg(sk, msg, size, flags, NULL); return prot->recvmsg(sk, msg, size, flags);
#endif #endif
return unix_stream_read_generic(&state, true); return unix_stream_read_generic(&state, true);
} }

View File

@@ -49,7 +49,7 @@ static int __unix_recvmsg(struct sock *sk, struct msghdr *msg,
} }
static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg, static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
size_t len, int flags, int *addr_len) size_t len, int flags)
{ {
struct unix_sock *u = unix_sk(sk); struct unix_sock *u = unix_sk(sk);
struct sk_psock *psock; struct sk_psock *psock;

View File

@@ -1502,7 +1502,7 @@ int vsock_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
prot = READ_ONCE(sk->sk_prot); prot = READ_ONCE(sk->sk_prot);
if (prot != &vsock_proto) if (prot != &vsock_proto)
return prot->recvmsg(sk, msg, len, flags, NULL); return prot->recvmsg(sk, msg, len, flags);
#endif #endif
return __vsock_dgram_recvmsg(sock, msg, len, flags); return __vsock_dgram_recvmsg(sock, msg, len, flags);
@@ -2575,7 +2575,7 @@ vsock_connectible_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
prot = READ_ONCE(sk->sk_prot); prot = READ_ONCE(sk->sk_prot);
if (prot != &vsock_proto) if (prot != &vsock_proto)
return prot->recvmsg(sk, msg, len, flags, NULL); return prot->recvmsg(sk, msg, len, flags);
#endif #endif
return __vsock_connectible_recvmsg(sock, msg, len, flags); return __vsock_connectible_recvmsg(sock, msg, len, flags);

View File

@@ -74,7 +74,7 @@ static int __vsock_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int
} }
static int vsock_bpf_recvmsg(struct sock *sk, struct msghdr *msg, static int vsock_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
size_t len, int flags, int *addr_len) size_t len, int flags)
{ {
struct sk_psock *psock; struct sk_psock *psock;
struct vsock_sock *vsk; struct vsock_sock *vsk;

View File

@@ -133,7 +133,7 @@ static int espintcp_parse(struct strparser *strp, struct sk_buff *skb)
} }
static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len) int flags)
{ {
struct espintcp_ctx *ctx = espintcp_getctx(sk); struct espintcp_ctx *ctx = espintcp_getctx(sk);
struct sk_buff *skb; struct sk_buff *skb;