From 3a151e31ac6ea7e4555dd874fc23f70527eb359b Mon Sep 17 00:00:00 2001 From: "Alexander V. Chernikov" Date: Sun, 26 Mar 2023 18:06:34 +0000 Subject: [PATCH] route: fix RTF_HOST & non-empty mask handling in netlink translation. --- sbin/route/route_netlink.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sbin/route/route_netlink.c b/sbin/route/route_netlink.c index 648d866670fc..0b9bb4ff5750 100644 --- a/sbin/route/route_netlink.c +++ b/sbin/route/route_netlink.c @@ -154,14 +154,20 @@ rtmsg_nl_int(struct nl_helper *h, int cmd, int rtm_flags, int fib, { struct sockaddr_in *mask4 = (struct sockaddr_in *)mask; - plen = mask4 ? bitcount32(mask4->sin_addr.s_addr) : 32; + if ((rtm_flags & RTF_HOST) == 0 && mask4 != NULL) + plen = bitcount32(mask4->sin_addr.s_addr); + else + plen = 32; break; } case AF_INET6: { struct sockaddr_in6 *mask6 = (struct sockaddr_in6 *)mask; - plen = mask6 ? inet6_get_plen(&mask6->sin6_addr) : 128; + if ((rtm_flags & RTF_HOST) == 0 && mask6 != NULL) + plen = inet6_get_plen(&mask6->sin6_addr); + else + plen = 128; break; } default: