route: make rtnl_tc_clone() more robust against NLE_NOMEM
When oo_clone() fails, the new object is freed. Make sure 'dst' does not own parts of 'src'. Acked-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
parent
24ad51518f
commit
703989eb12
1 changed files with 9 additions and 1 deletions
|
@ -760,16 +760,24 @@ int rtnl_tc_clone(struct nl_object *dstobj, struct nl_object *srcobj)
|
|||
dst->tc_link = src->tc_link;
|
||||
}
|
||||
|
||||
dst->tc_opts = NULL;
|
||||
dst->tc_xstats = NULL;
|
||||
dst->tc_subdata = NULL;
|
||||
dst->ce_mask &= ~(TCA_ATTR_OPTS |
|
||||
TCA_ATTR_XSTATS);
|
||||
|
||||
if (src->tc_opts) {
|
||||
dst->tc_opts = nl_data_clone(src->tc_opts);
|
||||
if (!dst->tc_opts)
|
||||
return -NLE_NOMEM;
|
||||
dst->ce_mask |= TCA_ATTR_OPTS;
|
||||
}
|
||||
|
||||
|
||||
if (src->tc_xstats) {
|
||||
dst->tc_xstats = nl_data_clone(src->tc_xstats);
|
||||
if (!dst->tc_xstats)
|
||||
return -NLE_NOMEM;
|
||||
dst->ce_mask |= TCA_ATTR_XSTATS;
|
||||
}
|
||||
|
||||
if (src->tc_subdata) {
|
||||
|
|
Loading…
Add table
Reference in a new issue