Skip to content

ospfd: add validation in several places before accessing message bodies - #21303

Merged
Jafaral merged 1 commit into
FRRouting:masterfrom
mjstapp:fix_ospf_tlvs_2
Apr 10, 2026
Merged

ospfd: add validation in several places before accessing message bodies#21303
Jafaral merged 1 commit into
FRRouting:masterfrom
mjstapp:fix_ospf_tlvs_2

Conversation

@mjstapp

@mjstapp mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

Add validation of LSA, TLV, and sub-TLV sizes before accessing bytes within packet/message bodies.

@greptile-apps

greptile-apps Bot commented Mar 24, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds bounds/size validation for LSA, TLV, and sub-TLV buffers in ospf_sr.c and ospf_te.c before casting pointers and reading fields, guarding against malformed or truncated packets causing memory safety issues.

All five P0/P1 findings raised in earlier review rounds (missing early-exit on error_p in ospf_sr_ri_lsa_update, unsigned underflow in ospf_te_parse_ext_pref/ospf_te_delete_ext_link, sizeof(struct) false-positive comparisons in get_ext_link_sid, and the network-byte-order loop bound overflow) are addressed in the current HEAD and verified against the source.

Confidence Score: 4/5

Safe to merge once the developer confirms no further follow-up commits are outstanding; all five previously flagged critical issues are resolved in HEAD.

All P0/P1 findings from prior review rounds β€” missing loop early-exit, unsigned underflow in two ext_pref functions, sizeof-vs-body-size false positives, and the NBO stack overflow β€” are verified fixed in the current commit. Remaining observations are P2-level. Score is 4 rather than 5 only as a prompt to confirm no additional fixes are pending before merge.

No files require special attention β€” all previously flagged critical paths have been addressed.

Vulnerabilities

  • Buffer over-read prevention: The PR adds lsa->size guards before all pointer casts in ospf_sr.c and ospf_te.c, preventing attackers from crafting malformed LSAs that cause reads past the end of a packet buffer.
  • Stack overflow fix (previously flagged, now resolved): The RI_SR_TLV_SR_ALGORITHM loop now uses the host-byte-order algo.length (validated to ≀ ALGORITHM_COUNT) rather than the raw network-byte-order field, eliminating a stack buffer overflow via a crafted LSA on little-endian systems.
  • Unsigned underflow fix (previously flagged, now resolved): lsa->size < OSPF_LSA_HEADER_SIZE pre-checks in all new path entries prevent unsigned wrap-around that could bypass subsequent size comparisons.
  • No new injection, auth, or secrets-handling concerns introduced.

Important Files Changed

Filename Overview
ospfd/ospf_sr.c Adds error_p guards and body-only size constants for sub-TLV validation in get_ext_link_sid; replaces raw algo pointer with a local copy using host-byte-order length in ospf_sr_ri_lsa_update; all previously flagged issues (early-exit loop, sizeof mismatch, NBO overflow) are resolved.
ospfd/ospf_te.c Adds LSA/TLV size guards in ospf_te_parse_te, ospf_te_parse_ri, ospf_te_parse_ext_pref, ospf_te_delete_ext_pref, ospf_te_parse_ext_link, and ospf_te_delete_ext_link; previously flagged unsigned-underflow issues are now guarded with < OSPF_LSA_HEADER_SIZE pre-checks.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Receive OSPF LSA] --> B{lsa->size <= OSPF_LSA_HEADER_SIZE?}
    B -- yes --> C[Warn & return / -1]
    B -- no --> D[Compute body length]
    D --> E{length <= TLV_HDR_SIZE?}
    E -- yes --> C
    E -- no --> F[Get TLV header pointer]
    F --> G{TLV_BODY_SIZE < minimum struct size?}
    G -- yes --> C
    G -- no --> H[Cast pointer to struct]
    H --> I[Iterate sub-TLVs]
    I --> J{tlv_size > remaining?}
    J -- yes --> K[Set error_p, break]
    J -- no --> L{Type switch}
    L --> M{Sub-TLV body size valid?}
    M -- no --> K
    M -- yes --> N[Access struct fields safely]
    N --> O{error_p set?}
    O -- yes --> K
    O -- no --> P{More sub-TLVs?}
    P -- yes --> I
    P -- no --> Q[Process accumulated data]
    K --> R[Warn & abort / free]
Loading

Reviews (9): Last reviewed commit: "ospfd: add validation in several places ..." | Re-trigger Greptile

Comment thread ospfd/ospf_sr.c
Comment on lines 1514 to +1521
}

