Skip to content
Snippets Groups Projects
Commit 541c6d3f authored by Milan P. Stanić's avatar Milan P. Stanić
Browse files

community/iwd: fix crash in the RSSI polling fallback workaround

pick upstream patch to fix segfaults on some wifi cards
parent 57b4d5e4
No related branches found
No related tags found
1 merge request!72976community/iwd: fix crash in the RSSI polling fallback workaround
Pipeline #263032 skipped
......@@ -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
......
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment