]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ipv4: fib_semantics: increment fib_info_cnt after fib_info allocation
authorSergey Popovich <popovich_sergei@mail.ru>
Tue, 6 May 2014 15:23:08 +0000 (18:23 +0300)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 9 Jun 2014 12:28:59 +0000 (13:28 +0100)
[ Upstream commit aeefa1ecfc799b0ea2c4979617f14cecd5cccbfd ]

Increment fib_info_cnt in fib_create_info() right after successfuly
alllocating fib_info structure, overwise fib_metrics allocation failure
leads to fib_info_cnt incorrectly decremented in free_fib_info(), called
on error path from fib_create_info().

Signed-off-by: Sergey Popovich <popovich_sergei@mail.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/ipv4/fib_semantics.c

index d01f9c658decd2dee860326e3b3a775fee8c1181..76da979baed0d5da877252ee188b96e1a58aa08b 100644 (file)
@@ -752,13 +752,13 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
        fi = kzalloc(sizeof(*fi)+nhs*sizeof(struct fib_nh), GFP_KERNEL);
        if (fi == NULL)
                goto failure;
+       fib_info_cnt++;
        if (cfg->fc_mx) {
                fi->fib_metrics = kzalloc(sizeof(u32) * RTAX_MAX, GFP_KERNEL);
                if (!fi->fib_metrics)
                        goto failure;
        } else
                fi->fib_metrics = (u32 *) dst_default_metrics;
-       fib_info_cnt++;
 
        fi->fib_net = hold_net(net);
        fi->fib_protocol = cfg->fc_protocol;