WiFi being detected as ethernet when race condition on renaming for persistent name

Bug #1647283 reported by Ying-Chun Liu on 2016-12-05
26
This bug affects 3 people
Affects Status Importance Assigned to Milestone
HWE Next
Undecided
Unassigned
NetworkManager
Fix Released
Medium
OEM Priority Project
Status tracked in Xenial
Xenial
Medium
Shih-Yuan Lee
network-manager (Ubuntu)
High
Aron Xu
Xenial
Undecided
Unassigned

Bug Description

[Impact]

 * It is a very bad user experience that the WiFi device is recognized as an Ethernet device making Ubuntu users unable to connect to WiFi network.

[Test Case]

 * Find some laptop that can reduplicate this issue.
 * Keep rebooting the system until you see this issue.
 * Usually this issue can be reduplicated within 10 reboot cycles on the right laptop.

[Regression Potential]

 * No trivial regression.

[Other Info]

 * network-manager_1.2.6-0ubuntu0.16.04.2.debdiff (comment #8) is for xenial

[Original Bug Description]

Forwarded https://bugzilla.gnome.org/show_bug.cgi?id=775613

Version: NetworkManager 1.4.2

This bug happens after power-on with probability about 1/50.
That means we need to reboot about 50 times to get into the buggy situation.
"nmcli d" shows the device type is ethernet:

DEVICE TYPE STATE CONNECTION
wlp1s0 ethernet unavailable --
lo loopback unmanaged --

The bug starts from a race condition. But it is not the root cause.
I've also attach 2 logs. One is in good situation. Another is in bad situation.
This log is generated by applying a "log patch" to network-manager 1.4.2 so we can see more stuff.

In the bad situation. The bug starts with race condition. But the race condition is not the root cause. The race condition is:
 * During the renaming from "wlan0" to "wlp1s0". "wlan0" disappeared.
 * Inside the NM, it is still using "wlan0" in "_linktype_get_type()".
 * Since /sys/class/net/wlan0/uevent is disappeared. so the type matching failed in _linktype_get_type().
 * Also wifi_utils_is_wifi() failed to because /sys/class/net/wlan0 disappeared.
 * And finally, devtype and kind are both NULL, so it returns NM_LINK_TYPE_ETHERNET for wlan0.

Later, wlan0 is renamed to wlp1s0, and it seems to me that the Object inherit the type so it is still type ethernet.
But from the log, I saw _linktype_get_type() is called several times later and return the correct type (wifi). But just, "nmcli d" still shows type ethernet.

I'm wondering if we are missing to update the type in the Object created after renaming and re-detecting the type.

fix need landing LP: #1645698

Ying-Chun Liu (paulliu) wrote :
tags: added: originate-from-1639117 somerville
Changed in network-manager:
importance: Unknown → Medium
status: Unknown → Confirmed
Chih-Hsyuan Ho (chih) on 2016-12-07
Changed in oem-priority:
importance: Undecided → Critical
milestone: none → ubuntu12.04.4
milestone: ubuntu12.04.4 → none
Changed in network-manager:
status: Confirmed → Fix Released
Changed in network-manager (Ubuntu):
assignee: nobody → Aron Xu (happyaron)
Aron Xu (happyaron) wrote :

The fix is included in upstream 1.4.4 release, an update will be pushed soon.

Changed in network-manager (Ubuntu):
importance: Undecided → High
status: New → Triaged
Chih-Hsyuan Ho (chih) wrote :

@Aron, may we know if the patch suggested in comment#2 already in the NM(1.2) to be used in Xenial? Thanks.

Aron Xu (happyaron) wrote :

Hi chih, the patch can't apply cleanly in nm-1.2, needs some porting.

Cyrus Lien (cyruslien) on 2017-02-07
Changed in oem-priority:
status: New → Triaged
assignee: nobody → Alex Tu (alextu)
Alex Tu (alextu) on 2017-02-08
tags: added: needed-by-1655901
description: updated
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package network-manager - 1.4.4-1ubuntu1

---------------
network-manager (1.4.4-1ubuntu1) zesty; urgency=medium

  * Rebase to upstream 1.4.4 release, base on Debian 1.4.4-1 (LP: #1647283)
  * Refresh patches, dropping ones that are included upstream:
    - manager-fix-state-transition-on-resuming-from-sleep.patch
    - wifi-notify-the-AccessPoint-change-after-an-AP-is-removed.patch
  * Updated patch:
    - Ignore-p2p0-wifi-devices-from-android.patch:
      LOGD_HW is now LOGD_PLATFORM

 -- Aron Xu <email address hidden> Thu, 16 Feb 2017 18:35:11 +0800

Changed in network-manager (Ubuntu):
status: Triaged → Fix Released
Changed in hwe-next:
status: New → Fix Released
Alex Tu (alextu) on 2017-04-18
Changed in oem-priority:
assignee: Alex Tu (alextu) → Shih-Yuan Lee (fourdollars)
Changed in oem-priority:
status: Triaged → Fix Released
Changed in oem-priority:
status: Fix Released → Confirmed
Changed in oem-priority:
status: Confirmed → In Progress
Shih-Yuan Lee (fourdollars) wrote :

Hi, I can still reduplicate this issue on Ubuntu 16.04.
Could someone help to nominate this for xenial series?

Shih-Yuan Lee (fourdollars) wrote :

This debdiff is for xenial.

# required by platform-add-a-new-function-nmp_utils_open_sysctl.patch, platform-refactor-nmp_utils_sysctl_open_netdir.patch and all-use-O_CLOEXEC-for-file-descriptors.patch.
core-add-utils-for-file-handling.patch

# required by platform-wifi-use-nmp_utils_open_sysctl-to-check-if-.patch.
platform-refactor-wifi_utils_is_wifi-not-to-pass-sys.patch

# The following patches (backported from 1.4) are directly from https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=ea944d5b4c5eac192a95cf0397459df24fee39cf
shared-add-nm_auto_close-and-nm_auto_fclose.patch
device-wwan-use-nm_auto_close-instead-of-gs_fd_close.patch
platform-add-a-new-function-nmp_utils_open_sysctl.patch
platform-wifi-use-nmp_utils_open_sysctl-to-check-if-.patch
platform-refactor-nmp_utils_sysctl_open_netdir.patch
all-use-O_CLOEXEC-for-file-descriptors.patch

Some header files are changed such as src/nm-core-utils.h, src/platform/wifi/wifi-utils.h, shared/nm-utils/nm-macros-internal.h and src/platform/nm-platform-utils.h.
But only src/platform/wifi/wifi-utils.h changed the interface a little bit while other only added some new interfaces.

src/platform/wifi/wifi-utils.h's change is like the following.

# from platform-refactor-wifi_utils_is_wifi-not-to-pass-sys.patch
-gboolean wifi_utils_is_wifi (const char *iface, const char *sysfs_path);
+gboolean wifi_utils_is_wifi (const char *iface);

# from platform-wifi-use-nmp_utils_open_sysctl-to-check-if-.patch
-gboolean wifi_utils_is_wifi (const char *iface);
+gboolean wifi_utils_is_wifi (int ifindex, const char *ifname);

However these header files are just internal and they should not affect outside.

description: updated
Shih-Yuan Lee (fourdollars) wrote :

Sorry. I can still reduplicate this issue after applying the patch-set from comment #8.

Changed in oem-priority:
importance: Critical → High
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.