Public bug reported:

Impact:

The wcn36xx driver in Xenial/linux-snapdragon had an ability to
autogenerate its MAC address upon boot, or read it from a file
(/lib/firmware/wlan/macaddr0). The linux-snapdragon kernel in Bionic
doesn't have this feature.

While by itself not a bug (Xenial used a QCOM provided custom driver,
while Bionic uses the upstream wcn36xx driver), it can be easily work-
arounded by specifying the hw address in /etc/network/interfaces, or set
using ifconfig on the command line, but it turned out to be a real
problem on ubuntu core:

1) upon boot, with no MAC address assigned, the wcn36xx assigns itself the
dummy address "00:00:00:00:00" and that prevents the network interface from 
working at all, until a valid address is set

2) the ubuntu core installer doesn't have any knowledge about this
behaviour, it simply tries to bring up the interface and on failure, it
marks it as 'not working'

On top of that, ubuntu core ships a small script in initramfs, that
generates the /lib/firmware/wlan/macaddr0 file starting from the android
boot serial, effectively generating a unique MAC address per board:
clearly, without driver support, this ubuntu core feature doesn't work.

Fix:

Import back the MAC generation mechanism from Xenial: the pseudo random
generation and the parsing of /lib/firmware/wlan/macaddr0 - see the attached 
patch.

How to test:

Unpon boot, if no /lib/firmware/wlan/macaddr0 is present, the kernel
will print:

[ 10.612701] wcn36xx a204000.wcnss:smd-edge:wcnss:wifi: Direct firmware load 
for wlan/macaddr0 failed with error -2
[ 10.612713] wcn36xx a204000.wcnss:smd-edge:wcnss:wifi: Failed (-2) to read 
macaddressfile wlan/macaddr0, using a random address instead

ubuntu@dragon410c:~$ ifconfig wlan0
wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500
        ether 00:0a:f5:d5:54:d7 txqueuelen 1000 (Ethernet)
        RX packets 0 bytes 0 (0.0 B)
        RX errors 0 dropped 0 overruns 0 frame 0
        TX packets 0 bytes 0 (0.0 B)
        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

else, if /lib/firmware/wlan/macaddr0 is present, its content will be
used to generate wlan0 MAC address:

ubuntu@dragon410c:~$ cat /lib/firmware/wlan/macaddr0
fe:1a:19:77:d9:88

ubuntu@dragon410c:~$ ifconfig wlan0
wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500
        ether fe:1a:19:77:d9:88 txqueuelen 1000 (Ethernet)
        RX packets 0 bytes 0 (0.0 B)
        RX errors 0 dropped 0 overruns 0 frame 0
        TX packets 0 bytes 0 (0.0 B)
        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Regression potential:

Low - the patch is small and the code is wrapped in a Kconfig option
(WCN36XX_SNAPDRAGON_HACKS) that only affects the linux-snapdragon flavour,
leaving the generic kernel untouched.

---

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: Incomplete

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

Title:
  linux-snapdragon: wcn36xx: mac address generation on boot

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

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

Reply via email to