aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSteve Glendinning <steve.glendinning@shawell.net>2012-11-30 00:55:48 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-30 12:27:20 -0500
commiteed9a72914a2b2737a0d91b80579f878999574ef (patch)
tree134cb904d6fe8a161ba136f1f5d3d81137a63855 /drivers
parente3c678e6d7484dc03fc36d3bfebb8ebb94574110 (diff)
smsc95xx: fix suspend buffer overflow
This patch fixes a buffer overflow introduced by bbd9f9e, where the filter_mask array is accessed beyond its bounds. Updated to also add a check for kzalloc failure, as reported by Bjorn Mork and Joe Perches. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net> Cc: Bjorn Mork <bjorn@mork.no> Cc: Joe Perches <joe@perches.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/usb/smsc95xx.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 79d495d15546..c397b3a04f10 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -1281,7 +1281,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1281 } 1281 }
1282 1282
1283 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { 1283 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1284 u32 *filter_mask = kzalloc(32, GFP_KERNEL); 1284 u32 *filter_mask = kzalloc(sizeof(u32) * 32, GFP_KERNEL);
1285 u32 command[2]; 1285 u32 command[2];
1286 u32 offset[2]; 1286 u32 offset[2];
1287 u32 crc[4]; 1287 u32 crc[4];
@@ -1290,6 +1290,11 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1290 LAN9500A_WUFF_NUM : LAN9500_WUFF_NUM; 1290 LAN9500A_WUFF_NUM : LAN9500_WUFF_NUM;
1291 int i, filter = 0; 1291 int i, filter = 0;
1292 1292
1293 if (!filter_mask) {
1294 netdev_warn(dev->net, "Unable to allocate filter_mask\n");
1295 return -ENOMEM;
1296 }
1297
1293 memset(command, 0, sizeof(command)); 1298 memset(command, 0, sizeof(command));
1294 memset(offset, 0, sizeof(offset)); 1299 memset(offset, 0, sizeof(offset));
1295 memset(crc, 0, sizeof(crc)); 1300 memset(crc, 0, sizeof(crc));