Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package iwd for openSUSE:Factory checked in 
at 2025-06-10 09:05:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/iwd (Old)
 and      /work/SRC/openSUSE:Factory/.iwd.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "iwd"

Tue Jun 10 09:05:21 2025 rev:56 rq:1283888 version:3.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/iwd/iwd.changes  2025-04-07 18:41:34.507936873 
+0200
+++ /work/SRC/openSUSE:Factory/.iwd.new.19631/iwd.changes       2025-06-10 
09:08:51.208284885 +0200
@@ -1,0 +2,17 @@
+Fri Jun  6 17:55:19 UTC 2025 - Luigi Baldoni <aloi...@gmx.com>
+
+- Add iwd-dbus_policy.patch to address rpmlint complaints.
+
+-------------------------------------------------------------------
+Thu Jun  5 08:25:33 UTC 2025 - Luigi Baldoni <aloi...@gmx.com>
+
+- Update to version 3.8
+  * Fix issue with handling unit tests and missing kernel
+    features.
+  version 3.7:
+  * Fix issue with handling length of EncryptedSecurity.
+  * Fix issue with handling empty affinities lists.
+  * Fix issue with handling survey scanning results.
+  * Fix issue with handling duplicate values in DPP URI.
+
+-------------------------------------------------------------------

Old:
----
  iwd-3.6.tar.sign
  iwd-3.6.tar.xz

New:
----
  iwd-3.8.tar.sign
  iwd-3.8.tar.xz
  iwd-dbus_policy.patch

BETA DEBUG BEGIN:
  New:
- Add iwd-dbus_policy.patch to address rpmlint complaints.
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ iwd.spec ++++++
--- /var/tmp/diff_new_pack.2dYu0q/_old  2025-06-10 09:08:51.896313326 +0200
+++ /var/tmp/diff_new_pack.2dYu0q/_new  2025-06-10 09:08:51.896313326 +0200
@@ -17,13 +17,15 @@
 
 
 Name:           iwd
-Version:        3.6
+Version:        3.8
 Release:        0
 Summary:        Wireless daemon for Linux
 License:        LGPL-2.1-or-later
 URL:            https://git.kernel.org/pub/scm/network/wireless/iwd.git
 Source:         
https://kernel.org/pub/linux/network/wireless/%{name}-%{version}.tar.xz
 Source1:        
https://kernel.org/pub/linux/network/wireless/%{name}-%{version}.tar.sign
+# PATCH-FIX-OPENSUSe iwd-dbus_policy.patch
+Patch0:         iwd-dbus_policy.patch
 # https://kernel.org/doc/wot/holtmann.html
 Source2:        %{name}.keyring
 # needed for the tests to generate certificates
@@ -31,7 +33,7 @@
 BuildRequires:  pkg-config
 BuildRequires:  systemd-rpm-macros
 BuildRequires:  pkgconfig(dbus-1)
-BuildRequires:  pkgconfig(ell) >= 0.72
+BuildRequires:  pkgconfig(ell) >= 0.77
 BuildRequires:  pkgconfig(readline)
 BuildRequires:  pkgconfig(systemd)
 %{?systemd_ordering}

++++++ iwd-3.6.tar.xz -> iwd-3.8.tar.xz ++++++
++++ 1676 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ChangeLog new/iwd-3.8/ChangeLog
--- old/iwd-3.6/ChangeLog       2025-04-02 15:06:29.000000000 +0200
+++ new/iwd-3.8/ChangeLog       2025-05-07 13:59:43.000000000 +0200
@@ -1,3 +1,12 @@
+ver 3.8:
+       Fix issue with handling unit tests and missing kernel features.
+
+ver 3.7:
+       Fix issue with handling length of EncryptedSecurity.
+       Fix issue with handling empty affinities lists.
+       Fix issue with handling survey scanning results.
+       Fix issue with handling duplicate values in DPP URI.
+
 ver 3.6:
        Fix issue with handling blacklisting and roaming requests.
        Fix issue with handling CQM thresholds for FullMAC devices.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/Makefile.am new/iwd-3.8/Makefile.am
--- old/iwd-3.6/Makefile.am     2025-02-11 00:17:14.000000000 +0100
+++ new/iwd-3.8/Makefile.am     2025-05-04 19:35:55.000000000 +0200
@@ -441,7 +441,7 @@
                unit/test-arc4 unit/test-wsc unit/test-eap-mschapv2 \
                unit/test-eap-sim unit/test-sae unit/test-p2p unit/test-band \
                unit/test-dpp unit/test-json unit/test-nl80211util \
-               unit/test-pmksa
+               unit/test-pmksa unit/test-storage
 endif
 
 if CLIENT
@@ -605,6 +605,11 @@
 unit_test_pmksa_SOURCES = unit/test-pmksa.c src/pmksa.c src/pmksa.h \
                                src/module.h src/util.h
 unit_test_pmksa_LDADD = $(ell_ldadd)
+
+unit_test_storage_SOURCES = unit/test-storage.c src/storage.c src/storage.h \
+                               src/crypto.c src/crypto.h \
+                               src/common.c src/common.h
+unit_test_storage_LDADD = $(ell_ldadd)
 endif
 
 if CLIENT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/configure.ac new/iwd-3.8/configure.ac
--- old/iwd-3.6/configure.ac    2025-04-02 15:06:29.000000000 +0200
+++ new/iwd-3.8/configure.ac    2025-05-07 13:59:43.000000000 +0200
@@ -1,5 +1,5 @@
 AC_PREREQ([2.69])
-AC_INIT([iwd],[3.6])
+AC_INIT([iwd],[3.8])
 
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_AUX_DIR(build-aux)
@@ -300,7 +300,7 @@
                        test "${enable_monitor}" != "no" ||
                        test "${enable_wired}" = "yes" ||
                        test "${enable_hwsim}" = "yes"); then
-               ell_min_version="0.72"
+               ell_min_version="0.77"
        else
                ell_min_version="0.5"
        fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/ecc.c new/iwd-3.8/ell/ecc.c
--- old/iwd-3.6/ell/ecc.c       2025-03-26 10:29:30.000000000 +0100
+++ new/iwd-3.8/ell/ecc.c       2025-04-02 20:33:28.000000000 +0200
@@ -1052,6 +1052,18 @@
                return _ecc_constant_new(curve, r, curve->ndigits * 8);
        }
 
+       /*
+        * In the really unlikely case that ECC_RANDOM_MAX_ITERATIONS
+        * number of times the random data is not a valid scalar,
+        * then just abort.  If this happens something is really
+        * wrong with the random source and there is no point to
+        * continue operation.
+        */
+
+       fprintf(stderr, "%s:%s(): failed to allocate valid scalar\n",
+                                                       STRLOC, __func__);
+       abort();
+
        return NULL;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/ecdh.c new/iwd-3.8/ell/ecdh.c
--- old/iwd-3.6/ell/ecdh.c      2025-03-26 10:29:30.000000000 +0100
+++ new/iwd-3.8/ell/ecdh.c      2025-04-02 20:33:28.000000000 +0200
@@ -50,9 +50,8 @@
        *out_public = l_ecc_point_new(curve);
 
        while (!compliant && iter++ < ECDH_MAX_ITERATIONS) {
+               /* aborts if no valid private key can be generated */
                *out_private = l_ecc_scalar_new_random(curve);
-               if (!*out_private)
-                       continue;
 
                _ecc_point_mult(*out_public, &curve->g, (*out_private)->c,
                                        NULL, curve->p);
@@ -88,9 +87,8 @@
        if (unlikely(!private_key || !other_public || !secret))
                return false;
 
+       /* aborts if no valid scalar can be generated */
        z = l_ecc_scalar_new_random(curve);
-       if (!z)
-               return false;
 
        product = l_ecc_point_new(curve);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/private.h new/iwd-3.8/ell/private.h
--- old/iwd-3.6/ell/private.h   2023-09-27 11:03:04.000000000 +0200
+++ new/iwd-3.8/ell/private.h   2025-04-02 20:33:28.000000000 +0200
@@ -8,3 +8,5 @@
 #include <ell/util.h>
 
 #define LIB_EXPORT __attribute__ ((visibility("default")))
+
+#define STRLOC __FILE__ ":" L_STRINGIFY(__LINE__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/test.c new/iwd-3.8/ell/test.c
--- old/iwd-3.6/ell/test.c      2025-02-12 23:42:15.000000000 +0100
+++ new/iwd-3.8/ell/test.c      2025-05-07 12:33:02.000000000 +0200
@@ -55,6 +55,7 @@
        const char *name;
        const void *data;
        l_test_func_t function;
+       l_test_precheck_t precheck;
        unsigned long flags;
        unsigned int num;
        struct test *next;
@@ -260,7 +261,7 @@
        if (!run_all && (test->flags & L_TEST_FLAG_EXPENSIVE_COMPUTATION)) {
                /*
                 * Abort test cases with long running computation task
-                * to fail and with the be gracefully skipped
+                * to fail and with that be gracefully skipped
                 */
                abort();
                return;
@@ -314,15 +315,39 @@
 
 static void run_next_test(void *user_data)
 {
+       struct test *test = test_head;
        pid_t pid;
 
-       if (!test_head) {
+       if (!test) {
                testing_active = false;
                return;
        }
 
        if (!tap_enable)
-               printf("TEST: %s\n", test_head->name);
+               printf("TEST: %s\n", test->name);
+
+       if (test->precheck) {
+               bool result = test->precheck(test->data);
+
+               if (test->flags & L_TEST_FLAG_INVERT_PRECHECK_RESULT)
+                       result = !result;
+
+               if (!result) {
+                       if (tap_enable)
+                               printf("ok %u - %s # SKIP not-supported\n",
+                                                       test->num, test->name);
+
+                       test_head = test->next;
+                       free(test);
+
+                       if (!test_head)
+                               test_tail = NULL;
+
+                       /* Trigger the main pollfd loop */
+                       kill(getpid(), SIGUSR1);
+                       return;
+               }
+       }
 
        pid = fork();
        if (pid < 0) {
@@ -341,9 +366,9 @@
                /* Close stdout to not interfere with TAP */
                close(STDOUT_FILENO);
 
-               test_setup(test_head);
-               test_function(test_head);
-               test_teardown(test_head);
+               test_setup(test);
+               test_function(test);
+               test_teardown(test);
 
                exit(EXIT_SUCCESS);
        }
@@ -439,6 +464,7 @@
        sigaddset(&sig_mask, SIGINT);
        sigaddset(&sig_mask, SIGTERM);
        sigaddset(&sig_mask, SIGCHLD);
+       sigaddset(&sig_mask, SIGUSR1);
 
        /*
         * Block signals so that they aren't handled according to their
@@ -489,6 +515,9 @@
                case SIGCHLD:
                        sigchld_handler(NULL);
                        break;
+               case SIGUSR1:
+                       run_next_test(NULL);
+                       break;
                }
        }
 
@@ -499,32 +528,10 @@
        return exit_status;
 }
 
-/**
- * l_test_add_data_func:
- * @name: test name
- * @function: test function
- * @flags: test flags;
- *
- * Add new test.
- **/
-LIB_EXPORT void l_test_add_func(const char *name, l_test_func_t function,
-                                                       unsigned long flags)
-{
-       l_test_add_data_func(name, NULL, function, flags);
-}
-
-/**
- * l_test_add_data_func:
- * @name: test name
- * @function: test function
- * @data: test data
- * @flags: test flags;
- *
- * Add new test.
- **/
-LIB_EXPORT void l_test_add_data_func(const char *name, const void *data,
-                                                       l_test_func_t function,
-                                                       unsigned long flags)
+static void common_add(const char *name, const void *data,
+                                               l_test_func_t function,
+                                               l_test_precheck_t precheck,
+                                               unsigned long flags)
 {
        struct test *test;
 
@@ -539,6 +546,7 @@
        test->name = name;
        test->data = data;
        test->function = function;
+       test->precheck = precheck;
        test->flags = flags;
        test->num = ++test_count;
        test->next = NULL;
@@ -553,6 +561,73 @@
 }
 
 /**
+ * l_test_add_func_precheck:
+ * @name: test name
+ * @data: test data
+ * @function: test function
+ * @precheck: precheck function
+ * @flags: test flags;
+ *
+ * Add new test.
+ **/
+LIB_EXPORT void l_test_add_func_precheck(const char *name,
+                                               l_test_func_t function,
+                                               l_test_precheck_t precheck,
+                                               unsigned long flags)
+{
+       common_add(name, NULL, function, precheck, flags);
+}
+
+/**
+ * l_test_add_data_func_precheck:
+ * @name: test name
+ * @data: test data
+ * @function: test function
+ * @precheck: precheck function
+ * @flags: test flags;
+ *
+ * Add new test.
+ **/
+LIB_EXPORT void l_test_add_data_func_precheck(const char *name,
+                                               const void *data,
+                                               l_test_func_t function,
+                                               l_test_precheck_t precheck,
+                                               unsigned long flags)
+{
+       common_add(name, data, function, precheck, flags);
+}
+
+/**
+ * l_test_add_data_func:
+ * @name: test name
+ * @function: test function
+ * @flags: test flags;
+ *
+ * Add new test.
+ **/
+LIB_EXPORT void l_test_add_func(const char *name, l_test_func_t function,
+                                                       unsigned long flags)
+{
+       common_add(name, NULL, function, NULL, flags);
+}
+
+/**
+ * l_test_add_data_func:
+ * @name: test name
+ * @data: test data
+ * @function: test function
+ * @flags: test flags;
+ *
+ * Add new test.
+ **/
+LIB_EXPORT void l_test_add_data_func(const char *name, const void *data,
+                                                       l_test_func_t function,
+                                                       unsigned long flags)
+{
+       common_add(name, data, function, NULL, flags);
+}
+
+/**
  * l_test_add:
  * @name: test name
  * @function: test function
@@ -563,7 +638,7 @@
 LIB_EXPORT void l_test_add(const char *name, l_test_func_t function,
                                                        const void *data)
 {
-       l_test_add_data_func(name, data, function, default_flags);
+       common_add(name, data, function, NULL, default_flags);
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/test.h new/iwd-3.8/ell/test.h
--- old/iwd-3.6/ell/test.h      2025-02-12 23:42:15.000000000 +0100
+++ new/iwd-3.8/ell/test.h      2025-05-07 12:33:02.000000000 +0200
@@ -8,6 +8,8 @@
 #ifndef __ELL_TEST_H
 #define __ELL_TEST_H
 
+#include <stdbool.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -16,13 +18,23 @@
 int l_test_run(void);
 
 typedef void (*l_test_func_t) (const void *data);
+typedef bool (*l_test_precheck_t) (const void *data);
 
 #define L_TEST_FLAG_FAILURE_EXPECTED           (1 << 1)
 #define L_TEST_FLAG_ALLOW_FAILURE              (1 << 2)
 #define L_TEST_FLAG_LITTLE_ENDIAN_ONLY         (1 << 3)
 #define L_TEST_FLAG_EXPENSIVE_COMPUTATION      (1 << 4)
-#define L_TEST_FLAG_REQUIRE_DBUS_SYSTEM_BUS    (1 << 5)
-#define L_TEST_FLAG_REQUIRE_DBUS_SESSION_BUS   (1 << 6)
+#define L_TEST_FLAG_INVERT_PRECHECK_RESULT     (1 << 5)
+#define L_TEST_FLAG_REQUIRE_DBUS_SYSTEM_BUS    (1 << 8)
+#define L_TEST_FLAG_REQUIRE_DBUS_SESSION_BUS   (1 << 9)
+
+void l_test_add_func_precheck(const char *name, l_test_func_t function,
+                                               l_test_precheck_t precheck,
+                                               unsigned long flags);
+void l_test_add_data_func_precheck(const char *name, const void *data,
+                                               l_test_func_t function,
+                                               l_test_precheck_t precheck,
+                                               unsigned long flags);
 
 void l_test_add_func(const char *name, l_test_func_t function,
                                                unsigned long flags);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/ell/util.c new/iwd-3.8/ell/util.c
--- old/iwd-3.6/ell/util.c      2025-03-26 10:29:30.000000000 +0100
+++ new/iwd-3.8/ell/util.c      2025-04-02 20:33:28.000000000 +0200
@@ -29,8 +29,6 @@
  * Utility functions
  */
 
-#define STRLOC __FILE__ ":" L_STRINGIFY(__LINE__)
-
 /**
  * l_malloc:
  * @size: memory size to allocate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/monitor/nlmon.c new/iwd-3.8/monitor/nlmon.c
--- old/iwd-3.6/monitor/nlmon.c 2024-12-20 08:55:09.000000000 +0100
+++ new/iwd-3.8/monitor/nlmon.c 2025-05-04 19:35:55.000000000 +0200
@@ -1915,7 +1915,7 @@
        size--;
        ptr++;
 
-       if (!size)
+       if (size < 2)
                return;
 
        /*
@@ -7433,7 +7433,7 @@
 
        pcap_close(nlmon->pcap);
 
-       /* Exausted the single PCAP file */
+       /* Exhausted the single PCAP file */
        if (nlmon->max_files < 2) {
                printf("Reached maximum size of PCAP, exiting\n");
                nlmon->pcap = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/dpp-util.c new/iwd-3.8/src/dpp-util.c
--- old/iwd-3.6/src/dpp-util.c  2023-12-27 13:34:15.000000000 +0100
+++ new/iwd-3.8/src/dpp-util.c  2025-05-04 19:35:55.000000000 +0200
@@ -1166,21 +1166,34 @@
 
                switch (*pos) {
                case 'C':
+                       if (L_WARN_ON(info->freqs))
+                               goto free_info;
+
                        info->freqs = dpp_parse_class_and_channel(pos + 2, len);
                        if (!info->freqs)
                                goto free_info;
                        break;
                case 'M':
+                       if (L_WARN_ON(!l_memeqzero(info->mac,
+                                                       sizeof(info->mac))))
+                               goto free_info;
+
                        ret = dpp_parse_mac(pos + 2, len, info->mac);
                        if (ret < 0)
                                goto free_info;
                        break;
                case 'V':
+                       if (L_WARN_ON(info->version != 0))
+                               goto free_info;
+
                        ret = dpp_parse_version(pos + 2, len, &info->version);
                        if (ret < 0)
                                goto free_info;
                        break;
                case 'K':
+                       if (L_WARN_ON(info->boot_public))
+                               goto free_info;
+
                        info->boot_public = dpp_parse_key(pos + 2, len);
                        if (!info->boot_public)
                                goto free_info;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/eap-mschapv2.c new/iwd-3.8/src/eap-mschapv2.c
--- old/iwd-3.6/src/eap-mschapv2.c      2024-03-29 00:27:27.000000000 +0100
+++ new/iwd-3.8/src/eap-mschapv2.c      2025-05-04 19:35:55.000000000 +0200
@@ -544,7 +544,8 @@
        return true;
 
 error:
-       free(state);
+       l_free(state->user);
+       l_free(state);
        return false;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/eap.c new/iwd-3.8/src/eap.c
--- old/iwd-3.6/src/eap.c       2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/src/eap.c       2025-05-04 19:35:55.000000000 +0200
@@ -425,8 +425,8 @@
                                size_t len)
 {
        enum eap_type type;
-       uint32_t vendor_id;
-       uint32_t vendor_type;
+       uint32_t vendor_id = 0;
+       uint32_t vendor_type = 0;
        enum eap_type our_type = eap->method->request_type;
        uint32_t our_vendor_id = (eap->method->vendor_id[0] << 16) |
                                (eap->method->vendor_id[1] << 8) |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/scan.c new/iwd-3.8/src/scan.c
--- old/iwd-3.6/src/scan.c      2024-11-25 19:05:53.000000000 +0100
+++ new/iwd-3.8/src/scan.c      2025-05-04 19:35:55.000000000 +0200
@@ -143,9 +143,9 @@
 };
 
 struct scan_survey_results {
-       struct scan_survey survey_2_4[14];
-       struct scan_survey survey_5[196];
-       struct scan_survey survey_6[233];
+       struct scan_survey survey_2_4[15];
+       struct scan_survey survey_5[197];
+       struct scan_survey survey_6[234];
 };
 
 struct scan_results {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/station.c new/iwd-3.8/src/station.c
--- old/iwd-3.6/src/station.c   2025-04-02 15:06:29.000000000 +0200
+++ new/iwd-3.8/src/station.c   2025-05-04 19:35:55.000000000 +0200
@@ -4815,7 +4815,7 @@
        struct l_dbus_message_iter array;
        const char *sender = l_dbus_message_get_sender(message);
        char *old_path = l_queue_peek_head(station->affinities);
-       const char *new_path = NULL;
+       const char *new_path;
        struct scan_bss *new_bss = NULL;
        struct scan_bss *old_bss = NULL;
        bool lower_threshold = false;
@@ -4835,10 +4835,15 @@
        if (!l_dbus_message_iter_get_variant(new_value, "ao", &array))
                return dbus_error_invalid_args(message);
 
-       /* Get first entry, there should be only one */
-       l_dbus_message_iter_next_entry(&array, &new_path);
-
-       if (l_dbus_message_iter_next_entry(&array, &new_path))
+       /* Get first entry, or if an empty array set the path to NULL */
+       if (!l_dbus_message_iter_next_entry(&array, &new_path))
+               new_path = NULL;
+
+       /*
+        * Only allowing single values for now. If there is more than a single
+        * value, fail
+        */
+       if (new_path && l_dbus_message_iter_next_entry(&array, &new_path))
                return dbus_error_invalid_args(message);
 
        old_path = l_queue_peek_head(station->affinities);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/src/storage.c new/iwd-3.8/src/storage.c
--- old/iwd-3.6/src/storage.c   2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/src/storage.c   2025-05-04 19:35:55.000000000 +0200
@@ -501,6 +501,13 @@
        }
 
        /*
+        * It should likely be far larger than this, but that will get caught
+        * later when reloading the decrypted data.
+        */
+       if (elen < 16)
+               return -EBADMSG;
+
+       /*
         * AES-SIV automatically verifies the IV (16 bytes) and returns only
         * the decrypted data portion. We add one here for the NULL terminator
         * since this is always going to be textual data after decryption.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-cmac-aes.c new/iwd-3.8/unit/test-cmac-aes.c
--- old/iwd-3.6/unit/test-cmac-aes.c    2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-cmac-aes.c    2025-05-07 13:59:43.000000000 +0200
@@ -138,20 +138,22 @@
        .tag_len        = sizeof(tag_4),
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_cmac_aes_supported();
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_cmac_aes_supported()) {
-               printf("AES-CMAC support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/cmac-aes/Example 1", cmac_test, &example_1);
-       l_test_add("/cmac-aes/Example 2", cmac_test, &example_2);
-       l_test_add("/cmac-aes/Example 3", cmac_test, &example_3);
-       l_test_add("/cmac-aes/Example 4", cmac_test, &example_4);
+       add_test("/cmac-aes/Example 1", cmac_test, &example_1);
+       add_test("/cmac-aes/Example 2", cmac_test, &example_2);
+       add_test("/cmac-aes/Example 3", cmac_test, &example_3);
+       add_test("/cmac-aes/Example 4", cmac_test, &example_4);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-crypto.c new/iwd-3.8/unit/test-crypto.c
--- old/iwd-3.6/unit/test-crypto.c      2019-10-30 11:50:34.000000000 +0100
+++ new/iwd-3.8/unit/test-crypto.c      2025-05-07 13:59:43.000000000 +0200
@@ -403,40 +403,32 @@
        assert(memcmp(decrypted, plaintext, sizeof(decrypted)) == 0);
 }
 
+static bool test_precheck(const void *data)
+{
+       return (l_cipher_is_supported(L_CIPHER_AES) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA1, true));
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA1, true)) {
-               printf("SHA1 support missing, skipping...\n");
-               goto done;
-       }
-
-       if (!l_cipher_is_supported(L_CIPHER_AES)) {
-               printf("AES support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/Passphrase Generator/PSK Test Case 1",
-                       psk_test, &psk_test_case_1);
-       l_test_add("/Passphrase Generator/PSK Test Case 2",
-                       psk_test, &psk_test_case_2);
-       l_test_add("/Passphrase Generator/PSK Test Case 3",
-                       psk_test, &psk_test_case_3);
-
-       l_test_add("/PTK Derivation/PTK Test Case 1",
-                       ptk_test, &ptk_test_1);
-       l_test_add("/PTK Derivation/PTK Test Case 2",
-                       ptk_test, &ptk_test_2);
-       l_test_add("/PTK Derivation/PTK Test Case 3",
-                       ptk_test, &ptk_test_3);
-       l_test_add("/PTK Derivation/PTK Test Case 4",
-                       ptk_test, &ptk_test_4);
-
-       l_test_add("/AES Key-wrap/Wrap & unwrap",
-                       aes_wrap_test, NULL);
-       l_test_add("/AES-SIV", aes_siv_test, NULL);
+       add_test("/Passphrase Generator/PSK Test Case 1",
+                                               psk_test, &psk_test_case_1);
+       add_test("/Passphrase Generator/PSK Test Case 2",
+                                               psk_test, &psk_test_case_2);
+       add_test("/Passphrase Generator/PSK Test Case 3",
+                                               psk_test, &psk_test_case_3);
+
+       add_test("/PTK Derivation/PTK Test Case 1", ptk_test, &ptk_test_1);
+       add_test("/PTK Derivation/PTK Test Case 2", ptk_test, &ptk_test_2);
+       add_test("/PTK Derivation/PTK Test Case 3", ptk_test, &ptk_test_3);
+       add_test("/PTK Derivation/PTK Test Case 4", ptk_test, &ptk_test_4);
+
+       add_test("/AES Key-wrap/Wrap & unwrap", aes_wrap_test, NULL);
+       add_test("/AES-SIV", aes_siv_test, NULL);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-dpp.c new/iwd-3.8/unit/test-dpp.c
--- old/iwd-3.6/unit/test-dpp.c 2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-dpp.c 2025-05-07 13:59:43.000000000 +0200
@@ -116,6 +116,29 @@
        },
 };
 
+struct dpp_test_info duplicates[] = {
+       /* Duplicate key */
+       {
+               .uri = 
"DPP:K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgADURzxmttZoIRIPWGoQMV00XHWCAQIhXruVWOz0NjlkIA=;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgADURzxmttZoIRIPWGoQMV00XHWCAQIhXruVWOz0NjlkIA=;;",
+               .expect_fail = true
+       },
+       /* Duplicate frequencies*/
+       {
+               .uri = "DPP:C:81/1,115/36;C:81/1,115/36;;",
+               .expect_fail = true
+       },
+       /* Duplicate MACs*/
+       {
+               .uri = "DPP:M:5254005828e5;M:5254005828e5;;",
+               .expect_fail = true
+       },
+       /* Duplicate versions */
+       {
+               .uri = "DPP:V:2;V:2;;",
+               .expect_fail = true
+       },
+};
+
 static bool verify_info(const struct dpp_uri_info *parsed,
                        const struct dpp_test_info *result)
 {
@@ -158,6 +181,14 @@
                test_uri_parse(&bad_channels[i]);
 }
 
+static void test_duplicate_in_uri(const void *data)
+{
+       unsigned int i;
+
+       for (i = 0; i < L_ARRAY_SIZE(duplicates); i++)
+               test_uri_parse(&duplicates[i]);
+}
+
 struct dpp_test_vector {
        /* Initiator values */
        const char *i_proto_public;
@@ -546,22 +577,25 @@
        CHECK_FROM_STR(vector->v, tmp, 32);
 }
 
+static bool test_precheck(const void *data)
+{
+       return (l_getrandom_is_supported() &&
+               l_checksum_is_supported(L_CHECKSUM_SHA256, true));
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (l_checksum_is_supported(L_CHECKSUM_SHA256, true) &&
-                                               l_getrandom_is_supported()) {
-               l_test_add("DPP test responder-only key derivation",
-                                               test_key_derivation,
-                                               &responder_only_p256);
-               l_test_add("DPP test mutual key derivation",
-                                               test_key_derivation,
-                                               &mutual_p256);
-               l_test_add("DPP test PKEX key derivation",
-                                               test_pkex_key_derivation,
-                                               &pkex_vector);
-       }
+       add_test("DPP test responder-only key derivation", test_key_derivation,
+                                                       &responder_only_p256);
+       add_test("DPP test mutual key derivation", test_key_derivation,
+                                                       &mutual_p256);
+       add_test("DPP test PKEX key derivation", test_pkex_key_derivation,
+                                                       &pkex_vector);
 
        l_test_add("DPP URI parse", test_uri_parse, &all_values);
        l_test_add("DPP URI no type", test_uri_parse, &no_type);
@@ -576,6 +610,7 @@
        l_test_add("DPP URI bad key", test_uri_parse, &bad_key);
        l_test_add("DPP URI bad channels", test_bad_channels, &bad_channels);
        l_test_add("DPP URI unexpected ID", test_uri_parse, &unexpected_id);
+       l_test_add("DPP URI duplicates", test_duplicate_in_uri, &duplicates);
 
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-eap-mschapv2.c new/iwd-3.8/unit/test-eap-mschapv2.c
--- old/iwd-3.6/unit/test-eap-mschapv2.c        2019-04-03 19:59:41.000000000 
+0200
+++ new/iwd-3.8/unit/test-eap-mschapv2.c        2025-05-07 13:59:43.000000000 
+0200
@@ -131,27 +131,23 @@
        assert(!memcmp(msk, m_session_key, sizeof(m_session_key)));
 }
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_MD4, false);
+}
+
+#define add_test(name, func) l_test_add_func_precheck(name, func, \
+                                                       test_precheck, 0)
 
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_MD4, false)) {
-               printf("MD4 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("MSHAPv2 nt_password-hash",
-                       test_nt_password_hash, NULL);
-       l_test_add("MSHAPv2 generate_nt_response",
-                       test_generate_nt_response, NULL);
-       l_test_add("MSHAPv2 get_master_key",
-                       test_get_master_key, NULL);
-       l_test_add("MSHAPv2 get_asym_state_key",
-                       test_get_asym_key, NULL);
-       l_test_add("MSHAPv2 authenticator_response",
-                       test_authenticator_response, NULL);
+       add_test("MSHAPv2 nt_password-hash", test_nt_password_hash);
+       add_test("MSHAPv2 generate_nt_response", test_generate_nt_response);
+       add_test("MSHAPv2 get_master_key", test_get_master_key);
+       add_test("MSHAPv2 get_asym_state_key", test_get_asym_key);
+       add_test("MSHAPv2 authenticator_response", test_authenticator_response);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-eapol.c new/iwd-3.8/unit/test-eapol.c
--- old/iwd-3.6/unit/test-eapol.c       2024-11-25 19:05:53.000000000 +0100
+++ new/iwd-3.8/unit/test-eapol.c       2025-05-07 13:59:43.000000000 +0200
@@ -3908,6 +3908,38 @@
 #define _IS_ENABLED2(one_or_two_args) _IS_ENABLED3(one_or_two_args true, false)
 #define _IS_ENABLED3(ignore_this, val, ...) val
 
+static bool hash_precheck(const void *data)
+{
+       return (l_checksum_is_supported(L_CHECKSUM_MD5, true) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA1, true));
+}
+
+static bool aes_precheck(const void *data)
+{
+       return (l_cipher_is_supported(L_CIPHER_AES) &&
+               l_checksum_is_supported(L_CHECKSUM_MD5, true) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA1, true));
+}
+
+static bool pkcs8_precheck(const void *data)
+{
+       return (IS_ENABLED(HAVE_PKCS8_SUPPORT) &&
+               l_cipher_is_supported(L_CIPHER_AES) &&
+               l_cipher_is_supported(L_CIPHER_AES_CBC) &&
+               l_cipher_is_supported(L_CIPHER_DES3_EDE_CBC) &&
+               l_checksum_is_supported(L_CHECKSUM_MD5, true) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA1, true) &&
+               l_key_is_supported(L_KEY_FEATURE_CRYPTO) &&
+               l_key_is_supported(L_KEY_FEATURE_RESTRICT));
+}
+
+#define add_hash_test(name, func, data) l_test_add_data_func_precheck(name, \
+                                               data, func, hash_precheck, 0)
+#define add_aes_test(name, func, data) l_test_add_data_func_precheck(name, \
+                                               data, func, aes_precheck, 0)
+#define add_pkcs8_test(name, func, data) l_test_add_data_func_precheck(name, \
+                                               data, func, pkcs8_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
@@ -3977,80 +4009,55 @@
        l_test_add("/EAPoL Key/Key Frame 32",
                        eapol_key_test, &eapol_key_test_32);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_MD5, true) ||
