João Pedro Malhado, le mer. 15 juil. 2026 23:51:32 +0100, a ecrit:
> On Wed, Jul 15, 2026 at 12:48:27AM +0200, Samuel Thibault wrote:
> > João Pedro Malhado, le mar. 14 juil. 2026 10:28:24 +0100, a ecrit:
> > > I have tried it on another Toshiba netbook, now with driver r8169, and 
> > > every
> > > other time I try to bring up the interface using DHCP I get pfinet 
> > > crashing.
> > > It says it creates a core dump file, but I am unable to find one.
> > 
> > You can as well just attach a gdb to get to observe the crash.
> 
> I attach the backtrace of pfinet crashing when trying to bring up the device.
> 
> parse_interface_copy_device (src=<optimized out>, dst=<optimized out>) at 
> ../../pfinet/options.c:157
> warning: 157  ../../pfinet/options.c: No such file or directory
> #0  parse_interface_copy_device (src=<optimized out>, dst=<optimized out>) at 
> ../../pfinet/options.c:157

Ah, that loop is bogus when idev->addr_list is NULL, indeed. I have
applied the attached patch.

Samuel
commit a722d97d341883111c8b65e50a658d5632b493a6
Author: Samuel Thibault <[email protected]>
Date:   Thu Jul 16 01:20:36 2026 +0200

    pfinet: Fix crash on missing address on interface
    
    In case idev->addr_list is NULL

diff --git a/pfinet/options.c b/pfinet/options.c
index fd88ea6ba..5bb822531 100644
--- a/pfinet/options.c
+++ b/pfinet/options.c
@@ -143,7 +143,7 @@ parse_interface_copy_device(struct device *src,
 
   if (idev)
     {
-      struct inet6_ifaddr *ifa = idev->addr_list;
+      struct inet6_ifaddr *ifa;
 
       /* Look for IPv6 default router and add it to the interface,
        * if it belongs to it.
@@ -151,8 +151,9 @@ parse_interface_copy_device(struct device *src,
       struct rt6_info *rt6i = ipv6_get_dflt_router();
       if (rt6i->rt6i_dev == src)
        memcpy (&dst->gateway6, &rt6i->rt6i_gateway, sizeof (struct in6_addr));
+
       /* Search for global address and set it in dst */
-      do
+      for (ifa = idev->addr_list; ifa; ifa = ifa->if_next)
        {
          if (!IN6_IS_ADDR_LINKLOCAL (&ifa->addr))
            {
@@ -160,7 +161,6 @@ parse_interface_copy_device(struct device *src,
              break;
            }
        }
-      while ((ifa = ifa->if_next));
     }
 #endif
 }

Reply via email to