--- a/net/netlink/policy.c +++ b/net/netlink/policy.c @@ -144,7 +144,7 @@ int netlink_policy_dump_add_policy(struct err = add_policy(&state, policy, maxtype); if (err) - return err; + goto err_out; for (policy_idx = 0; policy_idx < state->n_alloc && @@ -164,7 +164,7 @@ int netlink_policy_dump_add_policy(struct policy[type].nested_policy, policy[type].len); if (err) - return err; + goto err_out; break; default: break; @@ -174,6 +174,9 @@ int netlink_policy_dump_add_policy(struct *pstate = state; return 0; +err_out: + kfree(state); + return err; } static bool