From ef84581a69cb76932dec6957f86c2429d0baf39d Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Fri, 16 Aug 2024 13:59:15 +0200 Subject: [PATCH] virarptable: Fix check for message length The previous check was all wrong since it calculated the how long would the netlink message be if the netlink header was the payload and then subtracted that from the whole message length, a variable that was not used later in the code. This check can fail if there are no additional payloads, struct rtattr in particular, which we are parsing later, however the RTA_OK macro would've caught that anyway. Signed-off-by: Martin Kletzander Reviewed-by: Laine Stump --- src/util/virarptable.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/util/virarptable.c b/src/util/virarptable.c index d8e41c5a86..45ee76766f 100644 --- a/src/util/virarptable.c +++ b/src/util/virarptable.c @@ -81,10 +81,9 @@ virArpTableGet(void) for (; NLMSG_OK(nh, msglen); nh = NLMSG_NEXT(nh, msglen)) { VIR_WARNINGS_RESET struct ndmsg *r = NLMSG_DATA(nh); - int len = nh->nlmsg_len; void *addr; - if ((len -= NLMSG_LENGTH(sizeof(*nh))) < 0) { + if (nh->nlmsg_len < NLMSG_SPACE(sizeof(*r))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("wrong nlmsg len")); goto cleanup;