** Description changed:

+ [Triage Notes]
+ 
+ The proposed fix for this bug in libnl3 caused a regression in trusty-
+ proposed, tracked in bug 1511735. The regression is caused by a latent
+ bug in Network Manager. We expect to fix this by landing a fix for the
+ bug in Network Manager in trusty-updates at the same time as this fix.
+ 
  [Impact]
  
-  * Applications in Trusty using libnl-3-200 which frequently open and
-    close netlink sockets can easily fail when attempting to bind the
-    local socket.  The problem happens when libnl choose a port id
-    already used by another application and subsequently libnl fails
-    instead of trying another port id.
-    
-    The original bug was discovered when attempting to start a virtual
-    machine under libvirt, which is a user of this library.
+  * Applications in Trusty using libnl-3-200 which frequently open and
+    close netlink sockets can easily fail when attempting to bind the
+    local socket.  The problem happens when libnl choose a port id
+    already used by another application and subsequently libnl fails
+    instead of trying another port id.
  
-  * Backporting fixes from upstream release fixes a real bug in the
-    current version of the library in Trusty.  The alternative is for all
-    applications to manually manage their local port allocation, or as
-    upstream has accepted allowing libnl to attempt to try for other
-    local ports.
+    The original bug was discovered when attempting to start a virtual
+    machine under libvirt, which is a user of this library.
  
-  * All patches applied are already accepted upstream and newer Ubuntu
-    releases are not affected.
+  * Backporting fixes from upstream release fixes a real bug in the
+    current version of the library in Trusty.  The alternative is for all
+    applications to manually manage their local port allocation, or as
+    upstream has accepted allowing libnl to attempt to try for other
+    local ports.
+ 
+  * All patches applied are already accepted upstream and newer Ubuntu
+    releases are not affected.
  
  [Test Case]
  
-  * On a Trusty 14.04 system
-    1. sudo apt-get install libnl-3-200 libnl-3-dev libnl-3-dev \
-                            libnl-genl-3-dev libnl-route-3-200 \
-                            make gcc build-essential libnl1
-    2. download and unpack attachment: lp_1511735_test.tar
-    3. Run testcases:
+  * On a Trusty 14.04 system
+    1. sudo apt-get install libnl-3-200 libnl-3-dev libnl-3-dev \
+                            libnl-genl-3-dev libnl-route-3-200 \
+                            make gcc build-essential libnl1
+    2. download and unpack attachment: lp_1511735_test.tar
+    3. Run testcases:
  
-     % if ./example.sh; then echo "libnl OK"; else echo "libnl FAILED"; fi 
-     gcc -o example -I/usr/include/libnl3 example.c -lnl-3 -lnl-genl-3
-     set manually the local port to 6975 (pid: 6974)
-     local port has been set by the libnl to 6975 (pid: 6975)
-     ERROR: genl_connect(): Object exists (local port: 6975, pid: 6975)
-     libnl FAILED
-     % python libnl3-test-rh1249158.py a b c d
-     ulimit(NOFILE) = (2048, 4096)
-     Test: PID=6978
-     TEST (a)...
-     Traceback (most recent call last):
-       File "libnl3-test-rh1249158.py", line 226, in <module>
-         locals()["TEST_" + arg]()
-       File "libnl3-test-rh1249158.py", line 140, in TEST_a
-         sk = nl_get_socket()
-       File "libnl3-test-rh1249158.py", line 115, in nl_get_socket
-         raise IOError(-err, _nl_geterror())
-     OSError: [Errno 6] b'Unspecific failure'
+     % if ./example.sh; then echo "libnl OK"; else echo "libnl FAILED"; fi
+     gcc -o example -I/usr/include/libnl3 example.c -lnl-3 -lnl-genl-3
+     set manually the local port to 6975 (pid: 6974)
+     local port has been set by the libnl to 6975 (pid: 6975)
+     ERROR: genl_connect(): Object exists (local port: 6975, pid: 6975)
+     libnl FAILED
+     % python libnl3-test-rh1249158.py a b c d
+     ulimit(NOFILE) = (2048, 4096)
+     Test: PID=6978
+     TEST (a)...
+     Traceback (most recent call last):
+       File "libnl3-test-rh1249158.py", line 226, in <module>
+         locals()["TEST_" + arg]()
+       File "libnl3-test-rh1249158.py", line 140, in TEST_a
+         sk = nl_get_socket()
+       File "libnl3-test-rh1249158.py", line 115, in nl_get_socket
+         raise IOError(-err, _nl_geterror())
+     OSError: [Errno 6] b'Unspecific failure'
  
-    4. After applying the updated packages:
+    4. After applying the updated packages:
  
-     % if ./example.sh; then echo "libnl OK"; else echo "libnl FAILED"; fi
-     gcc -o example -I/usr/include/libnl3 example.c -lnl-3 -lnl-genl-3
-     set manually the local port to 11295 (pid: 11294)
-     local port has been set by the libnl to 2894081055 (pid: 11295)
-     libnl OK
-     % python libnl3-test-rh1249158.py a b c d
-     ulimit(NOFILE) = (2048, 4096)
-     Test: PID=11296
-     TEST (a)...
-     ...done
-     TEST (b)...
-     ...done
-     TEST (c)...
-     ...done
-     TEST (d)...
-     ...done
-       
- [Regression Potential] 
+     % if ./example.sh; then echo "libnl OK"; else echo "libnl FAILED"; fi
+     gcc -o example -I/usr/include/libnl3 example.c -lnl-3 -lnl-genl-3
+     set manually the local port to 11295 (pid: 11294)
+     local port has been set by the libnl to 2894081055 (pid: 11295)
+     libnl OK
+     % python libnl3-test-rh1249158.py a b c d
+     ulimit(NOFILE) = (2048, 4096)
+     Test: PID=11296
+     TEST (a)...
+     ...done
+     TEST (b)...
+     ...done
+     TEST (c)...
+     ...done
+     TEST (d)...
+     ...done
  
-  * There are quite a few high profile packages that depend on this package,
-    notably libvirt and network-manager.  The complete list is here:
+ [Regression Potential]
  
-    # on Trusty
-     % apt-rdepends -r libnl-3-200 | head -n 33
-     libnl-3-200
-       Reverse Depends: batctl (>= 2013.4.0-2)
-       Reverse Depends: bmon (>= 1:3.1-1)
-       Reverse Depends: crda (>= 1.1.2-1ubuntu2)
-       Reverse Depends: hostapd (>= 1:2.1-0ubuntu1)
-       Reverse Depends: ipvsadm (>= 1:1.26-2ubuntu1)
-       Reverse Depends: iw (>= 3.4-1)
-       Reverse Depends: keepalived (>= 1:1.2.7-1ubuntu1)
-       Reverse Depends: kismet (>= 2013.03.R1b-3)
-       Reverse Depends: knemo (>= 0.7.6-2)
-       Reverse Depends: libfsobasics3 (>= 0.12.0-4)
-       Reverse Depends: libnetcf1 (>= 1:0.2.3-4ubuntu1)
-       Reverse Depends: libnl-3-200-dbg (= 3.2.21-1)
-       Reverse Depends: libnl-3-dev (= 3.2.21-1)
-       Reverse Depends: libnl-cli-3-200 (= 3.2.21-1)
-       Reverse Depends: libnl-genl-3-200 (= 3.2.21-1)
-       Reverse Depends: libnl-nf-3-200 (= 3.2.21-1)
-       Reverse Depends: libnl-route-3-200 (= 3.2.21-1)
-       Reverse Depends: libnl-utils (>= 3.2.21-1)
-       Reverse Depends: libnss-gw-name (>= 0.3-2)
-       Reverse Depends: libvirt-bin (>= 1.2.2-0ubuntu13)
-       Reverse Depends: libvirt0 (>= 1.2.2-0ubuntu13)
-       Reverse Depends: lowpan-test-tools (>= 0.3-1)
-       Reverse Depends: lowpan-tools (>= 0.3-1)
-       Reverse Depends: neard (>= 0.11-1)
-       Reverse Depends: neard-tools (>= 0.11-1)
-       Reverse Depends: network-manager (>= 0.9.8.8-0ubuntu7)
-       Reverse Depends: ntrack-module-libnl-0 (>= 016-1.2ubuntu2)
-       Reverse Depends: plainbox-provider-resource-generic (>= 0.3-1)
-       Reverse Depends: powertop (>= 2.5-1ubuntu1)
-       Reverse Depends: quota (>= 4.01-3)
-       Reverse Depends: sssd-common (>= 1.11.5-1ubuntu3)
-       Reverse Depends: wpasupplicant (>= 2.1-0ubuntu1)
+  * There are quite a few high profile packages that depend on this package,
+    notably libvirt and network-manager.  The complete list is here:
  
-   
-  * This patch does change the default behavoir when asking libnl-3-200
-    to generate local ports.  Applications (or libraries) may already
-    have retry code in-place and it's not clear if those applications
-    would break.
+    # on Trusty
+     % apt-rdepends -r libnl-3-200 | head -n 33
+     libnl-3-200
+       Reverse Depends: batctl (>= 2013.4.0-2)
+       Reverse Depends: bmon (>= 1:3.1-1)
+       Reverse Depends: crda (>= 1.1.2-1ubuntu2)
+       Reverse Depends: hostapd (>= 1:2.1-0ubuntu1)
+       Reverse Depends: ipvsadm (>= 1:1.26-2ubuntu1)
+       Reverse Depends: iw (>= 3.4-1)
+       Reverse Depends: keepalived (>= 1:1.2.7-1ubuntu1)
+       Reverse Depends: kismet (>= 2013.03.R1b-3)
+       Reverse Depends: knemo (>= 0.7.6-2)
+       Reverse Depends: libfsobasics3 (>= 0.12.0-4)
+       Reverse Depends: libnetcf1 (>= 1:0.2.3-4ubuntu1)
+       Reverse Depends: libnl-3-200-dbg (= 3.2.21-1)
+       Reverse Depends: libnl-3-dev (= 3.2.21-1)
+       Reverse Depends: libnl-cli-3-200 (= 3.2.21-1)
+       Reverse Depends: libnl-genl-3-200 (= 3.2.21-1)
+       Reverse Depends: libnl-nf-3-200 (= 3.2.21-1)
+       Reverse Depends: libnl-route-3-200 (= 3.2.21-1)
+       Reverse Depends: libnl-utils (>= 3.2.21-1)
+       Reverse Depends: libnss-gw-name (>= 0.3-2)
+       Reverse Depends: libvirt-bin (>= 1.2.2-0ubuntu13)
+       Reverse Depends: libvirt0 (>= 1.2.2-0ubuntu13)
+       Reverse Depends: lowpan-test-tools (>= 0.3-1)
+       Reverse Depends: lowpan-tools (>= 0.3-1)
+       Reverse Depends: neard (>= 0.11-1)
+       Reverse Depends: neard-tools (>= 0.11-1)
+       Reverse Depends: network-manager (>= 0.9.8.8-0ubuntu7)
+       Reverse Depends: ntrack-module-libnl-0 (>= 016-1.2ubuntu2)
+       Reverse Depends: plainbox-provider-resource-generic (>= 0.3-1)
+       Reverse Depends: powertop (>= 2.5-1ubuntu1)
+       Reverse Depends: quota (>= 4.01-3)
+       Reverse Depends: sssd-common (>= 1.11.5-1ubuntu3)
+       Reverse Depends: wpasupplicant (>= 2.1-0ubuntu1)
  
+  * This patch does change the default behavoir when asking libnl-3-200
+    to generate local ports.  Applications (or libraries) may already
+    have retry code in-place and it's not clear if those applications
+    would break.
  
  [Original Description]
  The following upstream patches are needed in order to avoid failures when 
binding a netlink socket:
  
  1f734a8f892a lib/socket: randomize the generated local port
  http://git.infradead.org/users/tgr/libnl.git/commitdiff/1f734a8f892a
  
  4dd5fdd0af2c lib/socket: retry generate local port in nl_connect on ADDRINUSE
  http://git.infradead.org/users/tgr/libnl.git/commitdiff/4dd5fdd0af2c
  
  027157898708 lib/socket: don't fail if no more local ports can be assigned in 
nl_socket_alloc
  http://git.infradead.org/users/tgr/libnl.git/commitdiff/027157898708
  
  0fd510b3673f lib/socket: use proper typed constant UINT32_MAX for uint32_t 
typed port
  http://git.infradead.org/users/tgr/libnl.git/commitdiff/0fd510b3673f
  
  Without these patches, an application which opens and closes regularly
  netlink sockets can easily fails to bind them.

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

Title:
  libnl: fail to bind() netlink sockets

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libnl3/+bug/1511735/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to