Subject: Re: [PATCH net-next 1/3] ethtool: Ensure new ring parameters are within bounds during SRINGPARAM

From: Jakub Kicinski <[email-masked]>
Date: Mon, 8 Jan 2018 23:35:47 -0800

On Tue, 9 Jan 2018 09:30:05 +0200
Tariq Toukan <[email-masked]> wrote:
> >> diff --git a/net/core/ethtool.c b/net/core/ethtool.c
> >> index 50a79203043b..9ea7cd52fde0 100644
> >> --- a/net/core/ethtool.c
> >> +++ b/net/core/ethtool.c
> >> @@ -1704,14 +1704,23 @@ static int ethtool_get_ringparam(struct
> >> net_device *dev, void __user *useraddr) 
> >>   static int ethtool_set_ringparam(struct net_device *dev, void
> >> __user *useraddr) {
> >> -	struct ethtool_ringparam ringparam;
> >> +	struct ethtool_ringparam ringparam, max = { .cmd =
> >> ETHTOOL_GRINGPARAM }; 
> >> -	if (!dev->ethtool_ops->set_ringparam)
> >> +	if (!dev->ethtool_ops->set_ringparam
> >> || !dev->ethtool_ops->get_ringparam) return -EOPNOTSUPP;
> >>   
> >>   	if (copy_from_user(&ringparam, useraddr,
> >> sizeof(ringparam))) return -EFAULT;
> >>   
> >> +	dev->ethtool_ops->get_ringparam(dev, &max);  
> > 
> > Perhaps check the return value here?  It's pretty unlikely but
> > get_ringparam may fail.
> >   
> 
> get_ringparam NDO returns void.

Ah, you're right, I looked at the return of ethtool_get_ringparam().