mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 09:32:34 +00:00
hostapd: backport ujail/hostapd fix
This is currently breaking interactive cli support. Fixes: WIFI-5814 Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -0,0 +1,91 @@
|
|||||||
|
From bbd31470429134c23f593a49c02d5413dcba352f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Mentovai <mark@moxienet.com>
|
||||||
|
Date: Tue, 23 Nov 2021 12:28:55 -0500
|
||||||
|
Subject: [PATCH] hostapd: allow hostapd under ujail to communicate with
|
||||||
|
hostapd_cli
|
||||||
|
|
||||||
|
When procd-ujail is available, 1f785383875a runs hostapd as user
|
||||||
|
"network", with only limited additional capabilities (CAP_NET_ADMIN and
|
||||||
|
CAP_NET_RAW).
|
||||||
|
|
||||||
|
hostapd_cli (CONFIG_PACKAGE_hostapd-utils) communicates with hostapd
|
||||||
|
over a named UNIX-domain socket. hostapd_cli is responsible for creating
|
||||||
|
this socket at /tmp/wpa_ctrl_$pid_$counter. Since it typically runs as
|
||||||
|
root, this endpoint is normally created with uid root, gid root, mode
|
||||||
|
0755. As a result, hostapd running as uid network is able to receive
|
||||||
|
control messages sent through this interface, but is not able to respond
|
||||||
|
to them. If debug-level logging is enabled (CONFIG_WPA_MSG_MIN_PRIORITY
|
||||||
|
<= 2 at build, and log_level <= 2 in /etc/config/wireless wifi-device),
|
||||||
|
this message will appear from hostapd:
|
||||||
|
|
||||||
|
CTRL: sendto failed: Permission denied
|
||||||
|
|
||||||
|
As a fix, hostapd_cli should create the socket node in the filesystem
|
||||||
|
with uid network, gid network, mode 0770. This borrows the presently
|
||||||
|
Android-only strategy already in hostapd intended to solve the same
|
||||||
|
problem on Android.
|
||||||
|
|
||||||
|
If procd-ujail is not available and hostapd falls back to running as
|
||||||
|
root, it will still be able to read from and write to the socket even if
|
||||||
|
the node in the filesystem has been restricted to the network user and
|
||||||
|
group. This matches the logic in
|
||||||
|
package/network/services/hostapd/files/wpad.init, which sets the uid and
|
||||||
|
gid of /var/run/hostapd to network regardless of whether procd-ujail is
|
||||||
|
available.
|
||||||
|
|
||||||
|
As it appears that the "network" user and group are statically allocated
|
||||||
|
uid 101 and gid 101, respectively, per
|
||||||
|
package/base-files/files/etc/passwd and USERID in
|
||||||
|
package/network/services/hostapd/Makefile, this patch also uses a
|
||||||
|
constant 101 for the uid and gid.
|
||||||
|
|
||||||
|
Signed-off-by: Mark Mentovai <mark@moxienet.com>
|
||||||
|
[refreshed patch]
|
||||||
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
---
|
||||||
|
.../610-hostapd_cli_ujail_permission.patch | 33 +++++++++++++++++++
|
||||||
|
1 file changed, 33 insertions(+)
|
||||||
|
create mode 100644 package/network/services/hostapd/patches/610-hostapd_cli_ujail_permission.patch
|
||||||
|
|
||||||
|
diff --git a/package/network/services/hostapd/patches/610-hostapd_cli_ujail_permission.patch b/package/network/services/hostapd/patches/610-hostapd_cli_ujail_permission.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..a03fcc9f92
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/package/network/services/hostapd/patches/610-hostapd_cli_ujail_permission.patch
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+--- a/src/common/wpa_ctrl.c
|
||||||
|
++++ b/src/common/wpa_ctrl.c
|
||||||
|
+@@ -135,7 +135,7 @@ try_again:
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ tries++;
|
||||||
|
+-#ifdef ANDROID
|
||||||
|
++
|
||||||
|
+ /* Set client socket file permissions so that bind() creates the client
|
||||||
|
+ * socket with these permissions and there is no need to try to change
|
||||||
|
+ * them with chmod() after bind() which would have potential issues with
|
||||||
|
+@@ -147,7 +147,7 @@ try_again:
|
||||||
|
+ * operations to allow the response to go through. Those are using the
|
||||||
|
+ * no-deference-symlinks version to avoid races. */
|
||||||
|
+ fchmod(ctrl->s, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
|
||||||
|
+-#endif /* ANDROID */
|
||||||
|
++
|
||||||
|
+ if (bind(ctrl->s, (struct sockaddr *) &ctrl->local,
|
||||||
|
+ sizeof(ctrl->local)) < 0) {
|
||||||
|
+ if (errno == EADDRINUSE && tries < 2) {
|
||||||
|
+@@ -165,7 +165,11 @@ try_again:
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+-#ifdef ANDROID
|
||||||
|
++#ifndef ANDROID
|
||||||
|
++ /* Set group even if we do not have privileges to change owner */
|
||||||
|
++ lchown(ctrl->local.sun_path, -1, 101);
|
||||||
|
++ lchown(ctrl->local.sun_path, 101, 101);
|
||||||
|
++#else
|
||||||
|
+ /* Set group even if we do not have privileges to change owner */
|
||||||
|
+ lchown(ctrl->local.sun_path, -1, AID_WIFI);
|
||||||
|
+ lchown(ctrl->local.sun_path, AID_SYSTEM, AID_WIFI);
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
||||||
Reference in New Issue
Block a user