net/core: Fix potential memory leak in dev_set_alias()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Wed, 8 Aug 2012 00:33:25 +0000 (00:33 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 8 Aug 2012 23:06:23 +0000 (16:06 -0700)
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>
net/core/dev.c

index f91abf800161d3f74d35a1ecfe3ef2225bff405c..a39354ee14322e5b300646f3866329d22fc20bc8 100644 (file)
@@ -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;