mirror of https://gitee.com/openkylin/linux.git
Merge branch 'inet-prevent-skb-changes-in-udp-4-6-_lib_lookup_skb'
Eric Dumazet says: ==================== inet: prevent skb changes in udp{4|6}_lib_lookup_skb() This came while reviewing Alexander Lobakin patch against UDP GRO: We want to make sure skb wont be changed by these helpers while it is owned by GRO stack. ==================== Link: https://lore.kernel.org/r/20201109231349.20946-1-eric.dumazet@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
70408949a3
|
@ -99,7 +99,7 @@ static inline void ipcm_init_sk(struct ipcm_cookie *ipcm,
|
|||
#define PKTINFO_SKB_CB(skb) ((struct in_pktinfo *)((skb)->cb))
|
||||
|
||||
/* return enslaved device index if relevant */
|
||||
static inline int inet_sdif(struct sk_buff *skb)
|
||||
static inline int inet_sdif(const struct sk_buff *skb)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
|
||||
if (skb && ipv4_l3mdev_skb(IPCB(skb)->flags))
|
||||
|
|
|
@ -164,7 +164,7 @@ static inline void udp_csum_pull_header(struct sk_buff *skb)
|
|||
UDP_SKB_CB(skb)->cscov -= sizeof(struct udphdr);
|
||||
}
|
||||
|
||||
typedef struct sock *(*udp_lookup_t)(struct sk_buff *skb, __be16 sport,
|
||||
typedef struct sock *(*udp_lookup_t)(const struct sk_buff *skb, __be16 sport,
|
||||
__be16 dport);
|
||||
|
||||
INDIRECT_CALLABLE_DECLARE(struct sk_buff *udp4_gro_receive(struct list_head *,
|
||||
|
@ -313,7 +313,7 @@ struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
|
|||
struct sock *__udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
|
||||
__be32 daddr, __be16 dport, int dif, int sdif,
|
||||
struct udp_table *tbl, struct sk_buff *skb);
|
||||
struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
|
||||
struct sock *udp4_lib_lookup_skb(const struct sk_buff *skb,
|
||||
__be16 sport, __be16 dport);
|
||||
struct sock *udp6_lib_lookup(struct net *net,
|
||||
const struct in6_addr *saddr, __be16 sport,
|
||||
|
@ -324,7 +324,7 @@ struct sock *__udp6_lib_lookup(struct net *net,
|
|||
const struct in6_addr *daddr, __be16 dport,
|
||||
int dif, int sdif, struct udp_table *tbl,
|
||||
struct sk_buff *skb);
|
||||
struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
|
||||
struct sock *udp6_lib_lookup_skb(const struct sk_buff *skb,
|
||||
__be16 sport, __be16 dport);
|
||||
|
||||
/* UDP uses skb->dev_scratch to cache as much information as possible and avoid
|
||||
|
|
|
@ -541,7 +541,7 @@ static inline struct sock *__udp4_lib_lookup_skb(struct sk_buff *skb,
|
|||
inet_sdif(skb), udptable, skb);
|
||||
}
|
||||
|
||||
struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
|
||||
struct sock *udp4_lib_lookup_skb(const struct sk_buff *skb,
|
||||
__be16 sport, __be16 dport)
|
||||
{
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
|
|
|
@ -276,7 +276,7 @@ static struct sock *__udp6_lib_lookup_skb(struct sk_buff *skb,
|
|||
inet6_sdif(skb), udptable, skb);
|
||||
}
|
||||
|
||||
struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
|
||||
struct sock *udp6_lib_lookup_skb(const struct sk_buff *skb,
|
||||
__be16 sport, __be16 dport)
|
||||
{
|
||||
const struct ipv6hdr *iph = ipv6_hdr(skb);
|
||||
|
|
Loading…
Reference in New Issue