From 431117c003a7796d4e5e963e4f1e06084f4a3e55 Mon Sep 17 00:00:00 2001 From: Evgeny Kolesnikov Date: Thu, 20 Jul 2023 18:40:43 +0200 Subject: [PATCH 1/3] OVAL/probes: Move shared D-Bus code from systemdshared.h to oval_dbus.c/h On top of being ugly this code makes compiler unhappy: OVAL/probes/unix/linux/systemdshared.h:147:12: warning[-Wunused-function]: 'get_all_systemd_units' defined but not used OVAL/probes/unix/linux/systemdshared.h:73:14: warning[-Wunused-function]: 'get_path_by_unit' defined but not used --- src/OVAL/probes/unix/linux/CMakeLists.txt | 9 + .../probes/unix/linux/fwupdsecattr_probe.c | 8 +- src/OVAL/probes/unix/linux/oval_dbus.c | 161 +++++++++++++++++ src/OVAL/probes/unix/linux/oval_dbus.h | 65 +++++++ src/OVAL/probes/unix/linux/systemdshared.h | 166 +----------------- .../unix/linux/systemdunitdependency_probe.c | 8 +- .../unix/linux/systemdunitproperty_probe.c | 8 +- 7 files changed, 248 insertions(+), 177 deletions(-) create mode 100644 src/OVAL/probes/unix/linux/oval_dbus.c create mode 100644 src/OVAL/probes/unix/linux/oval_dbus.h diff --git a/src/OVAL/probes/unix/linux/CMakeLists.txt b/src/OVAL/probes/unix/linux/CMakeLists.txt index 2edd51c6728..37789de1b50 100644 --- a/src/OVAL/probes/unix/linux/CMakeLists.txt +++ b/src/OVAL/probes/unix/linux/CMakeLists.txt @@ -92,6 +92,8 @@ endif() if(OPENSCAP_PROBE_LINUX_SYSTEMDUNITDEPENDENCY OR OPENSCAP_PROBE_LINUX_SYSTEMDUNITPROPERTY) list(APPEND LINUX_PROBES_SOURCES "systemdshared.h" + "oval_dbus.c" + "oval_dbus.h" ) list(APPEND LINUX_PROBES_INCLUDE_DIRECTORIES ${DBUS_INCLUDE_DIRS} @@ -113,10 +115,17 @@ if(OPENSCAP_PROBE_LINUX_SYSTEMDUNITPROPERTY) endif() if(OPENSCAP_PROBE_LINUX_FWUPDSECURITYATTR) + list(APPEND LINUX_PROBES_SOURCES + "oval_dbus.c" + "oval_dbus.h" + ) list(APPEND LINUX_PROBES_SOURCES "fwupdsecattr_probe.c" "fwupdsecattr_probe.h" ) + list(APPEND LINUX_PROBES_INCLUDE_DIRECTORIES + ${DBUS_INCLUDE_DIRS} + ) endif() diff --git a/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c b/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c index f42de632d0d..dffa660db8e 100644 --- a/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c +++ b/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c @@ -61,8 +61,8 @@ #include "probe/entcmp.h" #include "common/debug_priv.h" +#include "oval_dbus.h" #include "fwupdsecattr_probe.h" -#include "systemdshared.h" static struct cachehed hsi_result_cache; @@ -214,7 +214,7 @@ static int get_all_security_attributes(DBusConnection *conn, void(*callback)(cha break; case DBUS_TYPE_STRING: if(!strncmp(property_name, "AppstreamId", strlen("AppstreamId"))) { - appstream_name = dbus_value_to_string(&value_variant); + appstream_name = oval_dbus_value_to_string(&value_variant); dD("Element string: %s", appstream_name); } break; @@ -315,7 +315,7 @@ int fwupdsecattr_probe_main(probe_ctx *ctx, void *arg) DBusConnection *dbus_conn; dbus_error_init(&dbus_error); - dbus_conn = connect_dbus(); + dbus_conn = oval_connect_dbus(); if (dbus_conn == NULL) { dbus_error_free(&dbus_error); @@ -327,7 +327,7 @@ int fwupdsecattr_probe_main(probe_ctx *ctx, void *arg) } int res = get_all_security_attributes(dbus_conn, hsicache_callback, NULL); - disconnect_dbus(dbus_conn); + oval_disconnect_dbus(dbus_conn); if (res) { dbus_error_free(&dbus_error); diff --git a/src/OVAL/probes/unix/linux/oval_dbus.c b/src/OVAL/probes/unix/linux/oval_dbus.c new file mode 100644 index 00000000000..e0fbb85a026 --- /dev/null +++ b/src/OVAL/probes/unix/linux/oval_dbus.c @@ -0,0 +1,161 @@ +/* + * Copyright 2023 Red Hat Inc., Durham, North Carolina. + * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Evgenii Kolesnikov + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "common/util.h" +#include "oscap_helpers.h" +#include "common/debug_priv.h" +#include "oval_dbus.h" + + +char *oval_dbus_value_to_string(DBusMessageIter *iter) +{ + const int arg_type = dbus_message_iter_get_arg_type(iter); + if (dbus_type_is_basic(arg_type)) { + _DBusBasicValue value; + dbus_message_iter_get_basic(iter, &value); + + switch (arg_type) + { + case DBUS_TYPE_BYTE: + return oscap_sprintf("%c", value.byt); + + case DBUS_TYPE_BOOLEAN: + return oscap_strdup(value.bool_val ? "true" : "false"); + + case DBUS_TYPE_INT16: + return oscap_sprintf("%i", value.i16); + + case DBUS_TYPE_UINT16: + return oscap_sprintf("%u", value.u16); + + case DBUS_TYPE_INT32: + return oscap_sprintf("%i", value.i32); + + case DBUS_TYPE_UINT32: + return oscap_sprintf("%u", value.u32); + +#ifdef DBUS_HAVE_INT64 + case DBUS_TYPE_INT64: + return oscap_sprintf("%li", value.i64); + + case DBUS_TYPE_UINT64: + return oscap_sprintf("%lu", value.u64); +#endif + + case DBUS_TYPE_DOUBLE: + return oscap_sprintf("%g", value.dbl); + + case DBUS_TYPE_STRING: + case DBUS_TYPE_OBJECT_PATH: + case DBUS_TYPE_SIGNATURE: + return oscap_strdup(value.str); + + // We skip non-basic types for now + //case DBUS_TYPE_ARRAY: + //case DBUS_TYPE_STRUCT: + //case DBUS_TYPE_DICT_ENTRY: + //case DBUS_TYPE_VARIANT: + //case DBUS_TYPE_UNIX_FD: + // return oscap_sprintf("%i", value.fd); + + default: + dD("Encountered unknown D-Bus basic type: %d!", arg_type); + return oscap_strdup("error, unknown basic type!"); + } + } else if (arg_type == DBUS_TYPE_ARRAY) { + DBusMessageIter array; + dbus_message_iter_recurse(iter, &array); + + char *ret = NULL; + do { + char *element = oval_dbus_value_to_string(&array); + + if (element == NULL) + continue; + + char *old_ret = ret; + if (old_ret == NULL) + ret = oscap_sprintf("%s", element); + else + ret = oscap_sprintf("%s, %s", old_ret, element); + + free(old_ret); + free(element); + } + while (dbus_message_iter_next(&array)); + + return ret; + } + + return NULL; +} + +DBusConnection *oval_connect_dbus(void) +{ + DBusConnection *conn = NULL; + + DBusError err; + dbus_error_init(&err); + + const char *prefix = getenv("OSCAP_PROBE_ROOT"); + if (prefix != NULL) { + char dbus_address[PATH_MAX] = {0}; + snprintf(dbus_address, PATH_MAX, "unix:path=%s/run/dbus/system_bus_socket", prefix); + setenv("DBUS_SYSTEM_BUS_ADDRESS", dbus_address, 0); + /* We won't overwrite DBUS_SYSTEM_BUS_ADDRESS so that + * user could have a way to define some non-standard system bus socket location */ + } + + conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); + if (dbus_error_is_set(&err)) { + dD("Failed to get DBUS_BUS_SYSTEM connection - %s", err.message); + goto cleanup; + } + if (conn == NULL) { + dD("DBusConnection == NULL!"); + goto cleanup; + } + + dbus_bus_register(conn, &err); + if (dbus_error_is_set(&err)) { + dD("Failed to register on dbus - %s", err.message); + goto cleanup; + } + +cleanup: + dbus_error_free(&err); + + return conn; +} + +void oval_disconnect_dbus(DBusConnection *conn) +{ + // NOOP + + // Connections retrieved via dbus_bus_get shall not be destroyed, + // these connections are shared. +} diff --git a/src/OVAL/probes/unix/linux/oval_dbus.h b/src/OVAL/probes/unix/linux/oval_dbus.h new file mode 100644 index 00000000000..432b0288f46 --- /dev/null +++ b/src/OVAL/probes/unix/linux/oval_dbus.h @@ -0,0 +1,65 @@ +/* + * Copyright 2023 Red Hat Inc., Durham, North Carolina. + * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: + * Evgenii Kolesnikov + */ + +#ifndef OPENSCAP_OVAL_DBUS_H_ +#define OPENSCAP_OVAL_DBUS_H_ + +#include + + +// Old versions of libdbus API don't have DBusBasicValue and DBus8ByteStruct +// as a public typedefs. +// These two typedefs were copied from libdbus 1.8 branch, see +// http://cgit.freedesktop.org/dbus/dbus/tree/dbus/dbus-types.h?h=dbus-1.8#n137 +typedef struct +{ + dbus_uint32_t first32; + dbus_uint32_t second32; +} _DBus8ByteStruct; + +typedef union +{ + unsigned char bytes[8]; /**< as 8 individual bytes */ + dbus_int16_t i16; /**< as int16 */ + dbus_uint16_t u16; /**< as int16 */ + dbus_int32_t i32; /**< as int32 */ + dbus_uint32_t u32; /**< as int32 */ + dbus_bool_t bool_val; /**< as boolean */ +#ifdef DBUS_HAVE_INT64 + dbus_int64_t i64; /**< as int64 */ + dbus_uint64_t u64; /**< as int64 */ +#endif + _DBus8ByteStruct eight; /**< as 8-byte struct */ + double dbl; /**< as double */ + unsigned char byt; /**< as byte */ + char *str; /**< as char* (string, object path or signature) */ + int fd; /**< as Unix file descriptor */ +} _DBusBasicValue; + + +char *oval_dbus_value_to_string(DBusMessageIter *iter); + +DBusConnection *oval_connect_dbus(void); + +void oval_disconnect_dbus(DBusConnection *conn); + +#endif diff --git a/src/OVAL/probes/unix/linux/systemdshared.h b/src/OVAL/probes/unix/linux/systemdshared.h index c04b819feea..879ae5be9d6 100644 --- a/src/OVAL/probes/unix/linux/systemdshared.h +++ b/src/OVAL/probes/unix/linux/systemdshared.h @@ -37,38 +37,10 @@ #include #include -#include #include "common/debug_priv.h" #include "oscap_helpers.h" +#include "oval_dbus.h" -// Old versions of libdbus API don't have DBusBasicValue and DBus8ByteStruct -// as a public typedefs. -// These two typedefs were copied from libdbus 1.8 branch, see -// http://cgit.freedesktop.org/dbus/dbus/tree/dbus/dbus-types.h?h=dbus-1.8#n137 -typedef struct -{ - dbus_uint32_t first32; - dbus_uint32_t second32; -} _DBus8ByteStruct; - -typedef union -{ - unsigned char bytes[8]; /**< as 8 individual bytes */ - dbus_int16_t i16; /**< as int16 */ - dbus_uint16_t u16; /**< as int16 */ - dbus_int32_t i32; /**< as int32 */ - dbus_uint32_t u32; /**< as int32 */ - dbus_bool_t bool_val; /**< as boolean */ -#ifdef DBUS_HAVE_INT64 - dbus_int64_t i64; /**< as int64 */ - dbus_uint64_t u64; /**< as int64 */ -#endif - _DBus8ByteStruct eight; /**< as 8-byte struct */ - double dbl; /**< as double */ - unsigned char byt; /**< as byte */ - char *str; /**< as char* (string, object path or signature) */ - int fd; /**< as Unix file descriptor */ -} _DBusBasicValue; static char *get_path_by_unit(DBusConnection *conn, const char *unit) { @@ -237,140 +209,4 @@ static int get_all_systemd_units(DBusConnection* conn, int(*callback)(const char return ret; } -static char *dbus_value_to_string(DBusMessageIter *iter) -{ - const int arg_type = dbus_message_iter_get_arg_type(iter); - if (dbus_type_is_basic(arg_type)) { - _DBusBasicValue value; - dbus_message_iter_get_basic(iter, &value); - - switch (arg_type) - { - case DBUS_TYPE_BYTE: - return oscap_sprintf("%c", value.byt); - - case DBUS_TYPE_BOOLEAN: - return oscap_strdup(value.bool_val ? "true" : "false"); - - case DBUS_TYPE_INT16: - return oscap_sprintf("%i", value.i16); - - case DBUS_TYPE_UINT16: - return oscap_sprintf("%u", value.u16); - - case DBUS_TYPE_INT32: - return oscap_sprintf("%i", value.i32); - - case DBUS_TYPE_UINT32: - return oscap_sprintf("%u", value.u32); - -#ifdef DBUS_HAVE_INT64 - case DBUS_TYPE_INT64: - return oscap_sprintf("%li", value.i64); - - case DBUS_TYPE_UINT64: - return oscap_sprintf("%lu", value.u64); -#endif - - case DBUS_TYPE_DOUBLE: - return oscap_sprintf("%g", value.dbl); - - case DBUS_TYPE_STRING: - case DBUS_TYPE_OBJECT_PATH: - case DBUS_TYPE_SIGNATURE: - return oscap_strdup(value.str); - - // non-basic types - //case DBUS_TYPE_ARRAY: - //case DBUS_TYPE_STRUCT: - //case DBUS_TYPE_DICT_ENTRY: - //case DBUS_TYPE_VARIANT: - - //case DBUS_TYPE_UNIX_FD: - // return oscap_sprintf("%i", value.fd); - - default: - dD("Encountered unknown dbus basic type!"); - return oscap_strdup("error, unknown basic type!"); - } - } - else if (arg_type == DBUS_TYPE_ARRAY) { - DBusMessageIter array; - dbus_message_iter_recurse(iter, &array); - - char *ret = NULL; - do { - char *element = dbus_value_to_string(&array); - - if (element == NULL) - continue; - - char *old_ret = ret; - if (old_ret == NULL) - ret = oscap_sprintf("%s", element); - else - ret = oscap_sprintf("%s, %s", old_ret, element); - - free(old_ret); - free(element); - } - while (dbus_message_iter_next(&array)); - - return ret; - }/* - else if (arg_type == DBUS_TYPE_VARIANT) { - DBusMessageIter inner; - dbus_message_iter_recurse(iter, &inner); - return dbus_value_to_string(&inner); - }*/ - - return NULL; -} - -static DBusConnection *connect_dbus() -{ - DBusConnection *conn = NULL; - - DBusError err; - dbus_error_init(&err); - - const char *prefix = getenv("OSCAP_PROBE_ROOT"); - if (prefix != NULL) { - char dbus_address[PATH_MAX] = {0}; - snprintf(dbus_address, PATH_MAX, "unix:path=%s/run/dbus/system_bus_socket", prefix); - setenv("DBUS_SYSTEM_BUS_ADDRESS", dbus_address, 0); - /* We won't overwrite DBUS_SYSTEM_BUS_ADDRESS so that - * user could have a way to define some non-standard system bus socket location */ - } - - conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); - if (dbus_error_is_set(&err)) { - dD("Failed to get DBUS_BUS_SYSTEM connection - %s", err.message); - goto cleanup; - } - if (conn == NULL) { - dD("DBusConnection == NULL!"); - goto cleanup; - } - - dbus_bus_register(conn, &err); - if (dbus_error_is_set(&err)) { - dD("Failed to register on dbus - %s", err.message); - goto cleanup; - } - -cleanup: - dbus_error_free(&err); - - return conn; -} - -static void disconnect_dbus(DBusConnection *conn) -{ - // NOOP - - // Connections retrieved via dbus_bus_get shall not be destroyed, - // these connections are shared. -} - #endif diff --git a/src/OVAL/probes/unix/linux/systemdunitdependency_probe.c b/src/OVAL/probes/unix/linux/systemdunitdependency_probe.c index fa3c699923d..eb36990fc48 100644 --- a/src/OVAL/probes/unix/linux/systemdunitdependency_probe.c +++ b/src/OVAL/probes/unix/linux/systemdunitdependency_probe.c @@ -104,7 +104,7 @@ static char *get_property_by_unit_path(DBusConnection *conn, const char *unit_pa } dbus_message_iter_recurse(&args, &value_iter); - ret = dbus_value_to_string(&value_iter); + ret = oval_dbus_value_to_string(&value_iter); dbus_message_unref(msg); msg = NULL; @@ -234,7 +234,7 @@ int systemdunitdependency_probe_main(probe_ctx *ctx, void *probe_arg) DBusConnection *dbus_conn; dbus_error_init(&dbus_error); - dbus_conn = connect_dbus(); + dbus_conn = oval_connect_dbus(); if (dbus_conn == NULL) { dbus_error_free(&dbus_error); @@ -257,7 +257,7 @@ int systemdunitdependency_probe_main(probe_ctx *ctx, void *probe_arg) SEXP_free(unit_entity); dbus_error_free(&dbus_error); - disconnect_dbus(dbus_conn); + oval_disconnect_dbus(dbus_conn); - return 0; + return 0; } diff --git a/src/OVAL/probes/unix/linux/systemdunitproperty_probe.c b/src/OVAL/probes/unix/linux/systemdunitproperty_probe.c index 25fa219ca54..c9ae48e3076 100644 --- a/src/OVAL/probes/unix/linux/systemdunitproperty_probe.c +++ b/src/OVAL/probes/unix/linux/systemdunitproperty_probe.c @@ -131,7 +131,7 @@ static int get_all_properties_by_unit_path(DBusConnection *conn, const char *uni dbus_message_iter_recurse(&value_variant, &array); do { - char *element = dbus_value_to_string(&array); + char *element = oval_dbus_value_to_string(&array); if (element == NULL) continue; @@ -144,7 +144,7 @@ static int get_all_properties_by_unit_path(DBusConnection *conn, const char *uni while (dbus_message_iter_next(&array)); } else { - char *property_value = dbus_value_to_string(&value_variant); + char *property_value = oval_dbus_value_to_string(&value_variant); cbret = callback(property_name, property_value, cbarg); free(property_value); } @@ -277,7 +277,7 @@ int systemdunitproperty_probe_main(probe_ctx *ctx, void *probe_arg) DBusConnection *dbus_conn; dbus_error_init(&dbus_error); - dbus_conn = connect_dbus(); + dbus_conn = oval_connect_dbus(); if (dbus_conn == NULL) { dbus_error_free(&dbus_error); @@ -303,7 +303,7 @@ int systemdunitproperty_probe_main(probe_ctx *ctx, void *probe_arg) SEXP_free(unit_entity); SEXP_free(property_entity); dbus_error_free(&dbus_error); - disconnect_dbus(dbus_conn); + oval_disconnect_dbus(dbus_conn); return 0; } From 3ed934e5430e9d9a6dd6bc6aaaa15f9a6ed25bcb Mon Sep 17 00:00:00 2001 From: Evgeny Kolesnikov Date: Thu, 20 Jul 2023 18:44:42 +0200 Subject: [PATCH 2/3] OVAL/probes/fwupdsecattr: Fix resource mgmt problems fwupdsecattr_probe.c:326: leaked_storage: Variable "stream_id" going out of scope leaks the storage it points to. fwupdsecattr_probe.c:238: leaked_storage: Variable "appstream_name" going out of scope leaks the storage it points to. fwupdsecattr_probe.c:217: overwrite_var: Overwriting "appstream_name" in "appstream_name = dbus_value_to_string(&value_variant)" leaks the storage that "appstream_name" points to. --- src/OVAL/probes/unix/linux/fwupdsecattr_probe.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c b/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c index dffa660db8e..f29886ccecb 100644 --- a/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c +++ b/src/OVAL/probes/unix/linux/fwupdsecattr_probe.c @@ -206,7 +206,7 @@ static int get_all_security_attributes(DBusConnection *conn, void(*callback)(cha switch (arg_type) { case DBUS_TYPE_UINT32: - if(strncmp(property_name, "HsiResult", strlen("HsiResult")) == 0) { + if(!strncmp(property_name, "HsiResult", strlen("HsiResult"))) { _DBusBasicValue hsiresult_value; dbus_message_iter_get_basic(&value_variant, &hsiresult_value); hsi_flags = hsiresult_value.u32; @@ -214,6 +214,7 @@ static int get_all_security_attributes(DBusConnection *conn, void(*callback)(cha break; case DBUS_TYPE_STRING: if(!strncmp(property_name, "AppstreamId", strlen("AppstreamId"))) { + free(appstream_name); appstream_name = oval_dbus_value_to_string(&value_variant); dD("Element string: %s", appstream_name); } @@ -222,8 +223,9 @@ static int get_all_security_attributes(DBusConnection *conn, void(*callback)(cha free(property_name); } while (dbus_message_iter_next(&array_entry)); callback(appstream_name, hsi_flags); - } - while (dbus_message_iter_next(&property_iter)); + free(appstream_name); + appstream_name = NULL; + } while (dbus_message_iter_next(&property_iter)); dbus_message_unref(msg); msg = NULL; ret = 0; @@ -323,7 +325,7 @@ int fwupdsecattr_probe_main(probe_ctx *ctx, void *arg) probe_cobj_set_flag(probe_ctx_getresult(ctx), SYSCHAR_FLAG_ERROR); probe_cobj_add_msg(probe_ctx_getresult(ctx), msg); SEXP_free(msg); - return 0; + goto exit; } int res = get_all_security_attributes(dbus_conn, hsicache_callback, NULL); @@ -335,7 +337,7 @@ int fwupdsecattr_probe_main(probe_ctx *ctx, void *arg) probe_cobj_set_flag(probe_ctx_getresult(ctx), SYSCHAR_FLAG_ERROR); probe_cobj_add_msg(probe_ctx_getresult(ctx), msg); SEXP_free(msg); - return 0; + goto exit; } } From 6256a257afe845e16c99bebfa9811cd1a2d47bdf Mon Sep 17 00:00:00 2001 From: Evgeny Kolesnikov Date: Thu, 20 Jul 2023 18:48:47 +0200 Subject: [PATCH 3/3] OVAL/probes/fwupdsecattr: Fix test The 'org.fwupd.hsi.Kernel.Lockdown' attribute could be in any of 'not-valid', 'not-enabled' or 'enabled' states, depending on the system. And we are fine getting any of them. --- tests/probes/fwupdsecattr/test_probes_fwupdsecattr.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/probes/fwupdsecattr/test_probes_fwupdsecattr.xml b/tests/probes/fwupdsecattr/test_probes_fwupdsecattr.xml index 94eb4c22e51..2ceab4d1814 100644 --- a/tests/probes/fwupdsecattr/test_probes_fwupdsecattr.xml +++ b/tests/probes/fwupdsecattr/test_probes_fwupdsecattr.xml @@ -42,7 +42,7 @@ - not-valid|not-enabled + not-valid|not-enabled|enabled