Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
fib: fix use-after-free
[vpp.git]
/
src
/
vnet
/
mfib
/
mfib_entry.c
diff --git
a/src/vnet/mfib/mfib_entry.c
b/src/vnet/mfib/mfib_entry.c
index
448e6c5
..
c08565d
100644
(file)
--- a/
src/vnet/mfib/mfib_entry.c
+++ b/
src/vnet/mfib/mfib_entry.c
@@
-1144,18
+1144,18
@@
mfib_entry_path_remove (fib_node_index_t mfib_entry_index,
mfib_entry_itf_remove(msrc, rpath->frp_sw_if_index);
}
}
mfib_entry_itf_remove(msrc, rpath->frp_sw_if_index);
}
}
-
- if (mfib_entry_src_ok_for_delete(msrc))
- {
- /*
- * this source has no interfaces and no flags.
- * it has nothing left to give - remove it
- */
- mfib_entry_src_remove(mfib_entry, source);
- }
}
vec_free(path_indices);
}
vec_free(path_indices);
+ if (mfib_entry_src_ok_for_delete(msrc))
+ {
+ /*
+ * this source has no interfaces and no flags.
+ * it has nothing left to give - remove it
+ */
+ mfib_entry_src_remove(mfib_entry, source);
+ }
+
mfib_entry_recalculate_forwarding(mfib_entry, current_best);
return (mfib_entry_ok_for_delete(mfib_entry));
mfib_entry_recalculate_forwarding(mfib_entry, current_best);
return (mfib_entry_ok_for_delete(mfib_entry));
@@
-1491,7
+1491,8
@@
mfib_entry_contribute_forwarding (fib_node_index_t mfib_entry_index,
/*
* caller does not want the local paths that the entry has
*/
/*
* caller does not want the local paths that the entry has
*/
- dpo_set(dpo, DPO_REPLICATE, rep->rep_proto,
+ dpo_proto_t rep_proto = rep->rep_proto;
+ dpo_set(dpo, DPO_REPLICATE, rep_proto,
replicate_dup(REPLICATE_FLAGS_NONE,
mfib_entry->mfe_rep.dpoi_index));
}
replicate_dup(REPLICATE_FLAGS_NONE,
mfib_entry->mfe_rep.dpoi_index));
}