aboutsummaryrefslogtreecommitdiffstats
path: root/net/rose
diff options
context:
space:
mode:
authordanborkmann@iogearbox.net <danborkmann@iogearbox.net>2012-03-27 18:47:43 -0400
committerLuis Henriques <luis.henriques@canonical.com>2012-05-01 05:59:54 -0400
commit5280a0dc3d45a23c908e19e417e73544ae321505 (patch)
treecb43f249027521f37df018f803c31c12b34c0032 /net/rose
parentc2a3b9b8d7f7bb83ff4cdb0babdb990890085f3e (diff)
rose_dev: fix memcpy-bug in rose_set_mac_address
BugLink: http://bugs.launchpad.net/bugs/983326 [ 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> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
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 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)
96 struct sockaddr *sa = addr; 96 struct sockaddr *sa = addr;
97 int err; 97 int err;
98 98
99 if (!memcpy(dev->dev_addr, sa->sa_data, dev->addr_len)) 99 if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len))
100 return 0; 100 return 0;
101 101
102 if (dev->flags & IFF_UP) { 102 if (dev->flags & IFF_UP) {
103 err = rose_add_loopback_node((rose_address *)dev->dev_addr); 103 err = rose_add_loopback_node((rose_address *)sa->sa_data);
104 if (err) 104 if (err)
105 return err; 105 return err;
106 106