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
+