summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--isisd/isis_tlvs.c4
-rw-r--r--isisd/isis_zebra.c17
2 files changed, 15 insertions, 6 deletions
diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c
index cd7b3b8842..ecf43faa70 100644
--- a/isisd/isis_tlvs.c
+++ b/isisd/isis_tlvs.c
@@ -2751,7 +2751,7 @@ static int unpack_item_srv6_end_sid(uint16_t mtid, uint8_t len,
void *dest, int indent)
{
struct isis_subtlvs *subtlvs = dest;
- struct isis_srv6_end_sid_subtlv *sid;
+ struct isis_srv6_end_sid_subtlv *sid = NULL;
size_t consume;
uint8_t subsubtlv_len;
@@ -2763,7 +2763,7 @@ static int unpack_item_srv6_end_sid(uint16_t mtid, uint8_t len,
log, indent,
"Not enough data left. (expected 19 or more bytes, got %hhu)\n",
len);
- return 1;
+ goto out;
}
sid = XCALLOC(MTYPE_ISIS_SUBTLV, sizeof(*sid));
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index ada8f1ad29..788618ef8b 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -1017,12 +1017,15 @@ void isis_zebra_srv6_adj_sid_install(struct srv6_adjacency *sra)
struct seg6local_context ctx = {};
uint16_t prefixlen = IPV6_MAX_BITLEN;
struct interface *ifp;
- struct isis_circuit *circuit = sra->adj->circuit;
- struct isis_area *area = circuit->area;
+ struct isis_circuit *circuit;
+ struct isis_area *area;
if (!sra)
return;
+ circuit = sra->adj->circuit;
+ area = circuit->area;
+
sr_debug("ISIS-SRv6 (%s): setting adjacency SID %pI6", area->area_tag,
&sra->sid);
@@ -1071,12 +1074,15 @@ void isis_zebra_srv6_adj_sid_uninstall(struct srv6_adjacency *sra)
enum seg6local_action_t action = ZEBRA_SEG6_LOCAL_ACTION_UNSPEC;
struct interface *ifp;
uint16_t prefixlen = IPV6_MAX_BITLEN;
- struct isis_circuit *circuit = sra->adj->circuit;
- struct isis_area *area = circuit->area;
+ struct isis_circuit *circuit;
+ struct isis_area *area;
if (!sra)
return;
+ circuit = sra->adj->circuit;
+ area = circuit->area;
+
switch (sra->behavior) {
case SRV6_ENDPOINT_BEHAVIOR_END_X:
prefixlen = IPV6_MAX_BITLEN;
@@ -1130,6 +1136,9 @@ static int isis_zebra_process_srv6_locator_chunk(ZAPI_CALLBACK_ARGS)
enum srv6_endpoint_behavior_codepoint behavior;
bool allocated = false;
+ if (!isis)
+ return -1;
+
/* Decode the received zebra message */
s = zclient->ibuf;
if (zapi_srv6_locator_chunk_decode(s, chunk) < 0)