[Bug 1884248] Re: [SRU] networkd-dispatcher gives corrupted information

Lukas Märdian 1884248 at bugs.launchpad.net
Wed Jul 14 07:19:54 UTC 2021


This bug does not happen for Bionic, as the networkctl output was only
changed in systemd v244 while Bionic is on v237.

** Changed in: networkd-dispatcher (Ubuntu Bionic)
       Status: Confirmed => Invalid

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to networkd-dispatcher in Ubuntu.
https://bugs.launchpad.net/bugs/1884248

Title:
  [SRU] networkd-dispatcher gives corrupted information

Status in networkd-dispatcher package in Ubuntu:
  Fix Released
Status in networkd-dispatcher source package in Bionic:
  Invalid
Status in networkd-dispatcher source package in Focal:
  In Progress
Status in networkd-dispatcher source package in Groovy:
  Won't Fix
Status in networkd-dispatcher source package in Hirsute:
  Fix Committed
Status in networkd-dispatcher source package in Impish:
  Fix Released

Bug description:
  [Impact]

   * Due to changes in systemd's networkctl output networkd-dispatcher 2.0 contains a bug, producing invalid keys/values inside the JSON it provides to its scripts
   * e.g.: json={"A": ["ress: 119.224.106.22 (DHCP4)"], ...}
   * Therefore the scripts cannot access the relevant network configuration state

  
  [Test Plan]

   * Run systemd v244+ (e.g. in a LXD container)
   * Make sure you got an IP address via DHCP:
   * # networkctl status eth0
  ● 120: eth0                                                            
               Link File: /usr/lib/systemd/network/99-default.link       
            Network File: /run/systemd/network/10-netplan-eth0.network   
                    Type: ether                                          
                   State: routable (configured)
                  Driver: veth                                           
              HW Address: 00:16:3e:0b:d7:74 (Xensource, Inc.)            
                     MTU: 1500 (min: 68, max: 65535)                     
    Queue Length (Tx/Rx): 1/1                                            
        Auto negotiation: no                                             
                   Speed: 10Gbps                                         
                  Duplex: full                                           
                    Port: tp                                             
                 Address: 10.238.94.146 (DHCP4)                          
                          fd42:7213:f20e:bd74:216:3eff:fe0b:d774         
                          fe80::216:3eff:fe0b:d774                       
                 Gateway: 10.238.94.1 (Xensource, Inc.)                  
                          fe80::216:3eff:fe0f:ee29 (Xensource, Inc.)     
                     DNS: 10.238.94.1                                    
                          fd42:7213:f20e:bd74::1                         
                          fe80::216:3eff:fe0f:ee29                       
          Search Domains: lxd                                            
       Activation Policy: up          
   * # cat /etc/networkd-dispatcher/routable.d/00run.sh
  #!/bin/bash
  env > /tmp/out.log
   * chmod +x /etc/networkd-dispatcher/routable.d/00run.sh
   * # networkd-dispatcher --run-startup-triggers
   * cat /tmp/out.log
   * Check json= ENV to verify if it contains the correct IPv4 address (without "(DHCP4)" suffix).

  [Where problems could occur]

   * This was broken in 2.0 and the fix changes the behavior back to what was originally intended.
   * If people adopted to the broken environment variable, to somehow parse the information they need from the broken JSON, this change will most probably break their networkd-dispatcher scripts (again).

  
  [Other Info]
   
   * The upstream version 2.1 just fixes the parsing of current networkctl output (in addition to a few testing and documentation improvements)
   * The Debian revision -2 fixes the parsing of the "(DHCP4 ...)" suffix

  
  === Original description ===

  I just reinstalled my RPI3 router from Eoan to Focal but a lot of
  things about networkd broke. I'm not sure whether they are related or
  not.

  The first thing I noticed was, that I did not get my upstream DNS
  servers. I use a dispatcher script to extract the information from the
  json environment variable when my uplink becomes routable. Using a
  test script to dump the environment I found this:

  IP6_ADDRS=
  PWD=/
  json={"A": ["ress: 119.224.106.22 (DHCP4)"], "AdministrativeState": "configuring", "Auto negot": ["tion: yes", "peed: 100Mbps", "plex: full", "Port: mii"], "G": ["eway: 119.224.106.21", "DNS: 202.180.64.10", "202.180.64.11", ""], "HW A": ["ress: b8:27:eb:b6:a5:f4 (Raspberry Pi Foundation)", "MTU: 1500 (max: 65535)"], "InterfaceName": "wan", "Jun 20 00:01:49": ["mnus systemd-networkd[534]: wan: netdev ready", "mnus systemd-networkd[534]: wan: Link UP", "mnus systemd-networkd[534]: wan: Gained carrier"], "Jun 20 00:01:50": ["mnus systemd-networkd[534]: wan: Lost carrier"], "Jun 20 00:01:51": ["mnus systemd-networkd[534]: wan: Gained carrier"], "Jun 20 00:01:53": ["mnus systemd-networkd[534]: wan: DHCPv4 address 119.224.106.22/30 via 119.224.106.21"], "Lin": ["File: /usr/lib/systemd/network/99-default.link"], "Networ": ["File: /etc/systemd/network/07-wan.network", "Type: vlan", "tate: routable (configured)", "iver: 802.1Q VLAN Support"], "OperationalState": "routable", "Queue Length (": ["/Rx): 1/1"], "State": "routable (configuring)", "Type": "vlan"}
  AdministrativeState=configuring
  IFACE=wan
  LANG=en_NZ.UTF-8
  INVOCATION_ID=384cc7de4e8d45e48ecb2ecf3cb55508
  IP_ADDRS=
  ESSID=
  ADDR=
  NOTIFY_SOCKET=/run/systemd/notify
  SHLVL=1
  STATE=routable
  JOURNAL_STREAM=9:35403
  OperationalState=routable
  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  networkd_dispatcher_args=--run-startup-triggers

  Note that the script worked perfectly fine on Eoan.

  Also when I tried to get the dump above, I ran the following command after installing the test-script:
  ip link delete wan type vlan; systemctl restart systemd-networkd
  in order to force networkd to recreate and reconfigure my uplink interface. Doing this resulted in all connectivity with the router being lost (up- and downstream). After a restart, I found the following in the networkd journal indicating that networkd had in fact crashed.

  Jun 19 23:59:58 tumnus systemd-networkd[539]: wan: Link DOWN
  Jun 19 23:59:58 tumnus systemd-networkd[539]: wan: Lost carrier
  Jun 19 23:59:58 tumnus systemd-networkd[539]: wan: DHCP lease lost
  Jun 19 23:59:58 tumnus systemd[1]: Stopping Network Service...
  Jun 19 23:59:58 tumnus systemd[1]: systemd-networkd.service: Succeeded.
  Jun 19 23:59:58 tumnus systemd[1]: Stopped Network Service.
  Jun 19 23:59:58 tumnus systemd[1]: Starting Network Service...
  Jun 19 23:59:59 tumnus systemd-networkd[1986]: private: netdev ready
  Jun 19 23:59:59 tumnus systemd-networkd[1986]: Enumeration completed
  Jun 19 23:59:59 tumnus systemd[1]: Started Network Service.
  Jun 19 23:59:59 tumnus systemd-networkd[1986]: private: netdev exists, using existing without changing its parameters
  Jun 20 00:00:00 tumnus systemd[1]: systemd-networkd.service: Main process exited, code=dumped, status=11/SEGV
  Jun 20 00:00:00 tumnus systemd[1]: systemd-networkd.service: Failed with result 'core-dump'.
  Jun 20 00:00:00 tumnus systemd[1]: systemd-networkd.service: Scheduled restart job, restart counter is at 1.
  Jun 20 00:00:00 tumnus systemd[1]: Stopped Network Service.
  Jun 20 00:00:00 tumnus systemd[1]: Starting Network Service...
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: private: netdev ready
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: Enumeration completed
  Jun 20 00:00:01 tumnus systemd[1]: Started Network Service.
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: private: netdev exists, using existing without changing its parameters
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: wan: Link UP
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: wan: Gained carrier
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: private: Could not join netdev: Can not enslave a bridge to a bridge. Too many levels of symbolic links
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: private: Failed
  Jun 20 00:00:01 tumnus systemd-networkd[2034]: wan: DHCPv4 address 119.224.106.22/30 via 119.224.106.21
  Jun 20 00:01:22 tumnus systemd[1]: Stopping Network Service...
  Jun 20 00:01:22 tumnus systemd-networkd[2034]: wan: DHCP lease lost
  Jun 20 00:01:22 tumnus systemd[1]: systemd-networkd.service: Succeeded.
  Jun 20 00:01:22 tumnus systemd[1]: Stopped Network Service.
  -- Reboot --

  However, no crash file had been generated.
  The system is running systemd 245.4-4ubuntu3.1 and networkd-dispatcher 2.0.1-1.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/networkd-dispatcher/+bug/1884248/+subscriptions




More information about the foundations-bugs mailing list