rose_dev: fix memcpy-bug in rose_set_mac_address
authordanborkmann@iogearbox.net <danborkmann@iogearbox.net>
Tue, 27 Mar 2012 22:47:43 +0000 (22:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 Apr 2012 20:47:12 +0000 (16:47 -0400)
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>
net/rose/rose_dev.c

index 178ff4f73c85102518025fa3d4e20f647a389743..2679507ad33374dc01805dbfbb5421fee3916abe 100644 (file)
@@ -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;