]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/fib_semantics.c
ipv4: Allocate fib metrics dynamically.
[~andy/linux] / net / ipv4 / fib_semantics.c
index 9aff11d7278f5bf31305b4582ee5e0eff75ffd4a..363ec39228d347901660807897b5d74683d7ed41 100644 (file)
@@ -152,6 +152,7 @@ static void free_fib_info_rcu(struct rcu_head *head)
 {
        struct fib_info *fi = container_of(head, struct fib_info, rcu);
 
+       kfree(fi->fib_metrics);
        kfree(fi);
 }
 
@@ -742,6 +743,9 @@ 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;
+       fi->fib_metrics = kzalloc(sizeof(u32) * RTAX_MAX, GFP_KERNEL);
+       if (!fi->fib_metrics)
+               goto failure;
        fib_info_cnt++;
 
        fi->fib_net = hold_net(net);