Skip to content

Commit

Permalink
zebra: fix incoming FPM message length validation
Browse files Browse the repository at this point in the history
Validate incoming message length against correct
(struct rtmsg) len, not top-level netlink message header size.

Signed-off-by: Mark Stapp <[email protected]>
  • Loading branch information
Mark Stapp committed Jun 5, 2024
1 parent 2871a4e commit 28d2e12
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions zebra/dplane_fpm_nl.c
Original file line number Diff line number Diff line change
Expand Up @@ -654,14 +654,6 @@ static void fpm_read(struct event *t)
hdr_available_bytes = fpm.msg_len - FPM_MSG_HDR_LEN;
available_bytes -= hdr_available_bytes;

/* Sanity check: must be at least header size. */
if (hdr->nlmsg_len < sizeof(*hdr)) {
zlog_warn(
"%s: [seq=%u] invalid message length %u (< %zu)",
__func__, hdr->nlmsg_seq, hdr->nlmsg_len,
sizeof(*hdr));
continue;
}
if (hdr->nlmsg_len > fpm.msg_len) {
zlog_warn(
"%s: Received a inner header length of %u that is greater than the fpm total length of %u",
Expand Down Expand Up @@ -691,6 +683,14 @@ static void fpm_read(struct event *t)

switch (hdr->nlmsg_type) {
case RTM_NEWROUTE:
/* Sanity check: need at least route msg header size. */
if (hdr->nlmsg_len < sizeof(struct rtmsg)) {
zlog_warn("%s: [seq=%u] invalid message length %u (< %zu)",
__func__, hdr->nlmsg_seq,
hdr->nlmsg_len, sizeof(struct rtmsg));
break;
}

ctx = dplane_ctx_alloc();
dplane_ctx_route_init(ctx, DPLANE_OP_ROUTE_NOTIFY, NULL,
NULL);
Expand Down

0 comments on commit 28d2e12

Please sign in to comment.