From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sc8-sf-mx2-b.sourceforge.net ([10.3.1.92] helo=mail.sourceforge.net) by sc8-sf-list1-new.sourceforge.net with esmtp (Exim 4.43) id 1HWa80-0005K6-La for user-mode-linux-devel@lists.sourceforge.net; Wed, 28 Mar 2007 08:32:00 -0700 Received: from [198.99.130.12] (helo=saraswathi.solana.com) by mail.sourceforge.net with esmtps (TLSv1:AES256-SHA:256) (Exim 4.44) id 1HWa7y-0001F5-48 for user-mode-linux-devel@lists.sourceforge.net; Wed, 28 Mar 2007 08:32:00 -0700 Date: Wed, 28 Mar 2007 11:28:48 -0400 From: Jeff Dike Message-ID: <20070328152848.GA6340@c2.user-mode-linux.org> Mime-Version: 1.0 Content-Disposition: inline Subject: [uml-devel] [PATCH 3/4] UML - Eliminate temporary buffer in eth_configure List-Id: The user-mode Linux development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: user-mode-linux-devel-bounces@lists.sourceforge.net Errors-To: user-mode-linux-devel-bounces@lists.sourceforge.net To: Andrew Morton Cc: Blaisorblade , LKML , uml-devel From: Paolo 'Blaisorblade' Giarrusso Avoid using the temporary buffer introduced by previous patch to hold the device name. Btw, avoid leaking device on an error path. Other error paths may need cleanup. Signed-off-by: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Jeff Dike -- arch/um/drivers/net_kern.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) Index: linux-2.6.21-mm/arch/um/drivers/net_kern.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/drivers/net_kern.c 2007-03-28 09:06:37.000000000 -0400 +++ linux-2.6.21-mm/arch/um/drivers/net_kern.c 2007-03-28 10:14:52.000000000 -0400 @@ -348,17 +348,24 @@ static void eth_configure(int n, void *i struct net_device *dev; struct uml_net_private *lp; int save, err, size; - char name[sizeof(dev->name)]; size = transport->private_size + sizeof(struct uml_net_private) + sizeof(((struct uml_net_private *) 0)->user); device = kzalloc(sizeof(*device), GFP_KERNEL); if (device == NULL) { - printk(KERN_ERR "eth_configure failed to allocate uml_net\n"); + printk(KERN_ERR "eth_configure failed to allocate struct " + "uml_net\n"); return; } + dev = alloc_etherdev(size); + if (dev == NULL) { + printk(KERN_ERR "eth_configure: failed to allocate struct " + "net_device for eth%d\n", n); + goto out_free_device; + } + INIT_LIST_HEAD(&device->list); device->index = n; @@ -366,9 +373,9 @@ static void eth_configure(int n, void *i * netdevice, that is OK, register_netdev{,ice}() will notice this * and fail. */ - snprintf(name, sizeof(name), "eth%d", n); + snprintf(dev->name, sizeof(dev->name), "eth%d", n); - setup_etheraddr(mac, device->mac, name); + setup_etheraddr(mac, device->mac, dev->name); printk(KERN_INFO "Netdevice %d ", n); printk("(%02x:%02x:%02x:%02x:%02x:%02x) ", @@ -376,11 +383,6 @@ static void eth_configure(int n, void *i device->mac[2], device->mac[3], device->mac[4], device->mac[5]); printk(": "); - dev = alloc_etherdev(size); - if (dev == NULL) { - printk(KERN_ERR "eth_configure: failed to allocate device\n"); - goto out_free_device; - } lp = dev->priv; /* This points to the transport private data. It's still clear, but we @@ -399,7 +401,6 @@ static void eth_configure(int n, void *i goto out_free_netdev; SET_NETDEV_DEV(dev,&device->pdev.dev); - strcpy(dev->name, name); device->dev = dev; /* @@ -466,13 +467,13 @@ static void eth_configure(int n, void *i return; out_undo_user_init: - if (transport->user->init != NULL) + if (transport->user->remove != NULL) (*transport->user->remove)(&lp->user); out_unregister: platform_device_unregister(&device->pdev); out_free_netdev: free_netdev(dev); -out_free_device: ; +out_free_device: kfree(device); } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932309AbXC1Pcb (ORCPT ); Wed, 28 Mar 2007 11:32:31 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932286AbXC1PcT (ORCPT ); Wed, 28 Mar 2007 11:32:19 -0400 Received: from saraswathi.solana.com ([198.99.130.12]:49250 "EHLO saraswathi.solana.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752320AbXC1PcQ (ORCPT ); Wed, 28 Mar 2007 11:32:16 -0400 Date: Wed, 28 Mar 2007 11:28:48 -0400 From: Jeff Dike To: Andrew Morton Cc: Blaisorblade , LKML , uml-devel Subject: [PATCH 3/4] UML - Eliminate temporary buffer in eth_configure Message-ID: <20070328152848.GA6340@c2.user-mode-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.2i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org From: Paolo 'Blaisorblade' Giarrusso Avoid using the temporary buffer introduced by previous patch to hold the device name. Btw, avoid leaking device on an error path. Other error paths may need cleanup. Signed-off-by: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Jeff Dike -- arch/um/drivers/net_kern.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) Index: linux-2.6.21-mm/arch/um/drivers/net_kern.c =================================================================== --- linux-2.6.21-mm.orig/arch/um/drivers/net_kern.c 2007-03-28 09:06:37.000000000 -0400 +++ linux-2.6.21-mm/arch/um/drivers/net_kern.c 2007-03-28 10:14:52.000000000 -0400 @@ -348,17 +348,24 @@ static void eth_configure(int n, void *i struct net_device *dev; struct uml_net_private *lp; int save, err, size; - char name[sizeof(dev->name)]; size = transport->private_size + sizeof(struct uml_net_private) + sizeof(((struct uml_net_private *) 0)->user); device = kzalloc(sizeof(*device), GFP_KERNEL); if (device == NULL) { - printk(KERN_ERR "eth_configure failed to allocate uml_net\n"); + printk(KERN_ERR "eth_configure failed to allocate struct " + "uml_net\n"); return; } + dev = alloc_etherdev(size); + if (dev == NULL) { + printk(KERN_ERR "eth_configure: failed to allocate struct " + "net_device for eth%d\n", n); + goto out_free_device; + } + INIT_LIST_HEAD(&device->list); device->index = n; @@ -366,9 +373,9 @@ static void eth_configure(int n, void *i * netdevice, that is OK, register_netdev{,ice}() will notice this * and fail. */ - snprintf(name, sizeof(name), "eth%d", n); + snprintf(dev->name, sizeof(dev->name), "eth%d", n); - setup_etheraddr(mac, device->mac, name); + setup_etheraddr(mac, device->mac, dev->name); printk(KERN_INFO "Netdevice %d ", n); printk("(%02x:%02x:%02x:%02x:%02x:%02x) ", @@ -376,11 +383,6 @@ static void eth_configure(int n, void *i device->mac[2], device->mac[3], device->mac[4], device->mac[5]); printk(": "); - dev = alloc_etherdev(size); - if (dev == NULL) { - printk(KERN_ERR "eth_configure: failed to allocate device\n"); - goto out_free_device; - } lp = dev->priv; /* This points to the transport private data. It's still clear, but we @@ -399,7 +401,6 @@ static void eth_configure(int n, void *i goto out_free_netdev; SET_NETDEV_DEV(dev,&device->pdev.dev); - strcpy(dev->name, name); device->dev = dev; /* @@ -466,13 +467,13 @@ static void eth_configure(int n, void *i return; out_undo_user_init: - if (transport->user->init != NULL) + if (transport->user->remove != NULL) (*transport->user->remove)(&lp->user); out_unregister: platform_device_unregister(&device->pdev); out_free_netdev: free_netdev(dev); -out_free_device: ; +out_free_device: kfree(device); }