lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 26 May 2017 22:37:38 +0800
From:   Firo Yang <firogm@...il.com>
To:     davem@...emloft.net, alan@...ux.intel.com
Cc:     t.sailer@...mni.ethz.ch, wharms@....de, andreyknvl@...gle.com,
        linux-hams@...r.kernel.org, gregkh@...uxfoundation.org,
        netdev@...r.kernel.org, thomas@...erried.de,
        javier@....samsung.com, dhowells@...hat.com, geliangtang@...il.com,
        linux-kernel@...r.kernel.org, Firo Yang <firogm@...il.com>
Subject: [PATCH v3] hdlcdrv: Fix divide by zero in hdlcdrv_ioctl

syszkaller fuzzer triggered a divide by zero, when set calibration
through ioctl().

To fix it, test 'bitrate' if it is negative or 0, just return -EINVAL.

Reported-by: Andrey Konovalov <andreyknvl@...gle.com>
Signed-off-by: Firo Yang <firogm@...il.com>
---
v2->v3:
	Just fix divide error and remove netif_running() test.
	Refine the testing code as David Miller suggested.

v1->v2:
        Change Reported-by to Andrey Konovalov.
        Send it to original report thread.

v0->v1:
        Reviewed by walter harms <wharms@....de>.
        Return ENODEV instead of EPERM if !netif_running(dev)
        Check if s->par.bitrate > 0.
 drivers/net/hamradio/hdlcdrv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
index 8c3633c..97e3bc6 100644
--- a/drivers/net/hamradio/hdlcdrv.c
+++ b/drivers/net/hamradio/hdlcdrv.c
@@ -576,6 +576,8 @@ static int hdlcdrv_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 	case HDLCDRVCTL_CALIBRATE:
 		if(!capable(CAP_SYS_RAWIO))
 			return -EPERM;
+		if (s->par.bitrate <= 0)
+			return -EINVAL;
 		if (bi.data.calibrate > INT_MAX / s->par.bitrate)
 			return -EINVAL;
 		s->hdlctx.calibrate = bi.data.calibrate * s->par.bitrate / 16;
-- 
2.9.4

Powered by blists - more mailing lists