sum += tlv_size;
if (sum < length)
tlvh = TLV_HDR_NEXT(tlvh);
if (sum >= length || ((length - sum) < TLV_HDR_SIZE))
break;

tlvh = TLV_HDR_NEXT(tlvh);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Missing early-exit on error inside loop

After error_p is set in one of the case blocks (e.g. for RI_SR_TLV_SRGB_LABEL_RANGE), the loop does not break immediately. It falls through to sum += tlv_size and may call TLV_HDR_NEXT(tlvh), continuing to process subsequent TLVs even though an error was already detected. Subsequent iterations can even overwrite algo, ri_srgb, etc. with pointers from later (possibly valid) TLVs.

This is inconsistent with every other modified loop in this same PR. Both get_ext_link_sid (same file, line ~1080) and ospf_te_parse_te (ospf_te.c, line ~2375) correctly add if (error_p) break; immediately after the switch statement. The missing guard should be added here too.

Suggested change
}
sum += tlv_size;
if (sum < length)
tlvh = TLV_HDR_NEXT(tlvh);
if (sum >= length || ((length - sum) < TLV_HDR_SIZE))
break;
tlvh = TLV_HDR_NEXT(tlvh);
}
}
if (error_p)
break;
sum += tlv_size;
if (sum >= length || ((length - sum) < TLV_HDR_SIZE))
break;
tlvh = TLV_HDR_NEXT(tlvh);
}
Prompt To Fix With AI
This is a comment left during a code review.
Path: ospfd/ospf_sr.c
Line: 1514-1521

Comment:
**Missing early-exit on error inside loop**

After `error_p` is set in one of the `case` blocks (e.g. for `RI_SR_TLV_SRGB_LABEL_RANGE`), the loop does not break immediately. It falls through to `sum += tlv_size` and may call `TLV_HDR_NEXT(tlvh)`, continuing to process subsequent TLVs even though an error was already detected. Subsequent iterations can even overwrite `algo`, `ri_srgb`, etc. with pointers from later (possibly valid) TLVs.

This is inconsistent with every other modified loop in this same PR. Both `get_ext_link_sid` (same file, line ~1080) and `ospf_te_parse_te` (`ospf_te.c`, line ~2375) correctly add `if (error_p) break;` immediately after the `switch` statement. The missing guard should be added here too.

```suggestion
		}

		if (error_p)
			break;

		sum += tlv_size;
		if (sum >= length || ((length - sum) < TLV_HDR_SIZE))
			break;

		tlvh = TLV_HDR_NEXT(tlvh);
	}
```

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's a valid comment; I will fix it

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@greptile fixed

Comment thread ospfd/ospf_te.c
Comment thread ospfd/ospf_te.c
Comment on lines +2902 to +2906
/* Validate TLV buffer */
if ((lsa->size - OSPF_LSA_HEADER_SIZE) <= TLV_HDR_SIZE) {
zlog_warn("Malformed EXT Prefix LSA");
return -1;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Unsigned underflow bypasses size validation

Same class of bug as in ospf_te_parse_ext_pref above. lsa->size - OSPF_LSA_HEADER_SIZE is an unsigned size_t subtraction. If lsa->size < 20, the result wraps to a value far larger than TLV_HDR_SIZE, the check is always false, and execution falls through to TLV_BODY_SIZE(tlvh) on a potentially invalid pointer.

The guard should follow the same pattern used in ospf_te_parse_te and ospf_te_parse_ri:

Suggested change
/* Validate TLV buffer */
if ((lsa->size - OSPF_LSA_HEADER_SIZE) <= TLV_HDR_SIZE) {
zlog_warn("Malformed EXT Prefix LSA");
return -1;
}
/* Validate TLV buffer */
if (lsa->size <= OSPF_LSA_HEADER_SIZE ||
(lsa->size - OSPF_LSA_HEADER_SIZE) <= TLV_HDR_SIZE) {
zlog_warn("Malformed EXT Prefix LSA");
return -1;
}
Prompt To Fix With AI
This is a comment left during a code review.
Path: ospfd/ospf_te.c
Line: 2902-2906

Comment:
**Unsigned underflow bypasses size validation**

Same class of bug as in `ospf_te_parse_ext_pref` above. `lsa->size - OSPF_LSA_HEADER_SIZE` is an unsigned `size_t` subtraction. If `lsa->size < 20`, the result wraps to a value far larger than `TLV_HDR_SIZE`, the check is always false, and execution falls through to `TLV_BODY_SIZE(tlvh)` on a potentially invalid pointer.

The guard should follow the same pattern used in `ospf_te_parse_te` and `ospf_te_parse_ri`:

```suggestion
	/* Validate TLV buffer */
	if (lsa->size <= OSPF_LSA_HEADER_SIZE ||
	    (lsa->size - OSPF_LSA_HEADER_SIZE) <= TLV_HDR_SIZE) {
		zlog_warn("Malformed EXT Prefix LSA");
		return -1;
	}
```

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's valid, I will fix those

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@greptile fixed

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

Pushed an update to fix a couple of greptile comments

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

Comment thread ospfd/ospf_sr.c
Comment on lines 1017 to 1074
@@ -1031,6 +1039,13 @@ static struct sr_link *get_ext_link_sid(struct tlv_header *tlvh, size_t size)
IPV4_ADDR_COPY(&srl->nhlfe[i].nexthop, &link->link_id);
break;
case EXT_SUBTLV_LAN_ADJ_SID:
/* Validate sub-TLV length */
if (TLV_BODY_SIZE(sub_tlvh) <
sizeof(struct ext_subtlv_lan_adj_sid)) {
error_p = true;
break;
}

lan_sid = (struct ext_subtlv_lan_adj_sid *)sub_tlvh;
srl->type = LAN_ADJ_SID;
i = CHECK_FLAG(lan_sid->flags,
@@ -1047,18 +1062,38 @@ static struct sr_link *get_ext_link_sid(struct tlv_header *tlvh, size_t size)
&lan_sid->neighbor_id);
break;
case EXT_SUBTLV_RMT_ITF_ADDR:
/* Validate sub-TLV length */
if (TLV_BODY_SIZE(sub_tlvh) <
sizeof(struct ext_subtlv_rmt_itf_addr)) {
error_p = true;
break;
}

rmt_itf = (struct ext_subtlv_rmt_itf_addr *)sub_tlvh;
IPV4_ADDR_COPY(&srl->nhlfe[0].nexthop, &rmt_itf->value);
IPV4_ADDR_COPY(&srl->nhlfe[1].nexthop, &rmt_itf->value);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 sizeof(struct) includes TLV header, causing all valid TLVs to fail validation

Every new size check in ospf_sr.c compares TLV_BODY_SIZE(tlvh) β€” which is ROUNDUP(ntohs(tlvh->length), 4), i.e. the body only β€” against sizeof(struct …), which includes the embedded struct tlv_header (4 bytes). Since the header fields are part of every struct, sizeof is always 4 bytes larger than the actual body, so the check is always true for a valid TLV, causing error_p = true for every legitimate sub-TLV.

Concrete examples:

  • struct ext_subtlv_adj_sid body = 8 bytes β†’ TLV_BODY_SIZE = 8, sizeof = 12 β†’ 8 < 12 βœ“ (false positive error)
  • struct ext_subtlv_lan_adj_sid body = 12 bytes β†’ TLV_BODY_SIZE = 12, sizeof = 16 β†’ 12 < 16 βœ“ (false positive error)
  • struct ext_subtlv_rmt_itf_addr body = 4 bytes β†’ TLV_BODY_SIZE = 4, sizeof = 8 β†’ 4 < 8 βœ“ (false positive error)

The existing ospf_te.c code uses the body-only size constants for the same TLVs (e.g. TLV_BODY_SIZE(tlvh) != EXT_SUBTLV_ADJ_SID_SIZE where EXT_SUBTLV_ADJ_SID_SIZE = 8). The fixes below should use those same constants or subtract TLV_HDR_SIZE:

// get_ext_link_sid fixes
case EXT_SUBTLV_ADJ_SID:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_ADJ_SID_SIZE) { ...

case EXT_SUBTLV_LAN_ADJ_SID:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_LAN_ADJ_SID_SIZE) { ...

case EXT_SUBTLV_RMT_ITF_ADDR:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_RMT_ITF_ADDR_SIZE) { ...

The same pattern applies to all four cases in ospf_sr_ri_lsa_update (lines ~1474–1506). The correct body-only sizes are:

  • RI_SR_TLV_SR_ALGORITHM: TLV_BODY_SIZE < 1 (at least one algorithm byte)
  • RI_SR_TLV_SRGB_LABEL_RANGE / RI_SR_TLV_SRLB_LABEL_RANGE: TLV_BODY_SIZE < RI_SR_TLV_LABEL_RANGE_SIZE (= 12)
  • RI_SR_TLV_NODE_MSD: TLV_BODY_SIZE < RI_SR_TLV_NODE_MSD_SIZE (= 4)
Prompt To Fix With AI
This is a comment left during a code review.
Path: ospfd/ospf_sr.c
Line: 1017-1074

Comment:
**`sizeof(struct)` includes TLV header, causing all valid TLVs to fail validation**

Every new size check in `ospf_sr.c` compares `TLV_BODY_SIZE(tlvh)` β€” which is `ROUNDUP(ntohs(tlvh->length), 4)`, i.e. the **body only** β€” against `sizeof(struct …)`, which includes the embedded `struct tlv_header` (4 bytes). Since the header fields are part of every struct, `sizeof` is always 4 bytes larger than the actual body, so the check is always true for a valid TLV, causing `error_p = true` for every legitimate sub-TLV.

Concrete examples:
- `struct ext_subtlv_adj_sid` body = 8 bytes β†’ `TLV_BODY_SIZE = 8`, `sizeof = 12` β†’ `8 < 12` βœ“ (false positive error)
- `struct ext_subtlv_lan_adj_sid` body = 12 bytes β†’ `TLV_BODY_SIZE = 12`, `sizeof = 16` β†’ `12 < 16` βœ“ (false positive error)
- `struct ext_subtlv_rmt_itf_addr` body = 4 bytes β†’ `TLV_BODY_SIZE = 4`, `sizeof = 8` β†’ `4 < 8` βœ“ (false positive error)

The existing `ospf_te.c` code uses the body-only size constants for the same TLVs (e.g. `TLV_BODY_SIZE(tlvh) != EXT_SUBTLV_ADJ_SID_SIZE` where `EXT_SUBTLV_ADJ_SID_SIZE = 8`). The fixes below should use those same constants or subtract `TLV_HDR_SIZE`:

```c
// get_ext_link_sid fixes
case EXT_SUBTLV_ADJ_SID:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_ADJ_SID_SIZE) { ...

case EXT_SUBTLV_LAN_ADJ_SID:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_LAN_ADJ_SID_SIZE) { ...

case EXT_SUBTLV_RMT_ITF_ADDR:
    if (TLV_BODY_SIZE(sub_tlvh) < EXT_SUBTLV_RMT_ITF_ADDR_SIZE) { ...
```

The same pattern applies to all four cases in `ospf_sr_ri_lsa_update` (lines ~1474–1506). The correct body-only sizes are:
- `RI_SR_TLV_SR_ALGORITHM`: `TLV_BODY_SIZE < 1` (at least one algorithm byte)
- `RI_SR_TLV_SRGB_LABEL_RANGE` / `RI_SR_TLV_SRLB_LABEL_RANGE`: `TLV_BODY_SIZE < RI_SR_TLV_LABEL_RANGE_SIZE` (= 12)
- `RI_SR_TLV_NODE_MSD`: `TLV_BODY_SIZE < RI_SR_TLV_NODE_MSD_SIZE` (= 4)

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's a valid comment; I will fix it

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@greptile fixed

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

Pushed more fixes, caught a bug in another file too

@github-actions github-actions Bot added the rebase PR needs rebase label Mar 24, 2026
@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

Comment thread ospfd/ospf_sr.c Outdated
Comment on lines +1500 to +1501
for (i = 0; i < tlvh->length; i++)
algo.value[i] = *(p + i);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P0 Network-byte-order loop bound causes stack buffer overflow

The loop bound tlvh->length is the raw network-byte-order uint16_t field, not the host-order value. On little-endian systems (x86/x86_64), a valid length of 1 stored in network order is the bytes 0x00 0x01, which when read as a little-endian uint16_t yields 256. For the maximum validated value of ALGORITHM_COUNT = 4, the raw field reads as 1024. The loop therefore tries to write up to 1024 bytes into algo.value[ALGORITHM_COUNT], which is only 4 bytes β€” this is a stack buffer overflow.

Notably, algo.length was set to ntohs(tlvh->length) on the line immediately before, so the fix is simply to use it:

Suggested change
for (i = 0; i < tlvh->length; i++)
algo.value[i] = *(p + i);
for (i = 0; i < algo.length; i++)
algo.value[i] = *(p + i);

The analogous code in ospf_te_parse_ri (line 2641) correctly uses ntohs(algo->header.length) in its loop bound.

Prompt To Fix With AI
This is a comment left during a code review.
Path: ospfd/ospf_sr.c
Line: 1500-1501

Comment:
**Network-byte-order loop bound causes stack buffer overflow**

The loop bound `tlvh->length` is the raw network-byte-order `uint16_t` field, not the host-order value. On little-endian systems (x86/x86_64), a valid length of `1` stored in network order is the bytes `0x00 0x01`, which when read as a little-endian `uint16_t` yields `256`. For the maximum validated value of `ALGORITHM_COUNT = 4`, the raw field reads as `1024`. The loop therefore tries to write up to 1024 bytes into `algo.value[ALGORITHM_COUNT]`, which is only 4 bytes β€” this is a stack buffer overflow.

Notably, `algo.length` was set to `ntohs(tlvh->length)` on the line immediately before, so the fix is simply to use it:

```suggestion
			for (i = 0; i < algo.length; i++)
				algo.value[i] = *(p + i);
```

The analogous code in `ospf_te_parse_ri` (line 2641) correctly uses `ntohs(algo->header.length)` in its loop bound.

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, that's a valid comment, I will fix it

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@greptile fixed

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

Pushed yet-another byte-ordering fix

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

... and pushed another set of fixes

@riw777 riw777 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good

@mjstapp

mjstapp commented Mar 24, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

@Jafaral

Jafaral commented Mar 24, 2026

Copy link
Copy Markdown
Member

@Mergifyio backport stable/10.6 stable/10.5 stable/10.4 stable/10.3 stable/10.2

@mergify

mergify Bot commented Mar 24, 2026

Copy link
Copy Markdown

backport stable/10.6 stable/10.5 stable/10.4 stable/10.3 stable/10.2

βœ… Backports have been created

Details

@mjstapp

mjstapp commented Mar 27, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

@riw777

riw777 commented Mar 31, 2026

Copy link
Copy Markdown
Member

ci failures don't look related ... rerunning just the failed tests to see if we can clear those

@mjstapp

mjstapp commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

rebased, and cleaned-up a greptile comment

@mjstapp

mjstapp commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai review

@mjstapp

mjstapp commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

there's a repeated failure in a relevant SR/TE topotest on one platform. I've added temporary logging in some of the changed code to see if I can learn more about why that's failing.

@mjstapp
mjstapp force-pushed the fix_ospf_tlvs_2 branch 3 times, most recently from edef14b to c2ac523 Compare April 2, 2026 14:09
@mjstapp

mjstapp commented Apr 2, 2026

Copy link
Copy Markdown
Contributor Author

Adding some more debugging info, including in the failing topotest

@mjstapp

mjstapp commented Apr 2, 2026

Copy link
Copy Markdown
Contributor Author

version with debugs passed CI - try again without the debugs

@mjstapp

mjstapp commented Apr 2, 2026

Copy link
Copy Markdown
Contributor Author

failed again on ubu 24 - trying again with some topotest debugs enabled on r1

@mjstapp

mjstapp commented Apr 2, 2026

Copy link
Copy Markdown
Contributor Author

adding some more ospf debugs, still failing one test on ubu 24

@mjstapp
mjstapp force-pushed the fix_ospf_tlvs_2 branch 2 times, most recently from f24ff62 to d2ee3dd Compare April 3, 2026 13:37
Add validation of LSA, TLV, and sub-TLV sizes before accessing
bytes within the message bodies.

Reported-by: Haruto Kimura (Stella) <harutokimura0608@gmail.com>
Signed-off-by: Mark Stapp <mjs@cisco.com>
@mjstapp

mjstapp commented Apr 6, 2026

Copy link
Copy Markdown
Contributor Author

think I found the problem - pushed an update

@Jafaral

Jafaral commented Apr 9, 2026

Copy link
Copy Markdown
Member

@greptile review

@greptile-apps

greptile-apps Bot commented Apr 9, 2026

Copy link
Copy Markdown

Tip:

Greploop β€” Automatically fix all review issues by running /greploops in Claude Code. It iterates: fix, push, re-review, repeat until 5/5 confidence.

Use the Greptile plugin for Claude Code to query reviews, search comments, and manage custom context directly from your terminal.

@greptile-apps

greptile-apps Bot commented Apr 10, 2026

Copy link
Copy Markdown

Target branch is not in the allowed branches list.

@Jafaral
Jafaral merged commit 62b97fb into FRRouting:master Apr 10, 2026
22 checks passed
mjstapp added a commit that referenced this pull request Apr 10, 2026
ospfd: add validation in several places before accessing message bodies (backport #21303)
mjstapp added a commit that referenced this pull request Apr 10, 2026
ospfd: add validation in several places before accessing message bodies (backport #21303)
mjstapp added a commit that referenced this pull request Apr 10, 2026
ospfd: add validation in several places before accessing message bodies (backport #21303)
@mjstapp
mjstapp deleted the fix_ospf_tlvs_2 branch April 16, 2026 19:10
donaldsharp added a commit that referenced this pull request Apr 16, 2026
ospfd: add validation in several places before accessing message bodies (backport #21303)
donaldsharp added a commit that referenced this pull request Apr 16, 2026
ospfd: add validation in several places before accessing message bodies (backport #21303)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants