mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 05:52:38 -04:00
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user