On 10/15/24 16:07, Menglong Dong wrote:
> diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
> index 90ff815f212b..b3f7a1562140 100644
> --- a/include/net/ip_fib.h
> +++ b/include/net/ip_fib.h
> @@ -452,13 +452,16 @@ int __fib_validate_source(struct sk_buff *skb, __be32 
> src, __be32 dst,
>                         dscp_t dscp, int oif, struct net_device *dev,
>                         struct in_device *idev, u32 *itag);
>  
> -static inline int
> +static inline enum skb_drop_reason
>  fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
>                   dscp_t dscp, int oif, struct net_device *dev,
>                   struct in_device *idev, u32 *itag)
>  {
> -     return __fib_validate_source(skb, src, dst, dscp, oif, dev, idev,
> -                                  itag);
> +     int err = __fib_validate_source(skb, src, dst, dscp, oif, dev, idev,
> +                                     itag);
> +     if (err < 0)
> +             return -err;
> +     return SKB_NOT_DROPPED_YET;
>  }

It looks like the code churn in patch 1 is not needed??? You could just
define here a fib_validate_source_reason() helper doing the above, and
replace fib_validate_source with the the new helper as needed. Would
that work?

> @@ -1785,9 +1785,10 @@ static int __mkroute_input(struct sk_buff *skb, const 
> struct fib_result *res,
>               return -EINVAL;
>       }
>  
> -     err = fib_validate_source(skb, saddr, daddr, dscp, FIB_RES_OIF(*res),
> -                               in_dev->dev, in_dev, &itag);
> +     err = __fib_validate_source(skb, saddr, daddr, dscp, FIB_RES_OIF(*res),
> +                                 in_dev->dev, in_dev, &itag);
>       if (err < 0) {
> +             err = -EINVAL;
>               ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr,
>                                        saddr);

I'm sorry for not noticing this issue before, but must preserve (at
least) the -EXDEV error code from the unpatched version or RP Filter MIB
accounting in ip_rcv_finish_core() will be fooled.

Thanks,

Paolo


Reply via email to