| From 5d675d4b26311bfb2a058ba39a6cfd70b3aea3a4 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 30 Aug 2021 20:26:08 -0700 |
| Subject: fou: remove sparse errors |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit 8d65cd8d25fa23951171094553901d69a88ccdff ] |
| |
| We need to add __rcu qualifier to avoid these errors: |
| |
| net/ipv4/fou.c:250:18: warning: incorrect type in assignment (different address spaces) |
| net/ipv4/fou.c:250:18: expected struct net_offload const **offloads |
| net/ipv4/fou.c:250:18: got struct net_offload const [noderef] __rcu ** |
| net/ipv4/fou.c:251:15: error: incompatible types in comparison expression (different address spaces): |
| net/ipv4/fou.c:251:15: struct net_offload const [noderef] __rcu * |
| net/ipv4/fou.c:251:15: struct net_offload const * |
| net/ipv4/fou.c:272:18: warning: incorrect type in assignment (different address spaces) |
| net/ipv4/fou.c:272:18: expected struct net_offload const **offloads |
| net/ipv4/fou.c:272:18: got struct net_offload const [noderef] __rcu ** |
| net/ipv4/fou.c:273:15: error: incompatible types in comparison expression (different address spaces): |
| net/ipv4/fou.c:273:15: struct net_offload const [noderef] __rcu * |
| net/ipv4/fou.c:273:15: struct net_offload const * |
| net/ipv4/fou.c:442:18: warning: incorrect type in assignment (different address spaces) |
| net/ipv4/fou.c:442:18: expected struct net_offload const **offloads |
| net/ipv4/fou.c:442:18: got struct net_offload const [noderef] __rcu ** |
| net/ipv4/fou.c:443:15: error: incompatible types in comparison expression (different address spaces): |
| net/ipv4/fou.c:443:15: struct net_offload const [noderef] __rcu * |
| net/ipv4/fou.c:443:15: struct net_offload const * |
| net/ipv4/fou.c:489:18: warning: incorrect type in assignment (different address spaces) |
| net/ipv4/fou.c:489:18: expected struct net_offload const **offloads |
| net/ipv4/fou.c:489:18: got struct net_offload const [noderef] __rcu ** |
| net/ipv4/fou.c:490:15: error: incompatible types in comparison expression (different address spaces): |
| net/ipv4/fou.c:490:15: struct net_offload const [noderef] __rcu * |
| net/ipv4/fou.c:490:15: struct net_offload const * |
| net/ipv4/udp_offload.c:170:26: warning: incorrect type in assignment (different address spaces) |
| net/ipv4/udp_offload.c:170:26: expected struct net_offload const **offloads |
| net/ipv4/udp_offload.c:170:26: got struct net_offload const [noderef] __rcu ** |
| net/ipv4/udp_offload.c:171:23: error: incompatible types in comparison expression (different address spaces): |
| net/ipv4/udp_offload.c:171:23: struct net_offload const [noderef] __rcu * |
| net/ipv4/udp_offload.c:171:23: struct net_offload const * |
| |
| Fixes: efc98d08e1ec ("fou: eliminate IPv4,v6 specific GRO functions") |
| Fixes: 8bce6d7d0d1e ("udp: Generalize skb_udp_segment") |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Stable-dep-of: 7e4196935069 ("fou: Fix null-ptr-deref in GRO.") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/ipv4/fou.c | 10 +++++----- |
| net/ipv4/udp_offload.c | 2 +- |
| 2 files changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c |
| index e5f69b0bf3df..8fcbc6258ec5 100644 |
| --- a/net/ipv4/fou.c |
| +++ b/net/ipv4/fou.c |
| @@ -230,8 +230,8 @@ static struct sk_buff *fou_gro_receive(struct sock *sk, |
| struct list_head *head, |
| struct sk_buff *skb) |
| { |
| + const struct net_offload __rcu **offloads; |
| u8 proto = fou_from_sock(sk)->protocol; |
| - const struct net_offload **offloads; |
| const struct net_offload *ops; |
| struct sk_buff *pp = NULL; |
| |
| @@ -263,10 +263,10 @@ static struct sk_buff *fou_gro_receive(struct sock *sk, |
| static int fou_gro_complete(struct sock *sk, struct sk_buff *skb, |
| int nhoff) |
| { |
| - const struct net_offload *ops; |
| + const struct net_offload __rcu **offloads; |
| u8 proto = fou_from_sock(sk)->protocol; |
| + const struct net_offload *ops; |
| int err = -ENOSYS; |
| - const struct net_offload **offloads; |
| |
| rcu_read_lock(); |
| offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; |
| @@ -311,7 +311,7 @@ static struct sk_buff *gue_gro_receive(struct sock *sk, |
| struct list_head *head, |
| struct sk_buff *skb) |
| { |
| - const struct net_offload **offloads; |
| + const struct net_offload __rcu **offloads; |
| const struct net_offload *ops; |
| struct sk_buff *pp = NULL; |
| struct sk_buff *p; |
| @@ -457,8 +457,8 @@ static struct sk_buff *gue_gro_receive(struct sock *sk, |
| |
| static int gue_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff) |
| { |
| - const struct net_offload **offloads; |
| struct guehdr *guehdr = (struct guehdr *)(skb->data + nhoff); |
| + const struct net_offload __rcu **offloads; |
| const struct net_offload *ops; |
| unsigned int guehlen = 0; |
| u8 proto; |
| diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c |
| index a0b569d0085b..57168d4fa195 100644 |
| --- a/net/ipv4/udp_offload.c |
| +++ b/net/ipv4/udp_offload.c |
| @@ -149,8 +149,8 @@ struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb, |
| netdev_features_t features, |
| bool is_ipv6) |
| { |
| + const struct net_offload __rcu **offloads; |
| __be16 protocol = skb->protocol; |
| - const struct net_offload **offloads; |
| const struct net_offload *ops; |
| struct sk_buff *segs = ERR_PTR(-EINVAL); |
| struct sk_buff *(*gso_inner_segment)(struct sk_buff *skb, |
| -- |
| 2.43.0 |
| |