diff --git a/zebra/zebra_srte.c b/zebra/zebra_srte.c index 17baeaf64cbf..025b87a3300e 100644 --- a/zebra/zebra_srte.c +++ b/zebra/zebra_srte.c @@ -303,6 +303,7 @@ int zebra_sr_policy_bsid_install(struct zebra_sr_policy *policy) frr_each_safe(nhlfe_list, &policy->lsp->nhlfe_list, nhlfe) { uint8_t num_out_labels; mpls_label_t *out_labels; + mpls_label_t null_label = MPLS_LABEL_IMPLICIT_NULL; if (!CHECK_FLAG(nhlfe->flags, NHLFE_FLAG_SELECTED) || CHECK_FLAG(nhlfe->flags, NHLFE_FLAG_DELETED)) @@ -314,8 +315,13 @@ int zebra_sr_policy_bsid_install(struct zebra_sr_policy *policy) */ if (!nhlfe->nexthop->nh_label || !nhlfe->nexthop->nh_label->num_labels || nhlfe->nexthop->nh_label->label[0] == MPLS_LABEL_IMPLICIT_NULL) { - num_out_labels = zt->label_num - 1; - out_labels = &zt->labels[1]; + if (zt->label_num > 1) { + num_out_labels = zt->label_num - 1; + out_labels = &zt->labels[1]; + } else { + num_out_labels = 1; + out_labels = &null_label; + } } else { num_out_labels = zt->label_num; out_labels = zt->labels;