Commit 81213b5e authored by danborkmann@iogearbox.net's avatar danborkmann@iogearbox.net Committed by David S. Miller

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: default avatarDaniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 464b57da
...@@ -96,11 +96,11 @@ static int rose_set_mac_address(struct net_device *dev, void *addr) ...@@ -96,11 +96,11 @@ static int rose_set_mac_address(struct net_device *dev, void *addr)
struct sockaddr *sa = addr; struct sockaddr *sa = addr;
int err; 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; return 0;
if (dev->flags & IFF_UP) { 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) if (err)
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment