Am 17.05.2017 14:35, schrieb Firo Yang: > The divisor s->par.bitrate will always be 0 until initialized by > ndo_open() and hdlcdrv_open(). > > In order to fix this divide zero error, check whether the netdevice > was opened by ndo_open() before performing divide. > > Reported-by: Dmitry Vyukov <dvyu...@google.com> > Signed-off-by: Firo Yang <fir...@gmail.com> > --- > drivers/net/hamradio/hdlcdrv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c > index 8c3633c..3c783fd 100644 > --- a/drivers/net/hamradio/hdlcdrv.c > +++ b/drivers/net/hamradio/hdlcdrv.c > @@ -574,7 +574,7 @@ static int hdlcdrv_ioctl(struct net_device *dev, struct > ifreq *ifr, int cmd) > break; > > case HDLCDRVCTL_CALIBRATE: > - if(!capable(CAP_SYS_RAWIO)) > + if (!capable(CAP_SYS_RAWIO) || !netif_running(dev)) > return -EPERM; > if (bi.data.calibrate > INT_MAX / s->par.bitrate) > return -EINVAL;
I would still check for s->par.bitrate > 0 later changes may affect the setting of it and it is much more obvious. Also perhaps !netif_running(dev) should better return ENODEV. just my 2 cents, re, wh