goto rejected;
        }
 
-       test_and_set_bit_lock(0, &b->up);
-       rcu_assign_pointer(tn->bearer_list[bearer_id], b);
-       if (skb)
-               tipc_bearer_xmit_skb(net, bearer_id, skb, &b->bcast_addr);
-
+       /* Create monitoring data before accepting activate messages */
        if (tipc_mon_create(net, bearer_id)) {
                bearer_disable(net, b);
+               kfree_skb(skb);
                return -ENOMEM;
        }
 
+       test_and_set_bit_lock(0, &b->up);
+       rcu_assign_pointer(tn->bearer_list[bearer_id], b);
+       if (skb)
+               tipc_bearer_xmit_skb(net, bearer_id, skb, &b->bcast_addr);
+
        pr_info("Enabled bearer <%s>, priority %u\n", name, prio);
 
        return res;