summaryrefslogtreecommitdiffstats
path: root/net/rose
diff options
context:
space:
mode:
authordanborkmann@iogearbox.net <danborkmann@iogearbox.net>2012-03-27 22:47:43 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-13 08:33:45 -0700
commit61234da7f859094fb5f9c676385897d4b60319ca (patch)
tree48d5a708fbcc946fa676a4e5ca1825fe9b7ec4bf /net/rose
parentdf657e3c1b59def8eb018c95f0951c1898f4cf80 (diff)
downloadlinux-stable-61234da7f859094fb5f9c676385897d4b60319ca.tar.gz
linux-stable-61234da7f859094fb5f9c676385897d4b60319ca.tar.bz2
linux-stable-61234da7f859094fb5f9c676385897d4b60319ca.zip
rose_dev: fix memcpy-bug in rose_set_mac_address
[ Upstream commit 81213b5e8ae68e204aa7a3f83c4f9100405dbff9 ] 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/rose')
-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 178ff4f73c85..2679507ad333 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;