aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanborkmann@iogearbox.net <danborkmann@iogearbox.net>2012-03-27 22:47:43 +0000
committerDavid S. Miller <davem@davemloft.net>2012-04-01 16:47:12 -0400
commit81213b5e8ae68e204aa7a3f83c4f9100405dbff9 (patch)
treecf12b20ee5162471bf0a319beb3db8657f190c28
parent464b57da56910c8737ede75ad820b9a7afc46b3e (diff)
rose_dev: fix memcpy-bug in rose_set_mac_address
If both addresses equal, nothing needs to be done. If the device is down, then we simply copy the new address to dev->dev_addr. If the device is up, then we add another loopback device with the new address, and if that does not fail, we remove the loopback device with the old address. And only then, we update the dev->dev_addr. Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/rose/rose_dev.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c
index 178ff4f73c8..2679507ad33 100644
--- a/net/rose/rose_dev.c
+++ b/net/rose/rose_dev.c
@@ -96,11 +96,11 @@ static int rose_set_mac_address(struct net_device *dev, void *addr)
struct sockaddr *sa = addr;
int err;
- if (!memcpy(dev->dev_addr, sa->sa_data, dev->addr_len))
+ if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len))
return 0;
if (dev->flags & IFF_UP) {
- err = rose_add_loopback_node((rose_address *)dev->dev_addr);
+ err = rose_add_loopback_node((rose_address *)sa->sa_data);
if (err)
return err;