So I have some questions about the snap run under the wpa_client case. Is this trace repeatable? This one is odd to me in a couple of ways like we are getting a timeout without every doing a select/poll/... so either it is somehow missing from the trace or its being done by interrupt.
The trace starts to differ with the fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 instead of pselect6(4, ... <- Why is this one missing recvfrom(3, ... <- missing can be explained by time out newfstatat(1, ... the missing pselect/poll.. of any kind is weird and needs to be investigated. The missing recvfrom can be explained by the timeout. the change from newfstatat to fstat in the snap might give a clue. I think we might be looking at a seccomp issue where newfstatat or at least something used to detect if newfstatat is present is being blocked. My guess is the code to select this is in glibc. This might also explain pselect6 missing. If glibc is setting some local vars that it is using to conditionally determine which syscall to use. It may just be straight up returning an error (eg timeout) without making a syscall of any kind. Again this is conjecture and needs to be investigated. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to wpa in Ubuntu. https://bugs.launchpad.net/bugs/2074070 Title: unable to get WPA supplicant status via wpa-cli utility from a snap Status in wpa package in Ubuntu: Confirmed Bug description: Hi As a developer, while trying to get the wpa_supplicant status by using wpa_cli, it always returns a timeout from the snap context on Ubuntu Core 20. The problem is not reproducible with Ubuntu Classic. I did some further analysis to get strace output of `wpa_cli` as well as `wpa_supplicant` for the good (running wpa_cli from host terminal) and bad (running from snap context) cases. Here is the strace output of the wpa_cli; Good case: ``` bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_29279-1"}, 110) = 0 connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlp0s20f3"}, 110) = 0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 sendto(3, "STATUS", 6, 0, NULL, 0) = 6 pselect6(4, [3], NULL, NULL, {tv_sec=10, tv_nsec=0}, NULL) = 1 (in [3], left {tv_sec=9, tv_nsec=999998877}) recvfrom(3, "bssid=68:a0:3e:93:47:2f\nfreq=526"..., 4095, 0, NULL, NULL) = 316 newfstatat(1, "", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x4), ...}, AT_EMPTY_PATH) = 0 write(1, "bssid=68:a0:3e:93:47:2f\n", 24bssid=68:a0:3e:93:47:2f ) = 24 write(1, "freq=5260\n", 10freq=5260 ) = 10 write(1, "ssid=SUPERBOX_Wi-Fi_472B\n", 25ssid=SUPERBOX_Wi-Fi_472B ) = 25 write(1, "id=0\n", 5id=0 ) = 5 write(1, "mode=station\n", 13mode=station ) = 13 write(1, "wifi_generation=5\n", 18wifi_generation=5 ) = 18 write(1, "pairwise_cipher=CCMP\n", 21pairwise_cipher=CCMP ) = 21 write(1, "group_cipher=CCMP\n", 18group_cipher=CCMP ) = 18 write(1, "key_mgmt=WPA2-PSK\n", 18key_mgmt=WPA2-PSK ) = 18 write(1, "wpa_state=COMPLETED\n", 20wpa_state=COMPLETED ) = 20 write(1, "ip_address=192.168.1.101\n", 25ip_address=192.168.1.101 ) = 25 write(1, "p2p_device_address=b0:a4:60:e0:0"..., 37p2p_device_address=b0:a4:60:e0:0c:91 ) = 37 write(1, "address=b0:a4:60:e0:0c:90\n", 26address=b0:a4:60:e0:0c:90 ) = 26 write(1, "uuid=962ca758-c0a7-54c0-ae01-689"..., 42uuid=962ca758-c0a7-54c0-ae01-68990801f7a0 ) = 42 write(1, "ieee80211ac=1\n", 14ieee80211ac=1 ) = 14 unlink("/tmp/wpa_ctrl_29279-1") = 0 close(3) = 0 exit_group(0) = ? ``` Bad case (running from the snap context) ``` getpid() = 58024 bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_58024-1"}, 110) = 0 connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlp0s20f3"}, 110) = 0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 sendto(3, "STATUS", 6, 0, NULL, 0) = 6 fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 unlink("/tmp/wpa_ctrl_58024-1") = 0 close(3) = 0 write(1, "'STATUS' command timed out.\n", 28'STATUS' command timed out. ) = 28 exit_group(-2) = ? +++ exited with 254 +++ ``` Here is the wpa_supplicant strace output; For the good case, wpa_supplicant was able to send the message back to the wpa_cli; ``` pselect6(19, [4 5 7 9 10 11 13 14 15 16 17 18], [], [4], {tv_sec=9, tv_nsec=999997000}, NULL) = 1 (in [14], left {tv_sec=9, tv_nsec=281454971}) recvfrom(14, "STATUS", 8193, 0, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_172293-1"}, [128 => 25]) = 6 getsockopt(14, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0 ioctl(14, TIOCOUTQ, [0]) = 0 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 19 ioctl(19, SIOCGIFADDR, {ifr_name="wlp0s20f3", ifr_addr={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.1.101")}}) = 0 close(19) = 0 getsockopt(14, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0 ioctl(14, TIOCOUTQ, [0]) = 0 sendto(14, "bssid=68:a0:3e:93:47:2f\nfreq=526"..., 316, 0, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_172293-1"}, 25) = 316 pselect6(19, [4 5 7 9 10 11 13 14 15 16 17 18], [], [4], {tv_sec=9, tv_nsec=278742000}, NULL ``` However, for the bad case (where wpa_cli is called from the snap context), the data is available but while wpa_supplicant tries to send it, the socket is probably not visible since we got a no such a file error; ``` recvfrom(14, "STATUS", 8193, 0, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_172203-1"}, [128 => 25]) = 6 getsockopt(14, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0 ioctl(14, TIOCOUTQ, [0]) = 0 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 19 ioctl(19, SIOCGIFADDR, {ifr_name="wlp0s20f3", ifr_addr={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.1.101")}}) = 0 close(19) = 0 getsockopt(14, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0 ioctl(14, TIOCOUTQ, [0]) = 0 sendto(14, "bssid=68:a0:3e:93:47:2f\nfreq=526"..., 316, 0, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_172203-1"}, 25) = -1 ENOENT (No such file or directory) getsockopt(14, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0 ioctl(14, TIOCOUTQ, [0]) = 0 ``` I dont see any denial for accessing to the unix socket and the same problem also occurs within devmode. I'm assuming that since all of the snaps have their own `/tmp` directory, they may not be able to reach out to the `/tmp` of the host. Moreover, it seems like the wpa_cli also opens a unix socket that exist within the `/tmp` directory. Thus, we might be observing this behavior. Could you please suggest a potential fixes? Thanks, Bugra To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/wpa/+bug/2074070/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp