[PATCH] bna: integer overflow bug in debugfs

Subsystems: brocade bna 10 gigabit ethernet driver, networking drivers, the rest

STALE3420d

3 messages, 3 authors, 2017-03-22 · open the first message on its own page

[PATCH] bna: integer overflow bug in debugfs

From: Dan Carpenter <hidden>
Date: 2017-03-17 20:52:35

We could allocate less memory than intended because we do:

	bnad->regdata = kzalloc(len << 2, GFP_KERNEL);

The shift can overflow leading to a crash.  This is debugfs code so the
impact is very small.

Fixes: 7afc5dbde091 ("bna: Add debugfs interface.")
Signed-off-by: Dan Carpenter <redacted>
diff --git a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
index 05c1c1dd7751..cebfe3bd086e 100644
--- a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
+++ b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
@@ -325,7 +325,7 @@ bnad_debugfs_write_regrd(struct file *file, const char __user *buf,
 		return PTR_ERR(kern_buf);
 
 	rc = sscanf(kern_buf, "%x:%x", &addr, &len);
-	if (rc < 2) {
+	if (rc < 2 || len > UINT_MAX >> 2) {
 		netdev_warn(bnad->netdev, "failed to read user buffer\n");
 		kfree(kern_buf);
 		return -EINVAL;

RE: [PATCH] bna: integer overflow bug in debugfs

From: Mody, Rasesh <hidden>
Date: 2017-03-21 01:16:09

quoted hunk
From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
Sent: Friday, March 17, 2017 1:53 PM

We could allocate less memory than intended because we do:

	bnad->regdata = kzalloc(len << 2, GFP_KERNEL);

The shift can overflow leading to a crash.  This is debugfs code so the impact
is very small.

Fixes: 7afc5dbde091 ("bna: Add debugfs interface.")
Signed-off-by: Dan Carpenter <redacted>
diff --git a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
index 05c1c1dd7751..cebfe3bd086e 100644
--- a/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
+++ b/drivers/net/ethernet/brocade/bna/bnad_debugfs.c
@@ -325,7 +325,7 @@ bnad_debugfs_write_regrd(struct file *file, const
char __user *buf,
 		return PTR_ERR(kern_buf);

 	rc = sscanf(kern_buf, "%x:%x", &addr, &len);
-	if (rc < 2) {
+	if (rc < 2 || len > UINT_MAX >> 2) {
 		netdev_warn(bnad->netdev, "failed to read user buffer\n");
 		kfree(kern_buf);
 		return -EINVAL;
You are correct, thanks Dan for adding the check.

Acked-by: Rasesh Mody <redacted>

Re: [PATCH] bna: integer overflow bug in debugfs

From: David Miller <davem@davemloft.net>
Date: 2017-03-22 00:44:32

From: Dan Carpenter <redacted>
Date: Fri, 17 Mar 2017 23:52:35 +0300
We could allocate less memory than intended because we do:

	bnad->regdata = kzalloc(len << 2, GFP_KERNEL);

The shift can overflow leading to a crash.  This is debugfs code so the
impact is very small.

Fixes: 7afc5dbde091 ("bna: Add debugfs interface.")
Signed-off-by: Dan Carpenter <redacted>
Applied.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help