> +     if (ethtool_translate_compat()) {
> +             struct compat_ethtool_rxnfc crxnfc = {};
> +
> +             if (copy_from_user(&crxnfc, useraddr,
> +                                min(size, sizeof(crxnfc))))
> +                     return -EFAULT;
> +
> +             *rxnfc = (struct ethtool_rxnfc) {
> +                     .cmd            = crxnfc.cmd,
> +                     .flow_type      = crxnfc.flow_type,
> +                     .data           = crxnfc.data,
> +                     .fs             = {
> +                             .flow_type      = crxnfc.fs.flow_type,
> +                             .h_u            = crxnfc.fs.h_u,
> +                             .h_ext          = crxnfc.fs.h_ext,
> +                             .m_u            = crxnfc.fs.m_u,
> +                             .m_ext          = crxnfc.fs.m_ext,
> +                             .ring_cookie    = crxnfc.fs.ring_cookie,
> +                             .location       = crxnfc.fs.location,
> +                     },
> +                     .rule_cnt       = crxnfc.rule_cnt,
> +             };

I'd split the compat version into a self-contained noinline helper.
Same for ethtool_rxnfc_copy_to_user.

Otherwise this looks good:

Reviewed-by: Christoph Hellwig <h...@lst.de>

Reply via email to