netdev
[Top] [All Lists]

[PATCH 2.6] dev.c: clear SIOCGIFHWADDR buffer if !dev->addr_len

To: netdev@xxxxxxxxxxx
Subject: [PATCH 2.6] dev.c: clear SIOCGIFHWADDR buffer if !dev->addr_len
From: Matt Domsch <Matt_Domsch@xxxxxxxx>
Date: Fri, 29 Oct 2004 16:51:34 -0500
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.1i
If dev->dev_addr is zero, then the memcpy() never takes place, and the
same data that was in the caller's buffer is still in the caller's
buffer on successful return.  The caller can't know that the data in
its buffer isn't the right answer.  So, if dev->dev_dev_addr == 0,
clear the buffer before returning success.

Thanks,
Matt

-- 
Matt Domsch
Sr. Software Engineer, Lead Engineer
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com

===== linux-2.6/net/core/dev.c 1.169 vs edited =====
--- 1.169/net/core/dev.c        2004-10-26 11:09:33 -05:00
+++ edited/linux-2.6/net/core/dev.c     2004-10-29 16:39:33 -05:00
@@ -2375,8 +2375,11 @@
                        return dev_set_mtu(dev, ifr->ifr_mtu);
 
                case SIOCGIFHWADDR:
-                       memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr,
-                              min(sizeof ifr->ifr_hwaddr.sa_data, (size_t) 
dev->addr_len));
+                       if (!dev->addr_len)
+                               memset(ifr->ifr_hwaddr.sa_data, 0, sizeof 
ifr->ifr_hwaddr.sa_data);
+                       else
+                               memcpy(ifr->ifr_hwaddr.sa_data, dev->dev_addr,
+                                      min(sizeof ifr->ifr_hwaddr.sa_data, 
(size_t) dev->addr_len));
                        ifr->ifr_hwaddr.sa_family = dev->type;
                        return 0;
 

<Prev in Thread] Current Thread [Next in Thread>