On Thu, 2016-01-28 at 09:38 -0500, Jarod Wilson wrote:

> Something like this then:
> 
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 82334c6..2ca3eab 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -7262,15 +7262,16 @@ void netdev_run_todo(void)
>  void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64,
>                            const struct net_device_stats *netdev_stats)
>  {
> +     memset(stats64, 0, sizeof(*stats64));
>  #if BITS_PER_LONG == 64
> -     BUILD_BUG_ON(sizeof(*stats64) != sizeof(*netdev_stats));
> +     BUILD_BUG_ON(sizeof(*stats64) < sizeof(*netdev_stats));
>       memcpy(stats64, netdev_stats, sizeof(*stats64));
>  #else
>       size_t i, n = sizeof(*stats64) / sizeof(u64);
>       const unsigned long *src = (const unsigned long *)netdev_stats;
>       u64 *dst = (u64 *)stats64;
>  
> -     BUILD_BUG_ON(sizeof(*netdev_stats) / sizeof(unsigned long) !=
> +     BUILD_BUG_ON(sizeof(*netdev_stats) / sizeof(unsigned long) >
>                    sizeof(*stats64) / sizeof(u64));
>       for (i = 0; i < n; i++)
>               dst[i] = src[i];
> 
> Compiles locally w/o that net_device_stats addition, seems sane to me.
> 

Sure, you also can set stats64->rx_unhandled to 0 here, just to be 100%
safe.

Thanks.


Reply via email to