[PATCH 1/3] virarptable: Properly calculate rtattr length

Martin Kletzander posted 3 patches 3 months, 1 week ago
[PATCH 1/3] virarptable: Properly calculate rtattr length
Posted by Martin Kletzander 3 months, 1 week ago
Use convenience macro from libnl3 which does almost the same thing we
were doing, but also aligns the payload length.

Signed-off-by: Martin Kletzander <mkletzan@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 299dddd664ab..d8e41c5a8668 100644
--- a/src/util/virarptable.c
+++ b/src/util/virarptable.c
@@ -102,8 +102,7 @@ virArpTableGet(void)
             return table;
 
         VIR_WARNINGS_NO_CAST_ALIGN
-        parse_rtattr(tb, NDA_MAX, NDA_RTA(r),
-                     nh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)));
+        parse_rtattr(tb, NDA_MAX, NDA_RTA(r), NLMSG_PAYLOAD(nh, sizeof(*r)));
         VIR_WARNINGS_RESET
 
         if (tb[NDA_DST] == NULL || tb[NDA_LLADDR] == NULL)
-- 
2.46.0
Re: [PATCH 1/3] virarptable: Properly calculate rtattr length
Posted by Laine Stump 3 months, 1 week ago
On 8/16/24 8:45 AM, Martin Kletzander wrote:
> Use convenience macro from libnl3

Actually the NLMSG_PAYLOAD() macro (which I had never used nor heard of 
before this, but just looked it up in the header files so I could be a 
know-it-all) is in the basic kernel netlink.h, not in libnl.

> which does almost the same thing we
> were doing, but also aligns the payload length.

"pads out the payload length to a multiple of NLMSG_ALIGNTO (4) bytes" 
to be more long-winded :-)

> 
> Signed-off-by: Martin Kletzander <mkletzan@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 299dddd664ab..d8e41c5a8668 100644
> --- a/src/util/virarptable.c
> +++ b/src/util/virarptable.c
> @@ -102,8 +102,7 @@ virArpTableGet(void)
>               return table;
>   
>           VIR_WARNINGS_NO_CAST_ALIGN
> -        parse_rtattr(tb, NDA_MAX, NDA_RTA(r),
> -                     nh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)));
> +        parse_rtattr(tb, NDA_MAX, NDA_RTA(r), NLMSG_PAYLOAD(nh, sizeof(*r)));
>           VIR_WARNINGS_RESET
>   
>           if (tb[NDA_DST] == NULL || tb[NDA_LLADDR] == NULL)

Reviewed-by: Laine Stump <laine@redhat.com>