| From f2994df2574792ae23ab7607d776e8b3c625dde3 Mon Sep 17 00:00:00 2001 |
| From: Alexey Khoroshilov <khoroshilov@ispras.ru> |
| Date: Wed, 8 Aug 2012 00:33:25 +0000 |
| Subject: [PATCH] net/core: Fix potential memory leak in dev_set_alias() |
| |
| commit 7364e445f62825758fa61195d237a5b8ecdd06ec upstream. |
| |
| 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 <khoroshilov@ispras.ru> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| 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 253b409fe3ab..3dbbba137c93 100644 |
| --- a/net/core/dev.c |
| +++ b/net/core/dev.c |
| @@ -1034,6 +1034,8 @@ rollback: |
| */ |
| int dev_set_alias(struct net_device *dev, const char *alias, size_t len) |
| { |
| + char *new_ifalias; |
| + |
| ASSERT_RTNL(); |
| |
| if (len >= IFALIASZ) |
| @@ -1047,9 +1049,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; |
| -- |
| 1.8.5.2 |
| |