Hi,

On Thu, 2018-09-20 at 09:58 +0100, Mike Manning wrote:
> diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
> index 108f5f88ec98..fc60f297d95b 100644
> --- a/net/ipv6/ip6_input.c
> +++ b/net/ipv6/ip6_input.c
> @@ -325,9 +325,12 @@ static int ip6_input_finish(struct net *net, struct sock 
> *sk, struct sk_buff *sk
>  {
>       const struct inet6_protocol *ipprot;
>       struct inet6_dev *idev;
> +     struct net_device *dev;
>       unsigned int nhoff;
> +     int sdif = inet6_sdif(skb);
>       int nexthdr;
>       bool raw;
> +     bool deliver;
>       bool have_final = false;

Please, try instead to sort the variable in reverse x-mas tree order.
>  
>       /*
> @@ -371,9 +374,27 @@ static int ip6_input_finish(struct net *net, struct sock 
> *sk, struct sk_buff *sk
>                       skb_postpull_rcsum(skb, skb_network_header(skb),
>                                          skb_network_header_len(skb));
>                       hdr = ipv6_hdr(skb);
> -                     if (ipv6_addr_is_multicast(&hdr->daddr) &&
> -                         !ipv6_chk_mcast_addr(skb->dev, &hdr->daddr,
> -                         &hdr->saddr) &&
> +
> +                     /* skb->dev passed may be master dev for vrfs. */
> +                     if (sdif) {
> +                             rcu_read_lock();

AFAICS, the rcu lock is already acquired at the beginning of
ip6_input_finish(), not need to acquire it here again.
+                               dev = dev_get_by_index_rcu(dev_net(skb->dev),
> +                                                        sdif);
> +                             if (!dev) {
> +                                     rcu_read_unlock();
> +                                     kfree_skb(skb);
> +                                     return -ENODEV;
> +                             }
> +                     } else {
> +                             dev = skb->dev;

The above fragment of code is a recurring pattern in this series,
perhaps adding an helper for it would reduce code duplication ?

Cheers,

Paolo

Reply via email to