← Back to team overview

desktop-packages team mailing list archive

[Bug 1545302] Re: wpa-roam broken by fix for ifupdown #1337873

 

My configuration:

/etc/network/interfaces
auto wlan0
iface wlan0 inet manual
    wpa-driver wext
    wpa-roam /etc/wpa_supplicant/wpa.conf
    wpa-roam-default-iface dhcp
iface dhcp inet dhcp
    dns-nameservers 8.8.8.8 8.8.4.4
iface dhcp_dns

/etc/wpa_supplicant/wpa.conf
network={
    ssid="x"
    priority=10
    key_mgmt=WPA-PSK
    psk="..."
    id_str="dhcp_dns"
}
network={
    ssid="y"
    priority=9
    key_mgmt=WPA-PSK
    psk="..."
}

After connecting to either the x or y networks, wpa_supplicant calls
`wpa_action connect` which calls `ifup wlan0=dhcp_dns` or `ifup
wlan0=dhcp`, which fails with "ifup: recursion detected for parent
interface wlan0 in post-up phase".  Therefore, dhclient is never run, so
wlan0 never gets an IP address.

Note that the wpa_supplicant daemon is started by the /etc/network/if-
up.d/wpasupplicant script, and it inherits the environment from `ifup
wlan0` (including the environment variable used to detect recursion).
`wpa_action connect` then inherits the environment from wpa_supplicant,
and `ifup wlan0=dhcp` inherits it from wpa_action, hence the error from
ifup.

I understand that this variable is meant to avoid certain race
conditions, but I don't believe the type of race condition reported in
bug #1337873 is applicable to this situation.  Because wpa_supplicant is
started by ifup itself (and not a boot script), there is no way for the
`ifup wlan0` and `ifup wlan0=dhcp` to be called out of order, so there
is no chance of a race condition.  However, maybe I'm missing something
here.  Could you explain how the wpa-roam implementation could play
along with ifupdown given that it is started by ifup itself and needs to
call ifup to reconfigure the interface?

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to wpa in Ubuntu.
https://bugs.launchpad.net/bugs/1545302

Title:
  wpa-roam broken by fix for ifupdown #1337873

Status in wpa package in Ubuntu:
  Confirmed

Bug description:
  The following versions of ifupdown introduced a recursion check using "IFUPDOWN_<interface>" environment variables along with a new locking mechanism for ifup (see #1337873):
  0.7.47.2ubuntu4.2 (in Trusty)
  0.7.54ubuntu1.1 (in Wily)
  0.7.54ubuntu2 (in Xenial)

  This recursion check breaks the wpa-roam feature of wpasupplicant,
  preventing it from loading the logical interface specified by id_str
  after associating with an AP.  Specifically, after upgrading to one of
  the above ifupdown versions, the '/sbin/ifup -v --force
  "$WPA_IFACE=$WPA_LOGICAL_IFACE"' command run by wpa_action in
  functions.sh fails with an "ifup: recursion detected for parent
  interface wlan0 in post-up phase" error.

  To fix the issue, functions.sh needs to run `unset
  "IFDOWN_$WPA_IFACE"` before calling /sbin/ifup to prevent ifup from
  detecting the recursion.  The attached patch implements this change.

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


References