wpa_supplicant: use unique IDs for networks and credentials

Fixes the bug described at https://github.com/NixOS/nixpkgs/pull/155266#issuecomment-1031711094
main
Naïm Favier 2 years ago
parent cda4084518
commit ffdcd39c0b
No known key found for this signature in database
GPG Key ID: 49B07322580B7EE2
  1. 32
      pkgs/os-specific/linux/wpa_supplicant/Use-unique-IDs-for-networks-and-credentials.patch
  2. 2
      pkgs/os-specific/linux/wpa_supplicant/default.nix

@ -0,0 +1,32 @@
The id and cred_id variables are reset to 0 every time the
wpa_config_read function is called, which is fine as long as it is only
called once. However, this is not the case when using both the -c and -I
options to specify two config files.
This is a problem because the GUI, since eadfeb0e93748eb396ae62012b92d21a7f533646,
relies on the network IDs being unique (and increasing), and might get
into an infinite loop otherwise.
This is solved by simply making the variables static.
---
wpa_supplicant/config_file.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index 6db5010db..c996e3916 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -297,8 +297,8 @@ struct wpa_config * wpa_config_read(const char *name, struct wpa_config *cfgp)
struct wpa_ssid *ssid, *tail, *head;
struct wpa_cred *cred, *cred_tail, *cred_head;
struct wpa_config *config;
- int id = 0;
- int cred_id = 0;
+ static int id = 0;
+ static int cred_id = 0;
if (name == NULL)
return NULL;
--
2.34.1

@ -18,6 +18,8 @@ stdenv.mkDerivation rec {
};
patches = [
# Fix a bug when using two config files
./Use-unique-IDs-for-networks-and-credentials.patch
] ++ lib.optionals readOnlyModeSSIDs [
# Allow read-only networks
./0001-Implement-read-only-mode-for-ssids.patch

Loading…
Cancel
Save