diff --git a/community/iwd/APKBUILD b/community/iwd/APKBUILD index 9f58962a19a4ba71685b099587827c828eff7900..8d476711de6ca882ae26562e57fce29375520de0 100644 --- a/community/iwd/APKBUILD +++ b/community/iwd/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: Milan P. Stanić <mps@arvanta.net> pkgname=iwd pkgver=2.22 -pkgrel=0 +pkgrel=1 pkgdesc="Internet Wireless Daemon" url="https://iwd.wiki.kernel.org/" arch="all" @@ -21,6 +21,8 @@ subpackages=" " source="https://mirrors.edge.kernel.org/pub/linux/network/wireless/iwd-$pkgver.tar.gz 0001-resolving-service-none.patch + fix-crash-in-the-RSSI-polling-fallback-workaround.patch + iwd.initd iwd.confd ead.initd @@ -85,6 +87,7 @@ ead_openrc() { sha512sums=" bdcff2a8073e94225d2790f88d098d5b09a03ba3a1f4888671ffc94706012a8f4e68bd018244d7670f2a31ecd93572d689b4c26b78c8802d6ce328017addc462 iwd-2.22.tar.gz dc7e8ab038b5402573ee41d00b016a3faa172fe260dd7c59d567ae0d933e5a5688aac9f0b8d4089a6b13b1a320540423182d13b3dca1cd3de17f59ae3e5f4df1 0001-resolving-service-none.patch +5760182ef1b0a7f1e34643dd63d57513ebfc6764a57b9fb20884e3d4e3efe0514adf78df52ae080014f6f1cd9c2467f396c7723cdc9914eb5591cd6ca3b3a2b2 fix-crash-in-the-RSSI-polling-fallback-workaround.patch ae697a2b5647f6f8b21902eb7e9a9ec02996be6d4f9cdec162f5423f4cebf83cdb9a137d1a95d085485ec3a7b16c1f0377fabdbb4cc28b9628742201b4503fc2 iwd.initd c53bfe1b18f0e965d6055e79b40d9f01d13648a4ae6124d2bcb0c6a77dc16f96980df0127c67cecd2a0319a6052f980400bb063d00c87ec016ccb350e3fe797e iwd.confd 8207a411d400bc7932829c959251a3246d1c33d342afa7070023dc90403e58b19518b2c84fe36495075a44724e2deab38970a2cc1f83bfff5abf3dff54b8ea3f ead.initd diff --git a/community/iwd/fix-crash-in-the-RSSI-polling-fallback-workaround.patch b/community/iwd/fix-crash-in-the-RSSI-polling-fallback-workaround.patch new file mode 100644 index 0000000000000000000000000000000000000000..964cc9f535e32c9e79715cca9daa671a1c78b365 --- /dev/null +++ b/community/iwd/fix-crash-in-the-RSSI-polling-fallback-workaround.patch @@ -0,0 +1,58 @@ +From b0a011d8f4aff5c24736eb1213e667aaad113c6a Mon Sep 17 00:00:00 2001 +From: James Prestwood <prestwoj@gmail.com> +Date: Thu, 3 Oct 2024 05:58:17 -0700 +Subject: netdev: fix crash in the RSSI polling fallback workaround + +Prior to adding the polling fallback this code path was only used for +signal level list notifications and netdev_rssi_polling_update() was +structured as such, where if the RSSI list feature existed there was +nothing to be done as the kernel handled the notifications. + +For certain mediatek cards this is broken, hence why the fallback was +added. But netdev_rssi_polling_update() was never changed to take +this into account which bypassed the timer cleanup on disconnections +resulting in a crash when the timer fired after IWD was disconnected: + +iwd: ++++++++ backtrace ++++++++ +iwd: #0 0x7b5459642520 in /lib/x86_64-linux-gnu/libc.so.6 +iwd: #1 0x7b54597aedf4 in /lib/x86_64-linux-gnu/libc.so.6 +iwd: #2 0x49f82d in l_netlink_message_append() at ome/jprestwood/iwd/ell/netlink.c:825 +iwd: #3 0x4a0c12 in l_genl_msg_append_attr() at ome/jprestwood/iwd/ell/genl.c:1522 +iwd: #4 0x405c61 in netdev_rssi_poll() at ome/jprestwood/iwd/src/netdev.c:764 +iwd: #5 0x49cce4 in timeout_callback() at ome/jprestwood/iwd/ell/timeout.c:70 +iwd: #6 0x49c2ed in l_main_iterate() at ome/jprestwood/iwd/ell/main.c:455 (discriminator 2) +iwd: #7 0x49c3bc in l_main_run() at ome/jprestwood/iwd/ell/main.c:504 +iwd: #8 0x49c5f0 in l_main_run_with_signal() at ome/jprestwood/iwd/ell/main.c:632 +iwd: #9 0x4049ed in main() at ome/jprestwood/iwd/src/main.c:614 +iwd: #10 0x7b5459629d90 in /lib/x86_64-linux-gnu/libc.so.6 +iwd: #11 0x7b5459629e40 in /lib/x86_64-linux-gnu/libc.so.6 +iwd: +++++++++++++++++++++++++++ + +To fix this we need to add checks for the cqm_poll_fallback flag in +netdev_rssi_polling_update(). +--- + src/netdev.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/netdev.c b/src/netdev.c +index d298977a1..8379a5983 100644 +--- a/src/netdev.c ++++ b/src/netdev.c +@@ -769,11 +769,12 @@ static void netdev_rssi_poll(struct l_timeout *timeout, void *user_data) + /* To be called whenever operational or rssi_levels_num are updated */ + static void netdev_rssi_polling_update(struct netdev *netdev) + { +- if (wiphy_has_ext_feature(netdev->wiphy, ++ if (!netdev->cqm_poll_fallback && wiphy_has_ext_feature(netdev->wiphy, + NL80211_EXT_FEATURE_CQM_RSSI_LIST)) + return; + +- if (netdev->operational && netdev->rssi_levels_num > 0) { ++ if (netdev->operational && (netdev->rssi_levels_num > 0 || ++ netdev->cqm_poll_fallback)) { + if (netdev->rssi_poll_timeout) + return; + +-- +cgit 1.2.3-korg +