50057212b3
Fix on kernel 6.10 (bz #2302245)
35 lines
1.4 KiB
Diff
35 lines
1.4 KiB
Diff
From: Martin Kletzander <mkletzan@redhat.com>
|
|
Date: Fri, 16 Aug 2024 13:59:15 +0200
|
|
Subject: [PATCH] virarptable: Fix check for message length
|
|
Content-type: text/plain
|
|
|
|
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 <mkletzan@redhat.com>
|
|
Reviewed-by: Laine Stump <laine@redhat.com>
|
|
---
|
|
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;
|