Fix memory leaks when sending of message failed
Various callers of nl_send_auto_complete() failed to free the allocated message when an error was reported.
This commit is contained in:
parent
1155370f52
commit
ef50a38fbd
6 changed files with 36 additions and 24 deletions
|
@ -154,10 +154,11 @@ int rtnl_class_add(struct nl_sock *sk, struct rtnl_class *class, int flags)
|
|||
if ((err = rtnl_class_build_add_request(class, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -169,10 +169,11 @@ int rtnl_cls_add(struct nl_sock *sk, struct rtnl_cls *cls, int flags)
|
|||
if ((err = rtnl_cls_build_add_request(cls, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -215,10 +216,11 @@ int rtnl_cls_change(struct nl_sock *sk, struct rtnl_cls *cls, int flags)
|
|||
if ((err = rtnl_cls_build_change_request(cls, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -262,10 +264,11 @@ int rtnl_cls_delete(struct nl_sock *sk, struct rtnl_cls *cls, int flags)
|
|||
if ((err = rtnl_cls_build_delete_request(cls, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -1047,10 +1047,11 @@ int rtnl_link_change(struct nl_sock *sk, struct rtnl_link *old,
|
|||
if ((err = rtnl_link_build_change_request(old, tmpl, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -653,10 +653,11 @@ int rtnl_neigh_add(struct nl_sock *sk, struct rtnl_neigh *tmpl, int flags)
|
|||
if ((err = rtnl_neigh_build_add_request(tmpl, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -708,10 +709,11 @@ int rtnl_neigh_delete(struct nl_sock *sk, struct rtnl_neigh *neigh,
|
|||
if ((err = rtnl_neigh_build_delete_request(neigh, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -767,10 +769,11 @@ int rtnl_neigh_change(struct nl_sock *sk, struct rtnl_neigh *neigh, int flags)
|
|||
if ((err = rtnl_neigh_build_change_request(neigh, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -590,10 +590,11 @@ int rtnl_neightbl_change(struct nl_sock *sk, struct rtnl_neightbl *old,
|
|||
if ((err = rtnl_neightbl_build_change_request(old, tmpl, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -233,10 +233,11 @@ int rtnl_qdisc_add(struct nl_sock *sk, struct rtnl_qdisc *qdisc,
|
|||
if ((err = rtnl_qdisc_build_add_request(qdisc, flags, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -288,10 +289,11 @@ int rtnl_qdisc_change(struct nl_sock *sk, struct rtnl_qdisc *qdisc,
|
|||
if ((err = rtnl_qdisc_build_change_request(qdisc, new, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
@ -360,10 +362,11 @@ int rtnl_qdisc_delete(struct nl_sock *sk, struct rtnl_qdisc *qdisc)
|
|||
if ((err = rtnl_qdisc_build_delete_request(qdisc, &msg)) < 0)
|
||||
return err;
|
||||
|
||||
if ((err = nl_send_auto_complete(sk, msg)) < 0)
|
||||
err = nl_send_auto_complete(sk, msg);
|
||||
nlmsg_free(msg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
nlmsg_free(msg);
|
||||
return nl_wait_for_ack(sk);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue