X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fmpls_label_dpo.c;h=fa5177ab9ea1109f1d7127a2e6e59bee714a2e59;hb=f363ebd4e7cd60dada11daa0e61b64569a9e1cf6;hp=c6e8dcc475c159239e6a4f025042fb0a645d208d;hpb=73e4f7965b7f6c0ff3c1217962f76ad586af6332;p=vpp.git diff --git a/src/vnet/dpo/mpls_label_dpo.c b/src/vnet/dpo/mpls_label_dpo.c index c6e8dcc475c..fa5177ab9ea 100644 --- a/src/vnet/dpo/mpls_label_dpo.c +++ b/src/vnet/dpo/mpls_label_dpo.c @@ -16,6 +16,7 @@ #include #include #include +#include /* * pool of all MPLS Label DPOs @@ -53,6 +54,17 @@ mpls_label_dpo_create (mpls_label_t *label_stack, u32 ii; mld = mpls_label_dpo_alloc(); + + if (MPLS_LABEL_DPO_MAX_N_LABELS < vec_len(label_stack)) + { + clib_warning("Label stack size exceeded"); + dpo_stack(DPO_MPLS_LABEL, + mld->mld_payload_proto, + &mld->mld_dpo, + drop_dpo_get(DPO_PROTO_MPLS)); + return (mpls_label_dpo_get_index(mld)); + } + mld->mld_n_labels = vec_len(label_stack); mld->mld_n_hdr_bytes = mld->mld_n_labels * sizeof(mld->mld_hdr[0]); mld->mld_payload_proto = payload_proto;