rose_dev: fix memcpy-bug in rose_set_mac_address

Submitted by danborkmann@iogearbox.net on March 27, 2012, 1:27 p.m.

Details

Message ID 4F71C05C.4040300@iogearbox.net
State Rejected
Delegated to: David Miller
Headers show

Commit Message

danborkmann@iogearbox.net March 27, 2012, 1:27 p.m.
This patch fixes a small bug in rose_set_mac_address. If the current and new
MAC addresses match, then nothing needs to be done. However memcpy was used
instead of memcmp for comparison.

The patch is against the latest net-tree.

Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
Cc: Ralf Baechle <ralf@linux-mips.org>
---
 net/rose/rose_dev.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller March 28, 2012, 2:49 a.m.
From: Daniel Borkmann <danborkmann@iogearbox.net>
Date: Tue, 27 Mar 2012 15:27:56 +0200

> This patch fixes a small bug in rose_set_mac_address. If the current and new
> MAC addresses match, then nothing needs to be done. However memcpy was used
> instead of memcmp for comparison.
> 
> The patch is against the latest net-tree.
> 
> Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>

You're breaking this code, not fixing it.

If you don't keep the memcpy, then the calls right below which setup
the loopback node will use the previous device address not the new
one being configured.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch hide | download patch | download mbox

diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c
index 178ff4f..3c5ce5e 100644
--- a/net/rose/rose_dev.c
+++ b/net/rose/rose_dev.c
@@ -96,7 +96,7 @@  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) {