From patchwork Wed Mar 28 08:47:43 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: danborkmann@iogearbox.net X-Patchwork-Id: 149176 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id F1341B6EEF for ; Wed, 28 Mar 2012 19:47:55 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756692Ab2C1Irx (ORCPT ); Wed, 28 Mar 2012 04:47:53 -0400 Received: from www62.your-server.de ([213.133.104.62]:54241 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751392Ab2C1Irw (ORCPT ); Wed, 28 Mar 2012 04:47:52 -0400 Received: from [78.46.5.203] (helo=sslproxy01.your-server.de) by www62.your-server.de with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.74) (envelope-from ) id 1SCoXn-0004on-B1; Wed, 28 Mar 2012 10:47:51 +0200 Received: from [195.176.113.14] by sslproxy01.your-server.de with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from ) id 1SCoXj-0001ex-Oa; Wed, 28 Mar 2012 10:47:47 +0200 Message-ID: <4F72D02F.6090907@iogearbox.net> Date: Wed, 28 Mar 2012 10:47:43 +0200 From: Daniel Borkmann User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20111110 Icedove/3.0.11 MIME-Version: 1.0 To: "David S. Miller" CC: Ralf Baechle , "netdev@vger.kernel.org" Subject: Re: [PATCH] rose_dev: fix memcpy-bug in rose_set_mac_address X-Authenticated-Sender: danborkmann@iogearbox.net X-Virus-Scanned: Clear (ClamAV 0.97.3/14712/Wed Mar 28 04:41:49 2012) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org David Miller wrote: >> 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 > > 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. David, thanks for your feedback! So here's a small rework of the patch: 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 --- net/rose/rose_dev.c | 4 ++-- 1 files changed, 2 insertions(+), 2 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 diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c index 178ff4f..2679507 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;