[PATCH 2/2] route: make rtnl_tc_clone() more robust agaoins NLE_NOMEM
Thomas Haller
thaller at redhat.com
Mon Nov 24 08:19:54 PST 2014
When oo_clone() fails, the new object is freed. Make sure dst
does not owns parts of src.
Signed-off-by: Thomas Haller <thaller at redhat.com>
---
lib/route/tc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/lib/route/tc.c b/lib/route/tc.c
index 4c92822..1dcb986 100644
--- a/lib/route/tc.c
+++ b/lib/route/tc.c
@@ -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) {
--
1.9.3
More information about the libnl
mailing list