diff options
Diffstat (limited to 'net/ipv4/udp.c')
| -rw-r--r-- | net/ipv4/udp.c | 22 | 
1 files changed, 12 insertions, 10 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 3c58ba02af7d..eed59c847722 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-or-later  /*   * INET		An implementation of the TCP/IP protocol suite for the LINUX   *		operating system.  INET is implemented using the  BSD Socket @@ -69,12 +70,6 @@   *					a single port at the same time.   *	Derek Atkins <[email protected]>: Add Encapulation Support   *	James Chapman		:	Add L2TP encapsulation type. - * - * - *		This program is free software; you can redistribute it and/or - *		modify it under the terms of the GNU General Public License - *		as published by the Free Software Foundation; either version - *		2 of the License, or (at your option) any later version.   */  #define pr_fmt(fmt) "UDP: " fmt @@ -503,7 +498,11 @@ static inline struct sock *__udp4_lib_lookup_skb(struct sk_buff *skb,  struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,  				 __be16 sport, __be16 dport)  { -	return __udp4_lib_lookup_skb(skb, sport, dport, &udp_table); +	const struct iphdr *iph = ip_hdr(skb); + +	return __udp4_lib_lookup(dev_net(skb->dev), iph->saddr, sport, +				 iph->daddr, dport, inet_iif(skb), +				 inet_sdif(skb), &udp_table, NULL);  }  EXPORT_SYMBOL_GPL(udp4_lib_lookup_skb); @@ -538,8 +537,7 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,  	    (inet->inet_dport != rmt_port && inet->inet_dport) ||  	    (inet->inet_rcv_saddr && inet->inet_rcv_saddr != loc_addr) ||  	    ipv6_only_sock(sk) || -	    (sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif && -	     sk->sk_bound_dev_if != sdif)) +	    !udp_sk_bound_dev_eq(net, sk->sk_bound_dev_if, dif, sdif))  		return false;  	if (!ip_mc_sf_allow(sk, loc_addr, rmt_addr, dif, sdif))  		return false; @@ -1779,6 +1777,10 @@ try_again:  		sin->sin_addr.s_addr = ip_hdr(skb)->saddr;  		memset(sin->sin_zero, 0, sizeof(sin->sin_zero));  		*addr_len = sizeof(*sin); + +		if (cgroup_bpf_enabled) +			BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, +							(struct sockaddr *)sin);  	}  	if (udp_sk(sk)->gro_enabled) @@ -2883,7 +2885,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,  	__u16 srcp	  = ntohs(inet->inet_sport);  	seq_printf(f, "%5d: %08X:%04X %08X:%04X" -		" %02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %d", +		" %02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %u",  		bucket, src, srcp, dest, destp, sp->sk_state,  		sk_wmem_alloc_get(sp),  		udp_rqueue_get(sp),  |