-                       !l_checksum_is_supported(L_CHECKSUM_SHA1, true))
-               goto done;
-
-       l_test_add("/EAPoL Key/MIC Test 1",
+       add_hash_test("/EAPoL Key/MIC Test 1",
                        eapol_key_mic_test, &eapol_key_mic_test_1);
-       l_test_add("/EAPoL Key/MIC Test 2",
+       add_hash_test("/EAPoL Key/MIC Test 2",
                        eapol_key_mic_test, &eapol_key_mic_test_2);
-
-       l_test_add("/EAPoL Key/Calculate MIC Test 1",
+       add_hash_test("/EAPoL Key/Calculate MIC Test 1",
                        eapol_calculate_mic_test, &eapol_calculate_mic_test_1);
 
-       if (!l_cipher_is_supported(L_CIPHER_AES))
-               goto done;
-
-       l_test_add("EAPoL/WPA2 4-Way Handshake",
-                       &eapol_4way_test, NULL);
-
-       l_test_add("EAPoL/WPA2 4-Way & GTK Handshake",
-                       &eapol_wpa2_handshake_test, NULL);
-
-       l_test_add("EAPoL/WPA 4-Way & GTK Handshake",
-                       &eapol_wpa_handshake_test, NULL);
-
-       l_test_add("EAPoL/WPA2 PTK State Machine", &eapol_sm_test_ptk, NULL);
-
-       l_test_add("EAPoL IGTK & 4-Way Handshake",
-                       &eapol_sm_test_igtk, NULL);
-
-       l_test_add("EAPoL/WPA2 PTK & GTK State Machine",
-                       &eapol_sm_test_wpa2_ptk_gtk, NULL);
-
-       l_test_add("EAPoL/WPA PTK & GTK State Machine Test 1",
-                       &eapol_sm_test_wpa_ptk_gtk, NULL);
-
-       l_test_add("EAPoL/WPA PTK & GTK State Machine Test 2",
-                       &eapol_sm_test_wpa_ptk_gtk_2, NULL);
-
-       l_test_add("EAPoL/WPA2 Retransmit Test",
-                       &eapol_sm_wpa2_retransmit_test, NULL);
-
-       if (IS_ENABLED(HAVE_PKCS8_SUPPORT) &&
-                       l_cipher_is_supported(L_CIPHER_DES3_EDE_CBC) &&
-                       l_cipher_is_supported(L_CIPHER_AES_CBC) &&
-                       l_key_is_supported(L_KEY_FEATURE_RESTRICT |
-                                               L_KEY_FEATURE_CRYPTO)) {
-               l_test_add("EAPoL/8021x EAP-TLS & 4-Way Handshake",
-                                       &eapol_sm_test_eap_tls, NULL);
-
-               l_test_add("EAPoL/8021x EAP-TTLS+EAP-MD5 & 4-Way Handshake",
-                                       &eapol_sm_test_eap_ttls_md5, NULL);
-               l_test_add("EAPoL/8021x EAP NAK",
-                               &eapol_sm_test_eap_nak, NULL);
-
-               l_test_add("EAPoL/8021x EAP-TLS subject name match",
-                               &eapol_sm_test_eap_tls_subject_good, NULL);
-               l_test_add("EAPoL/8021x EAP-TLS subject name mismatch",
-                               &eapol_sm_test_eap_tls_subject_bad, NULL);
-               l_test_add("EAPoL/8021x EAP-TLS embedded certs",
-                               &eapol_sm_test_eap_tls_embedded, NULL);
-       }
-
-       l_test_add("EAPoL/FT-Using-PSK 4-Way Handshake",
-                       &eapol_ft_handshake_test, NULL);
-
-       l_test_add("EAPoL/Supplicant+Authenticator 4-Way Handshake",
-                       &eapol_ap_sta_handshake_test, NULL);
-       l_test_add("EAPoL/Supplicant+Authenticator 4-Way Handshake Bad PSK",
-                       &eapol_ap_sta_handshake_bad_psk_test, NULL);
-       l_test_add("EAPoL/Supplicant+Authenticator IP Allocation OK",
-                       &eapol_ap_sta_handshake_ip_alloc_ok_test, NULL);
-       l_test_add("EAPoL/Supplicant+Authenticator IP Allocation no request",
-                       &eapol_ap_sta_handshake_ip_alloc_no_req_test, NULL);
+       add_aes_test("EAPoL/WPA2 4-Way Handshake",
+                               eapol_4way_test, NULL);
+       add_aes_test("EAPoL/WPA2 4-Way & GTK Handshake",
+                               eapol_wpa2_handshake_test, NULL);
+       add_aes_test("EAPoL/WPA 4-Way & GTK Handshake",
+                               eapol_wpa_handshake_test, NULL);
+       add_aes_test("EAPoL/WPA2 PTK State Machine",
+                               eapol_sm_test_ptk, NULL);
+       add_aes_test("EAPoL IGTK & 4-Way Handshake",
+                               eapol_sm_test_igtk, NULL);
+       add_aes_test("EAPoL/WPA2 PTK & GTK State Machine",
+                               eapol_sm_test_wpa2_ptk_gtk, NULL);
+       add_aes_test("EAPoL/WPA PTK & GTK State Machine Test 1",
+                               eapol_sm_test_wpa_ptk_gtk, NULL);
+       add_aes_test("EAPoL/WPA PTK & GTK State Machine Test 2",
+                               eapol_sm_test_wpa_ptk_gtk_2, NULL);
+       add_aes_test("EAPoL/WPA2 Retransmit Test",
+                               eapol_sm_wpa2_retransmit_test, NULL);
+
+       add_pkcs8_test("EAPoL/8021x EAP-TLS & 4-Way Handshake",
+                               eapol_sm_test_eap_tls, NULL);
+       add_pkcs8_test("EAPoL/8021x EAP-TTLS+EAP-MD5 & 4-Way Handshake",
+                               eapol_sm_test_eap_ttls_md5, NULL);
+       add_pkcs8_test("EAPoL/8021x EAP NAK",
+                               eapol_sm_test_eap_nak, NULL);
+       add_pkcs8_test("EAPoL/8021x EAP-TLS subject name match",
+                               eapol_sm_test_eap_tls_subject_good, NULL);
+       add_pkcs8_test("EAPoL/8021x EAP-TLS subject name mismatch",
+                               eapol_sm_test_eap_tls_subject_bad, NULL);
+       add_pkcs8_test("EAPoL/8021x EAP-TLS embedded certs",
+                               eapol_sm_test_eap_tls_embedded, NULL);
+
+       add_aes_test("EAPoL/FT-Using-PSK 4-Way Handshake",
+                       eapol_ft_handshake_test, NULL);
+       add_aes_test("EAPoL/Supplicant+Authenticator 4-Way Handshake",
+                       eapol_ap_sta_handshake_test, NULL);
+       add_aes_test("EAPoL/Supplicant+Authenticator 4-Way Handshake Bad PSK",
+                       eapol_ap_sta_handshake_bad_psk_test, NULL);
+       add_aes_test("EAPoL/Supplicant+Authenticator IP Allocation OK",
+                       eapol_ap_sta_handshake_ip_alloc_ok_test, NULL);
+       add_aes_test("EAPoL/Supplicant+Authenticator IP Allocation no request",
+                       eapol_ap_sta_handshake_ip_alloc_no_req_test, NULL);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-hmac-md5.c new/iwd-3.8/unit/test-hmac-md5.c
--- old/iwd-3.6/unit/test-hmac-md5.c    2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-hmac-md5.c    2025-05-07 13:59:43.000000000 +0200
@@ -81,18 +81,20 @@
        .hmac           = "80070713463e7749b90c2dc24911e275",
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_MD5, true);
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_MD5, true)) {
-               printf("MD5 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/hmac-md5/Test case 1", hmac_test, &test_case_1);
-       l_test_add("/hmac-md5/Test case 2", hmac_test, &test_case_2);
+       add_test("/hmac-md5/Test case 1", hmac_test, &test_case_1);
+       add_test("/hmac-md5/Test case 2", hmac_test, &test_case_2);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-hmac-sha1.c new/iwd-3.8/unit/test-hmac-sha1.c
--- old/iwd-3.6/unit/test-hmac-sha1.c   2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-hmac-sha1.c   2025-05-07 13:59:43.000000000 +0200
@@ -81,18 +81,20 @@
        .hmac           = "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9",
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_SHA1, true);
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA1, true)) {
-               printf("SHA1 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/hmac-sha1/Test case 1", hmac_test, &test_case_1);
-       l_test_add("/hmac-sha1/Test case 2", hmac_test, &test_case_2);
+       add_test("/hmac-sha1/Test case 1", hmac_test, &test_case_1);
+       add_test("/hmac-sha1/Test case 2", hmac_test, &test_case_2);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-hmac-sha256.c new/iwd-3.8/unit/test-hmac-sha256.c
--- old/iwd-3.6/unit/test-hmac-sha256.c 2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-hmac-sha256.c 2025-05-07 13:59:43.000000000 +0200
@@ -83,18 +83,20 @@
                          "ef4d59a14946175997479dbc2d1a3cd8",
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_SHA256, true);
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA256, true)) {
-               printf("SHA256 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/hmac-sha256/Test case 1", hmac_test, &test_case_1);
-       l_test_add("/hmac-sha256/Test case 2", hmac_test, &test_case_2);
+       add_test("/hmac-sha256/Test case 1", hmac_test, &test_case_1);
+       add_test("/hmac-sha256/Test case 2", hmac_test, &test_case_2);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-kdf-sha256.c new/iwd-3.8/unit/test-kdf-sha256.c
--- old/iwd-3.6/unit/test-kdf-sha256.c  2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-kdf-sha256.c  2025-05-07 13:59:43.000000000 +0200
@@ -81,17 +81,19 @@
                          "84f7d2291143d4d4",
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_SHA256, true);
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA256, true)) {
-               printf("SHA256 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/kdf-sha256/Test case 1", kdf_test, &test_case_1);
+       add_test("/kdf-sha256/Test case 1", kdf_test, &test_case_1);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-p2p.c new/iwd-3.8/unit/test-p2p.c
--- old/iwd-3.6/unit/test-p2p.c 2019-11-27 23:09:49.000000000 +0100
+++ new/iwd-3.8/unit/test-p2p.c 2025-05-04 19:35:55.000000000 +0200
@@ -341,7 +341,7 @@
                        .group_caps = 0,
                },
                .listen_channel = {
-                       .country = "XX\x04",
+                       .country = { 'X', 'X', '\x04' },
                        .oper_class = 81,
                        .channel_num = 1,
                },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-prf-sha1.c new/iwd-3.8/unit/test-prf-sha1.c
--- old/iwd-3.6/unit/test-prf-sha1.c    2024-11-07 19:38:10.000000000 +0100
+++ new/iwd-3.8/unit/test-prf-sha1.c    2025-05-07 13:59:43.000000000 +0200
@@ -113,19 +113,21 @@
                          "f7b4abd43d87f0a68f1cbd9e2b6f7607",
 };
 
+static bool test_precheck(const void *data)
+{
+       return l_checksum_is_supported(L_CHECKSUM_SHA1, true);
+}
+
+#define add_test(name, func, data) l_test_add_data_func_precheck(name, data, \
+                                                       func, test_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA1, true)) {
-               printf("SHA1 support missing, skipping...\n");
-               goto done;
-       }
-
-       l_test_add("/prf-sha1/Test case 1", prf_test, &test_case_1);
-       l_test_add("/prf-sha1/Test case 2", prf_test, &test_case_2);
-       l_test_add("/prf-sha1/Test case 3", prf_test, &test_case_3);
+       add_test("/prf-sha1/Test case 1", prf_test, &test_case_1);
+       add_test("/prf-sha1/Test case 2", prf_test, &test_case_2);
+       add_test("/prf-sha1/Test case 3", prf_test, &test_case_3);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-sae.c new/iwd-3.8/unit/test-sae.c
--- old/iwd-3.6/unit/test-sae.c 2024-11-25 19:05:53.000000000 +0100
+++ new/iwd-3.8/unit/test-sae.c 2025-05-07 13:59:43.000000000 +0200
@@ -871,32 +871,29 @@
        l_ecc_point_free(pt);
 }
 
-int main(int argc, char *argv[])
+static bool test_precheck(const void *data)
 {
-       l_test_init(&argc, &argv);
-
-       if (!l_getrandom_is_supported()) {
-               l_info("l_getrandom not supported, skipping...");
-               goto done;
-       }
+       return (l_getrandom_is_supported() &&
+               l_checksum_is_supported(L_CHECKSUM_SHA256, true));
+}
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA256, true)) {
-               l_info("SHA256/HMAC_SHA256 not supported, skipping...");
-               goto done;
-       }
+#define add_test(name, func) l_test_add_func_precheck(name, func, \
+                                                       test_precheck, 0)
 
-       l_test_add("SAE anti-clogging", test_clogging, NULL);
-       l_test_add("SAE early confirm", test_early_confirm, NULL);
-       l_test_add("SAE reflection", test_reflection, NULL);
-       l_test_add("SAE malformed commit", test_malformed_commit, NULL);
-       l_test_add("SAE malformed confirm", test_malformed_confirm, NULL);
-       l_test_add("SAE bad group", test_bad_group, NULL);
-       l_test_add("SAE bad confirm", test_bad_confirm, NULL);
-       l_test_add("SAE confirm after accept", test_confirm_after_accept, NULL);
-       l_test_add("SAE end-to-end", test_end_to_end, NULL);
+int main(int argc, char *argv[])
+{
+       l_test_init(&argc, &argv);
 
-       l_test_add("SAE pt-pwe", test_pt_pwe, NULL);
+       add_test("SAE anti-clogging", test_clogging);
+       add_test("SAE early confirm", test_early_confirm);
+       add_test("SAE reflection", test_reflection);
+       add_test("SAE malformed commit", test_malformed_commit);
+       add_test("SAE malformed confirm", test_malformed_confirm);
+       add_test("SAE bad group", test_bad_group);
+       add_test("SAE bad confirm", test_bad_confirm);
+       add_test("SAE confirm after accept", test_confirm_after_accept);
+       add_test("SAE end-to-end", test_end_to_end);
+       add_test("SAE pt-pwe", test_pt_pwe);
 
-done:
        return l_test_run();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-storage.c new/iwd-3.8/unit/test-storage.c
--- old/iwd-3.6/unit/test-storage.c     1970-01-01 01:00:00.000000000 +0100
+++ new/iwd-3.8/unit/test-storage.c     2025-05-07 13:59:43.000000000 +0200
@@ -0,0 +1,66 @@
+/*
+ *
+ *  Wireless daemon for Linux
+ *
+ *  Copyright (C) 2025  Locus Robotics. All rights reserved.
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+
+#include <ell/ell.h>
+
+#include "src/storage.h"
+
+static bool aes_ctr_supported(const void *data)
+{
+       return l_cipher_is_supported(L_CIPHER_AES_CTR);
+}
+
+static void test_short_encrypted_bytes(const void *data)
+{
+       struct l_settings *settings = l_settings_new();
+       bool changed;
+       int err;
+
+       storage_init((const uint8_t *)"abc123", 6);
+
+       l_settings_set_string(settings, "Security", "EncryptedSecurity", 
"012345");
+       l_settings_set_string(settings, "Security", "EncryptedSalt", "012345");
+
+       err = __storage_decrypt(settings, "mySSID", &changed);
+       assert(err == -EBADMSG);
+
+       l_settings_free(settings);
+
+       storage_exit();
+}
+
+int main(int argc, char *argv[])
+{
+       l_test_init(&argc, &argv);
+
+       l_test_add_func_precheck("/storage/profile encryption",
+                                               test_short_encrypted_bytes,
+                                               aes_ctr_supported, 0);
+
+       return l_test_run();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/iwd-3.6/unit/test-wsc.c new/iwd-3.8/unit/test-wsc.c
--- old/iwd-3.6/unit/test-wsc.c 2024-11-25 19:05:53.000000000 +0100
+++ new/iwd-3.8/unit/test-wsc.c 2025-05-07 13:59:43.000000000 +0200
@@ -2574,6 +2574,39 @@
        .encryption_type = WSC_ENCRYPTION_TYPE_NONE,
 };
 
+static bool getrandom_precheck(const void *data)
+{
+       return l_getrandom_is_supported();
+}
+
+static bool aes_cbc_precheck(const void *data)
+{
+       return l_cipher_is_supported(L_CIPHER_AES_CBC);
+}
+
+static bool key_crypto_precheck(const void *data)
+{
+       return (l_key_is_supported(L_KEY_FEATURE_CRYPTO) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA256, true));
+}
+
+static bool key_dh_precheck(const void *data)
+{
+       return (l_key_is_supported(L_KEY_FEATURE_DH) &&
+               l_key_is_supported(L_KEY_FEATURE_CRYPTO) &&
+               l_checksum_is_supported(L_CHECKSUM_SHA256, true));
+}
+
+#define add_aes_cbc_test(name, func, data) l_test_add_data_func_precheck(name, 
\
+                                                       data, func, \
+                                                       aes_cbc_precheck, 0)
+#define add_crypto_test(name, func, data) l_test_add_data_func_precheck(name, \
+                                                       data, func, \
+                                                       key_crypto_precheck, 0)
+#define add_dh_test(name, func, data) l_test_add_data_func_precheck(name, \
+                                                       data, func, \
+                                                       key_dh_precheck, 0)
+
 int main(int argc, char *argv[])
 {
        l_test_init(&argc, &argv);
@@ -2595,8 +2628,8 @@
        l_test_add("/wsc/pin/valid pin", wsc_test_pin_valid, NULL);
        l_test_add("/wsc/pin/valid checksum", wsc_test_pin_checksum, NULL);
 
-       if (l_getrandom_is_supported())
-               l_test_add("/wsc/pin/generate", wsc_test_pin_generate, NULL);
+       l_test_add_func_precheck("/wsc/pin/generate", wsc_test_pin_generate,
+                                                       getrandom_precheck, 0);
 
        l_test_add("/wsc/gen_uuid/1", wsc_test_uuid_from_addr,
                                        &uuid_from_addr_data_1);
@@ -2607,96 +2640,77 @@
        l_test_add("/wsc/build/m1 1", wsc_test_build_m1, &m1_data_1);
        l_test_add("/wsc/build/m1 2", wsc_test_build_m1, &m1_data_2);
 
-       if (!l_checksum_is_supported(L_CHECKSUM_SHA256, true)) {
-               printf("SHA256 support missing, skipping other tests...\n");
-               goto done;
-       }
-
-       if (!l_key_is_supported(L_KEY_FEATURE_CRYPTO)) {
-               printf("Key crypto not supported, skipping other tests...\n");
-               goto done;
-       }
-
-       if (l_key_is_supported(L_KEY_FEATURE_DH)) {
-               l_test_add("/wsc/parse/m2 1", wsc_test_parse_m2, &m2_data_1);
-               l_test_add("/wsc/parse/m2 2", wsc_test_parse_m2, &m2_data_2);
-       }
-
-       l_test_add("/wsc/build/m2 1", wsc_test_build_m2, &m2_data_1);
-
-       l_test_add("/wsc/parse/m3 1", wsc_test_parse_m3, &m3_data_1);
-       l_test_add("/wsc/build/m3 1", wsc_test_build_m3, &m3_data_1);
-
-       l_test_add("/wsc/parse/m4 1", wsc_test_parse_m4, &m4_data_1);
-       l_test_add("/wsc/build/m4 1", wsc_test_build_m4, &m4_data_1);
-
-       l_test_add("/wsc/parse/m4 encrypted settings 1",
-                       wsc_test_parse_m4_encrypted_settings,
-                       &m4_encrypted_settings_data_1);
-       l_test_add("/wsc/build/m4 encrypted settings 1",
-                       wsc_test_build_m4_encrypted_settings,
-                       &m4_encrypted_settings_data_1);
-
-       l_test_add("/wsc/parse/m5 1", wsc_test_parse_m5, &m5_data_1);
-       l_test_add("/wsc/build/m5 1", wsc_test_build_m5, &m5_data_1);
-
-       l_test_add("/wsc/parse/m6 1", wsc_test_parse_m6, &m6_data_1);
-       l_test_add("/wsc/build/m6 1", wsc_test_build_m6, &m6_data_1);
-
-       l_test_add("/wsc/parse/m6 encrypted settings 1",
-                       wsc_test_parse_m6_encrypted_settings,
-                       &m6_encrypted_settings_data_1);
-       l_test_add("/wsc/build/m6 encrypted settings 1",
-                       wsc_test_build_m6_encrypted_settings,
-                       &m6_encrypted_settings_data_1);
-
-       l_test_add("/wsc/parse/m7 1", wsc_test_parse_m7, &m7_data_1);
-       l_test_add("/wsc/build/m7 1", wsc_test_build_m7, &m7_data_1);
-
-       l_test_add("/wsc/parse/m8 1", wsc_test_parse_m8, &m8_data_1);
-       l_test_add("/wsc/build/m8 1", wsc_test_build_m8, &m8_data_1);
-
-       l_test_add("/wsc/parse/m8 encrypted settings 1",
-                       wsc_test_parse_m8_encrypted_settings,
-                       &m8_encrypted_settings_data_1);
-       l_test_add("/wsc/build/m8 encrypted settings 1",
-                       wsc_test_build_m8_encrypted_settings,
-                       &m8_encrypted_settings_data_1);
+       add_dh_test("/wsc/parse/m2 1", wsc_test_parse_m2, &m2_data_1);
+       add_dh_test("/wsc/parse/m2 2", wsc_test_parse_m2, &m2_data_2);
+
+       add_crypto_test("/wsc/build/m2 1", wsc_test_build_m2, &m2_data_1);
 
-       l_test_add("/wsc/parse/wsc_done 1", wsc_test_parse_wsc_done,
+       add_crypto_test("/wsc/parse/m3 1", wsc_test_parse_m3, &m3_data_1);
+       add_crypto_test("/wsc/build/m3 1", wsc_test_build_m3, &m3_data_1);
+
+       add_crypto_test("/wsc/parse/m4 1", wsc_test_parse_m4, &m4_data_1);
+       add_crypto_test("/wsc/build/m4 1", wsc_test_build_m4, &m4_data_1);
+
+       add_crypto_test("/wsc/parse/m4 encrypted settings 1",
+                                       wsc_test_parse_m4_encrypted_settings,
+                                       &m4_encrypted_settings_data_1);
+       add_crypto_test("/wsc/build/m4 encrypted settings 1",
+                                       wsc_test_build_m4_encrypted_settings,
+                                       &m4_encrypted_settings_data_1);
+
+       add_crypto_test("/wsc/parse/m5 1", wsc_test_parse_m5, &m5_data_1);
+       add_crypto_test("/wsc/build/m5 1", wsc_test_build_m5, &m5_data_1);
+
+       add_crypto_test("/wsc/parse/m6 1", wsc_test_parse_m6, &m6_data_1);
+       add_crypto_test("/wsc/build/m6 1", wsc_test_build_m6, &m6_data_1);
+
+       add_crypto_test("/wsc/parse/m6 encrypted settings 1",
+                                       wsc_test_parse_m6_encrypted_settings,
+                                       &m6_encrypted_settings_data_1);
+       add_crypto_test("/wsc/build/m6 encrypted settings 1",
+                                       wsc_test_build_m6_encrypted_settings,
+                                       &m6_encrypted_settings_data_1);
+
+       add_crypto_test("/wsc/parse/m7 1", wsc_test_parse_m7, &m7_data_1);
+       add_crypto_test("/wsc/build/m7 1", wsc_test_build_m7, &m7_data_1);
+
+       add_crypto_test("/wsc/parse/m8 1", wsc_test_parse_m8, &m8_data_1);
+       add_crypto_test("/wsc/build/m8 1", wsc_test_build_m8, &m8_data_1);
+
+       add_crypto_test("/wsc/parse/m8 encrypted settings 1",
+                                       wsc_test_parse_m8_encrypted_settings,
+                                       &m8_encrypted_settings_data_1);
+       add_crypto_test("/wsc/build/m8 encrypted settings 1",
+                                       wsc_test_build_m8_encrypted_settings,
+                                       &m8_encrypted_settings_data_1);
+
+       add_crypto_test("/wsc/parse/wsc_done 1", wsc_test_parse_wsc_done,
                                                        &wsc_done_data_1);
-       l_test_add("/wsc/build/wsc_done 1", wsc_test_build_wsc_done,
+       add_crypto_test("/wsc/build/wsc_done 1", wsc_test_build_wsc_done,
                                                        &wsc_done_data_1);
 
-       if (!l_key_is_supported(L_KEY_FEATURE_DH))
-               goto done;
-
-       l_test_add("/wsc/diffie-hellman/generate pubkey 1",
+       add_dh_test("/wsc/diffie-hellman/generate pubkey 1",
                                        wsc_test_dh_generate_pubkey,
                                        &dh_generate_pubkey_test_data_1);
-       l_test_add("/wsc/diffie-hellman/generate pubkey 2",
+       add_dh_test("/wsc/diffie-hellman/generate pubkey 2",
                                        wsc_test_dh_generate_pubkey,
                                        &dh_generate_pubkey_test_data_2);
 
-       if (!l_cipher_is_supported(L_CIPHER_AES_CBC))
-               goto done;
-
-       l_test_add("/wsc/handshake/PBC Handshake Test",
+       add_aes_cbc_test("/wsc/handshake/PBC Handshake Test",
                                                wsc_test_pbc_handshake, NULL);
 
-       l_test_add("/wsc/retransmission/no fragmentation",
+       add_aes_cbc_test("/wsc/retransmission/no fragmentation",
                                wsc_test_retransmission_no_fragmentation, NULL);
 
-       l_test_add("/wsc-r/handshake/PBC Handshake WPA2 passphrase test",
-                               wsc_r_test_pbc_handshake,
-                               &wsc_r_test_wpa2_cred_passphrase);
-       l_test_add("/wsc-r/handshake/PBC Handshake WPA2 PSK test",
-                               wsc_r_test_pbc_handshake,
-                               &wsc_r_test_wpa2_cred_psk);
-       l_test_add("/wsc-r/handshake/PBC Handshake Open test",
-                               wsc_r_test_pbc_handshake,
-                               &wsc_r_test_open_cred);
+       add_aes_cbc_test("/wsc-r/handshake/PBC Handshake WPA2 passphrase test",
+                                       wsc_r_test_pbc_handshake,
+                                       &wsc_r_test_wpa2_cred_passphrase);
+       add_aes_cbc_test("/wsc-r/handshake/PBC Handshake WPA2 PSK test",
+                                       wsc_r_test_pbc_handshake,
+                                       &wsc_r_test_wpa2_cred_psk);
+       add_aes_cbc_test("/wsc-r/handshake/PBC Handshake Open test",
+                                       wsc_r_test_pbc_handshake,
+                                       &wsc_r_test_open_cred);
 
-done:
        return l_test_run();
 }

++++++ iwd-dbus_policy.patch ++++++
From: Luigi Baldoni <aloi...@gmx.com>
Date: 2025-06-07 05:54:10 +0000
References: https://bugzilla.suse.com/show_bug.cgi?id=1244137

Resolve a number of errors pointed out by rpmlint.

```
iwd.x86_64: E: dbus-policy-allow-without-destination <allow 
send_interface="net.connman.iwd.Agent"/> 
/usr/share/dbus-1/system.d/iwd-dbus.conf
iwd.x86_64: E: dbus-policy-allow-without-destination <allow 
send_interface="net.connman.iwd.SignalLevelAgent"/> 
/usr/share/dbus-1/system.d/iwd-dbus.conf
iwd.x86_64: E: dbus-policy-allow-without-destination <allow 
send_interface="net.connman.iwd.SharedCodeAgent"/> 
/usr/share/dbus-1/system.d/iwd-dbus.conf
'allow' directives must always specify a 'send_destination'.
```

Index: iwd-3.8/src/iwd-dbus.conf
===================================================================
--- iwd-3.8.orig/src/iwd-dbus.conf
+++ iwd-3.8/src/iwd-dbus.conf
@@ -10,9 +10,9 @@
   <policy user="root">
     <allow own="net.connman.iwd"/>
     <allow send_destination="net.connman.iwd"/>
-    <allow send_interface="net.connman.iwd.Agent"/>
-    <allow send_interface="net.connman.iwd.SignalLevelAgent"/>
-    <allow send_interface="net.connman.iwd.SharedCodeAgent"/>
+    <allow send_interface="net.connman.iwd.Agent" 
send_destination="net.connman.iwd"/>
+    <allow send_interface="net.connman.iwd.SignalLevelAgent" 
send_destination="net.connman.iwd"/>
+    <allow send_interface="net.connman.iwd.SharedCodeAgent" 
send_destination="net.connman.iwd"/>
   </policy>
 
   <policy group="wheel">

Reply via email to