** Description changed:

  [Impact]
+ When a nic has a long enough name such that there is no space between the 
name and the ":" in /proc/net/igmp, ip maddr show dev <nic> will miss the IPV4 
addresses which is otherwise shown with "ip maddr show".
  
-  * An explanation of the effects of the bug on users and
+ This is inconsistent behavior and can break scripts and tests, as shown
+ in this bug's original description.
  
-  * justification for backporting the fix to the stable release.
- 
-  * In addition, it is helpful, but not required, to include an
-    explanation of how the upload fixes this bug.
+ Three patches from upstream were taken to fix this bug, and they were used 
individually instead of being merged into one single patch so it's easier to 
track and recognize authorship:
+ 
https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git/commit/?id=530903dd9003492edb0714e937ad4a5d1219e376
+ 
https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git/commit/?id=b48a1161f5f9b6a0cda399a224bbbf72eba4a5c6
+ 
https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git/commit/?id=21503ed2af233ffe795926f6641ac84ec1b15bf9
  
  [Test Case]
+ * deploy the ubuntu release under test. Please use bare metal or a VM instead 
of containers, because the ip tool parses a file in /proc. Make sure iproute2 
is installed:
+ sudo apt install iproute2
  
-  * detailed instructions how to reproduce the bug
+ * Run these commands to setup a dummy interface with a long name and an
+ IPv4 address. Please change the address if it conflicts with a real
+ network you might have available on that machine:
  
-  * these should allow someone who is not familiar with the affected
-    package to reproduce the bug and verify that the updated package fixes
-    the problem.
+ sudo ip link add dummylongnic0 type dummy
+ sudo ip addr add 192.168.199.10/24 dev dummylongnic0
+ sudo ip link set dev dummylongnic0 up
+ 
+ * Compare the output of these two commands with regards to the dummylongnic0 
interface:
+ sudo ip maddr show
+ sudo ip maddr show dev dummylongnic0
+ 
+ * With the buggy iproute2 package installed, the more specific output "ip 
maddr show dev dummylongnic0" should lack the "inet 224.0.0.1" line:
+ ip maddr show dev dummylongnic0
+ 2:    dummylongnic0
+       link  33:33:00:00:00:01
+       link  01:00:5e:00:00:01
+       inet6 ff02::1
+       inet6 ff01::1
+ 
+ 
+ Whereas the less specific command, which lists all interfaces, will have it 
listed for dummylongnic0:
+ 2:    dummylongnic0
+       link  33:33:00:00:00:01
+       link  01:00:5e:00:00:01
+       inet  224.0.0.1
+       inet6 ff02::1
+       inet6 ff01::1
+ 
+ 
+ * With the fixed iproute2 package, all dummylongnic0 addresses will be 
present in both outputs.
+ 
  
  [Regression Potential]
- 
-  * discussion of how regressions are most likely to manifest as a result
- of this change.
- 
-  * It is assumed that any SRU candidate patch is well-tested before
-    upload and has a low overall risk of regression, but it's important
-    to make the effort to think about what ''could'' happen in the
-    event of a regression.
- 
-  * This both shows the SRU team that the risks have been considered,
-    and provides guidance to testers in regression-testing the SRU.
+ In the end, the ip tool is parsing a text file produced by the kernel. As 
most parsing done in C, it's pretty low level and sensitive to changes in the 
file it's reading.
  
  [Other Info]
-  
-  * Anything else you think is useful to include
-  * Anticipate questions from users, SRU, +1 maintenance, security teams and 
the Technical Board
-  * and address these questions in advance
- 
+ I suggest to conduct the tests in VMs instead of containers (LXD) because the 
ip maddr command parses /proc/net/igmp, which is produced by the kernel. If you 
use a container, then it's the host's kernel that will be providing that file 
and it might not be the same as with the native kernel of that particular 
ubuntu release.
  
  --- Original description ---
  Attn. Canonical:  Please make sure that the existing iproute2 package gets 
updated with the two referenced patches as the missing information is impacting 
our standard test suites.
  
  Thanks.
  
  == Comment: #0 - Alton L. Pundt - 2017-03-29 14:37:57 ==
  ---Problem Description---
  ip maddr show and ip maddr show dev enP20p96s0 show different data
  
  ---uname output---
  Linux roselp1 4.10.0-14-generic #16-Ubuntu SMP Fri Mar 17 15:19:05 UTC 2017 
ppc64le ppc64le ppc64le GNU/Linux
  
  Machine Type = 8286-42A
  
  ---Steps to Reproduce---
   run these at command line:
  root@roselp1:~# ip maddr show
  ...
  10:     enP20p96s0
          link  33:33:00:00:00:01
          link  01:00:5e:00:00:01
          link  33:33:ff:6d:d0:d0
          link  01:00:5e:00:00:fc
          link  33:33:00:01:00:03
          inet  224.0.0.252
          inet  224.0.0.1
          inet6 ff02::1:3
          inet6 ff02::1:ff6d:d0d0 users 3
          inet6 ff02::1
          inet6 ff01::1
  ...
  
  root@roselp1:~# ip maddr show dev enP20p96s0
  10:     enP20p96s0
          link  33:33:00:00:00:01
          link  01:00:5e:00:00:01
          link  33:33:ff:6d:d0:d0
          link  01:00:5e:00:00:fc
          link  33:33:00:01:00:03
          inet6 ff02::1:3
          inet6 ff02::1:ff6d:d0d0 users 3
          inet6 ff02::1
          inet6 ff01::1
  
  == Comment: #12 - David Z. Dai  - 2017-11-13 15:07:32 ==
  
  I found upstream already had patches that fix this problem:
  
  1) https://www.spinics.net/lists/netdev/msg415009.html
  commit 530903dd9003492edb0714e937ad4a5d1219e376
  Author: Petr Vorel <pvo...@suse.cz>
  Date:   Tue Jan 17 00:25:50 2017 +0100
  
      ip: fix igmp parsing when iface is long
  
      Entries with long vhost names in /proc/net/igmp have no whitespace
      between name and colon, so sscanf() adds it to vhost and
      'ip maddr show iface' doesn't include inet result.
  
      Signed-off-by: Petr Vorel <pvo...@suse.cz>
  
  2) https://www.spinics.net/lists/netdev/msg461479.html
  commit 21503ed2af233ffe795926f6641ac84ec1b15bf9
  Author: Michal Kubecek <mkube...@suse.cz>
  Date:   Thu Oct 19 10:21:08 2017 +0200
  
      ip maddr: fix filtering by device
  
      Commit 530903dd9003 ("ip: fix igmp parsing when iface is long") uses
      variable len to keep trailing colon from interface name comparison.  This
      variable is local to loop body but we set it in one pass and use it in
      following one(s) so that we are actually using (pseudo)random length for
      comparison. This became apparent since commit b48a1161f5f9 ("ipmaddr: 
Avoid
      accessing uninitialized data") always initializes len to zero so that the
      name comparison is always true. As a result, "ip maddr show dev eth0" 
shows
      IPv4 multicast addresses for all interfaces.
  
      Instead of keeping the length, let's simply replace the trailing colon 
with
      a null byte. The bonus is that we get correct interface name in ma.name.
  
      Fixes: 530903dd9003 ("ip: fix igmp parsing when iface is long")
      Signed-off-by: Michal Kubecek <mkube...@suse.cz>
      Acked-by: Phil Sutter <p...@nwl.cc>
      Acked-by: Petr Vorel <pvo...@suse.cz>
  
  The fix is in the same place, but different way.
  This is the current implementation In ip/ipmaddr.c file:
                  struct ma_info *ma;
  
                  if (buf[0] != '\t') {
                          size_t len;
  
                          sscanf(buf, "%d%s", &m.index, m.name);
                          len = strlen(m.name);
                          if (m.name[len - 1] == ':')
                                  m.name[len - 1] = '\0';
                          continue;
                  }
  
  The existing "ip" command that shows the problem:
  [root@coral-sriov-host1 ip]# /usr/sbin/ip maddr show dev enP1p12s0f0   /* <-- 
We do NOT see the IPv4 maddr */
  2:      enP1p12s0f0
          link  01:00:5e:00:00:01
          inet6 ff02::1
          inet6 ff01::1
  
  I clone the latest "ip" utility from upstream to the same test box.
  [root@coral-sriov-host1 git_iproute2]# git clone 
https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
  
  I build the "ip" utility on same test box, which has the above 2 patches
  included.
  
  [root@coral-sriov-host1 ip]# /root/git_iproute2/iproute2/ip/ip maddr show dev 
enP1p12s0f0  /* <--- shows correct IPv4 maddr */
  2:      enP1p12s0f0
          link  01:00:5e:00:00:01
          inet  224.0.0.1    /* <--- */
          inet6 ff02::1
          inet6 ff01::1

-- 
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to iproute2 in Ubuntu.
https://bugs.launchpad.net/bugs/1732032

Title:
  ip maddr show and ip maddr show dev enP20p96s0 show different data

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-power-systems/+bug/1732032/+subscriptions

-- 
Ubuntu-server-bugs mailing list
Ubuntu-server-bugs@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs

Reply via email to