[lxc-users] race condition causing lxc-user-nic failures?

Forest forestcode at ixio.org
Thu Jun 13 22:43:20 UTC 2019


I have a script that launches a bunch of children in their own namespaces,
and uses lxc-user-nic to attach a veth in each one to lxcbr0.

lxc-user-nic sometimes fails with the following output:

cmd/lxc_user_nic.c: 937: lxc_secure_rename_in_ns: Error -1 renaming netdev
vethP73QDAp to eth%d in container
cmd/lxc_user_nic.c: 1304: main: Failed to rename the link

When I sleep for 0.1 seconds before running lxc-user-nic against each
newly-created background process, the failures go away. Looks like a race
condition of some kind.

Can someone help me understand what is causing the failure, and whether it
is a bug or can be avoided with something more reliable than a sleep?

Unfortunately, the "Error -1" text is not helpful, due to inconsistent error
handling in lxc's network.c. The -1 value might represent EPERM, or might
indicate a netlink_transaction() failure for some reason other than EPERM,
since errno never gets captured/reported in that case.

$ lsb_release -sd
Ubuntu 18.04.2 LTS
$ uname -mr
4.15.0-51-generic x86_64
$ dpkg-query --show lxc1
lxc1	3.0.3-0ubuntu1~18.04.1

This script often reproduces the error (on my system) when run with an
argument of "20" (meaning launch 20 children).  It requires the appropriate
entry in /etc/lxc/lxc-usernet, of course.

#!/bin/sh
LXCUSERNIC=/usr/lib/$(uname -p)-linux-gnu/lxc/lxc-user-nic
count="${1:-1}"  # argv[1] indicates child count (default 1)
while [ "$count" -gt 0 ]; do
  unshare --map-root-user --net sh -c "sleep 1" &
  #sleep .1  # Uncomment to avoid lxc-user-nic failure
  "$LXCUSERNIC" create _ _ "$!" veth lxcbr0
  count=$((count - 1))
done


More information about the lxc-users mailing list