older json-glib versions can't work with saving or retrieving
HSI security events. Rather than showing non-sensical errors
about too old of a json glib version that are out of context,
just compile this stuff out on the older versions.
This fixes HSI security events showing up too as a result.
If we connect up the device for property changes and then do an update,
we might send the pre-update GVariant data rather than the post-install
FuDevice.
This could mean that any client using the signal to update UI elements
might either flicker between the values, or show the 'wrong' device
version.
This fixes the memory leak below:
$ sudo valgrind -v --leak-check=full fwupdtool get-devices
(...)
==3244345== 133 (64 direct, 69 indirect) bytes in 2 blocks are definitely lost in loss record 2,488 of 2,681
==3244345== at 0x4845899: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3244345== by 0x4C04D59: g_malloc (in /usr/lib/libglib-2.0.so.0.7000.4)
==3244345== by 0x4C1C816: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.7000.4)
==3244345== by 0x4C1CE9E: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.7000.4)
==3244345== by 0x4B84684: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.7000.4)
==3244345== by 0x4B6BB65: ??? (in /usr/lib/libgobject-2.0.so.0.7000.4)
==3244345== by 0x4B6CAF4: g_object_new_with_properties (in /usr/lib/libgobject-2.0.so.0.7000.4)
==3244345== by 0x4B6D659: g_object_new (in /usr/lib/libgobject-2.0.so.0.7000.4)
==3244345== by 0x4AA8969: ??? (in /usr/lib/libgio-2.0.so.0.7000.4)
==3244345== by 0x153967: fu_engine_load_local_metadata_watches (fu-engine.c:7050)
==3244345== by 0x1540FC: fu_engine_load (fu-engine.c:7230)
==3244345== by 0x124D29: fu_util_start_engine (fu-tool.c:262)
(...)
==3244345== LEAK SUMMARY:
==3244345== definitely lost: 64 bytes in 2 blocks
==3244345== indirectly lost: 69 bytes in 2 blocks
==3244345== possibly lost: 1,936 bytes in 8 blocks
==3244345== still reachable: 234,668 bytes in 3,072 blocks
==3244345== suppressed: 0 bytes in 0 blocks
==3244345== Reachable blocks (those to which a pointer was found) are not shown.
==3244345== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==3244345==
==3244345== ERROR SUMMARY: 9 errors from 9 contexts (suppressed: 0 from 0)
The Special Protect Sector structure is 24-bit long.
This replaces the 32-bit integer in union that makes the structure
8-bits too big by an array of 3-bytes.
This fixes the problem when the UEFI update depends on a specific BMC
version -- including the backup BMC device means we checking that both
the primary and the backup were above a specific version.
I don't think it's ever useful to show the backup BMC device, so just
don't include it as an enumerated device.
Fixes https://github.com/fwupd/fwupd/issues/4404