From patchwork Wed Aug 8 10:33:25 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Khoroshilov X-Patchwork-Id: 175896 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 9298D2C0097 for ; Wed, 8 Aug 2012 20:55:52 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754622Ab2HHKzq (ORCPT ); Wed, 8 Aug 2012 06:55:46 -0400 Received: from mail.ispras.ru ([83.149.199.43]:42817 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751876Ab2HHKzq (ORCPT ); Wed, 8 Aug 2012 06:55:46 -0400 X-Greylist: delayed 1282 seconds by postgrey-1.27 at vger.kernel.org; Wed, 08 Aug 2012 06:55:46 EDT Received: from parliament.intra.ispras.ru (unknown [83.149.199.44]) by mail.ispras.ru (Postfix) with ESMTP id 71D0324F7BB; Wed, 8 Aug 2012 14:34:23 +0400 (MSK) From: Alexey Khoroshilov To: "David S. Miller" Cc: Alexey Khoroshilov , Eric Dumazet , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, ldv-project@ispras.ru Subject: [PATCH] net/core: Fix potential memory leak in dev_set_alias() Date: Wed, 8 Aug 2012 14:33:25 +0400 Message-Id: <1344422005-21993-1-git-send-email-khoroshilov@ispras.ru> X-Mailer: git-send-email 1.7.9.5 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Do not leak memory by updating pointer with potentially NULL realloc return value. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov --- net/core/dev.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 0cb3fe8..3bcc5da 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1055,6 +1055,8 @@ rollback: */ int dev_set_alias(struct net_device *dev, const char *alias, size_t len) { + char *new_ifalias; + ASSERT_RTNL(); if (len >= IFALIASZ) @@ -1068,9 +1070,10 @@ int dev_set_alias(struct net_device *dev, const char *alias, size_t len) return 0; } - dev->ifalias = krealloc(dev->ifalias, len + 1, GFP_KERNEL); - if (!dev->ifalias) + new_ifalias = krealloc(dev->ifalias, len + 1, GFP_KERNEL); + if (!new_ifalias) return -ENOMEM; + dev->ifalias = new_ifalias; strlcpy(dev->ifalias, alias, len+1); return len;