Re: [PATCH nf] netfilter: avoid erronous array bounds warning

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/24/18 6:10 AM, Florian Westphal wrote:
> Unfortunately some versions of gcc emit following warning:
>   $ make net/xfrm/xfrm_output.o
>   linux/compiler.h:252:20: warning: array subscript is above array bounds [-Warray-bounds]
>   hook_head = rcu_dereference(net->nf.hooks_arp[hook]);
>                             ^~~~~~~~~~~~~~~~~~~~~
> xfrm_output_resume passes skb_dst(skb)->ops->family as its 'pf' arg so compiler
> can't know that we'll never access hooks_arp[].
> (NFPROTO_IPV4 or NFPROTO_IPV6 are only possible cases).
> 
> Avoid this by adding an explicit WARN_ON_ONCE() check.
> 
> This patch has no effect if the family is a compile-time constant as gcc
> will remove the switch() construct entirely.
> 
> Reported-by: David Ahern <dsahern@xxxxxxxxx>
> Signed-off-by: Florian Westphal <fw@xxxxxxxxx>
> ---
>  include/linux/netfilter.h | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
> index 07efffd0c759..bbe99d2b28b4 100644
> --- a/include/linux/netfilter.h
> +++ b/include/linux/netfilter.h
> @@ -215,6 +215,8 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct net *net,
>  		break;
>  	case NFPROTO_ARP:
>  #ifdef CONFIG_NETFILTER_FAMILY_ARP
> +		if (WARN_ON_ONCE(hook >= ARRAY_SIZE(net->nf.hooks_arp)))
> +			break;
>  		hook_head = rcu_dereference(net->nf.hooks_arp[hook]);
>  #endif
>  		break;
> 

seems like a reasonable fix. Thanks, Florian.

Reviewed-by: David Ahern <dsahern@xxxxxxxxx>



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux