This is a minor adjustment to make OSv implementation match what Linux
does - skip IFA_BROADCAST attributes for loopback address in NEWADDR
response.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
---
 bsd/sys/compat/linux/linux_netlink.cc | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/bsd/sys/compat/linux/linux_netlink.cc 
b/bsd/sys/compat/linux/linux_netlink.cc
index 4208ce7f..7e743db8 100644
--- a/bsd/sys/compat/linux/linux_netlink.cc
+++ b/bsd/sys/compat/linux/linux_netlink.cc
@@ -616,8 +616,11 @@ netlink_process_getaddr_msg(struct socket *so, struct 
nlmsghdr *nlm)
                                        in6_clearscope(&broadaddr.sin6_addr);
                                        p_broadaddr = (struct bsd_sockaddr 
*)&broadaddr;
                                }
-                               if (nla_put_sockaddr(m, IFA_ADDRESS, p_addr) ||
-                                       nla_put_sockaddr(m, IFA_BROADCAST, 
p_broadaddr)){
+                               if (nla_put_sockaddr(m, IFA_ADDRESS, p_addr)){
+                                       error = ENOBUFS;
+                                       goto done;
+                               }
+                               if (!(ifm->ifa_flags & IFF_LOOPBACK) && 
nla_put_sockaddr(m, IFA_BROADCAST, p_broadaddr)){
                                        error = ENOBUFS;
                                        goto done;
                                }
@@ -625,8 +628,11 @@ netlink_process_getaddr_msg(struct socket *so, struct 
nlmsghdr *nlm)
                        else
 #endif
                        {
-                               if (nla_put_sockaddr(m, IFA_ADDRESS, 
ifa->ifa_addr) ||
-                                       nla_put_sockaddr(m, IFA_BROADCAST, 
ifa->ifa_broadaddr)){
+                               if (nla_put_sockaddr(m, IFA_ADDRESS, 
ifa->ifa_addr)){
+                                       error = ENOBUFS;
+                                       goto done;
+                               }
+                               if (!(ifm->ifa_flags & IFF_LOOPBACK) && 
nla_put_sockaddr(m, IFA_BROADCAST, ifa->ifa_broadaddr)){
                                        error = ENOBUFS;
                                        goto done;
                                }
-- 
2.35.1

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20220604012837.214986-4-jwkozaczuk%40gmail.com.

Reply via email to