From 35a59629916f07ce4b6f0413697ee55608b5c68f Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Wed, 10 Mar 2021 22:26:18 +0000 Subject: [PATCH] synaptics-mst: Add support for writing firmware --- .../synaptics-mst/fu-synaptics-mst-firmware.c | 24 ++++++++++++++++++ src/fuzzing/firmware/synaptics-mst.dat | Bin 287 -> 276 bytes src/fuzzing/synaptics-mst.builder.xml | 4 +++ 3 files changed, 28 insertions(+) create mode 100644 src/fuzzing/synaptics-mst.builder.xml diff --git a/plugins/synaptics-mst/fu-synaptics-mst-firmware.c b/plugins/synaptics-mst/fu-synaptics-mst-firmware.c index b0a4593fa..3d35f84cb 100644 --- a/plugins/synaptics-mst/fu-synaptics-mst-firmware.c +++ b/plugins/synaptics-mst/fu-synaptics-mst-firmware.c @@ -52,6 +52,29 @@ fu_synaptics_mst_firmware_parse (FuFirmware *firmware, return TRUE; } +static GBytes * +fu_synaptics_mst_firmware_write (FuFirmware *firmware, GError **error) +{ + g_autoptr(GByteArray) buf = g_byte_array_new (); + g_autoptr(GBytes) blob = NULL; + + /* assumed header */ + fu_byte_array_set_size (buf, ADDR_CUSTOMER_ID + sizeof(guint16)); + if (!fu_common_write_uint16_safe (buf->data, buf->len, ADDR_CUSTOMER_ID, + fu_firmware_get_idx (firmware), G_BIG_ENDIAN, + error)) + return NULL; + + /* payload */ + blob = fu_firmware_get_bytes (firmware, error); + if (blob == NULL) + return NULL; + fu_byte_array_append_bytes (buf, blob); + + /* success */ + return g_byte_array_free_to_bytes (g_steal_pointer (&buf)); +} + static void fu_synaptics_mst_firmware_init (FuSynapticsMstFirmware *self) { @@ -63,6 +86,7 @@ fu_synaptics_mst_firmware_class_init (FuSynapticsMstFirmwareClass *klass) FuFirmwareClass *klass_firmware = FU_FIRMWARE_CLASS (klass); klass_firmware->parse = fu_synaptics_mst_firmware_parse; klass_firmware->to_string = fu_synaptics_mst_firmware_to_string; + klass_firmware->write = fu_synaptics_mst_firmware_write; } FuFirmware * diff --git a/src/fuzzing/firmware/synaptics-mst.dat b/src/fuzzing/firmware/synaptics-mst.dat index 598bdd98e7ad6481db51440de4ed1da7f406247d..1e96f3ffebccd610323bfac6f06e0561b4186f0f 100644 GIT binary patch literal 276 TcmZQz7zKzB5Hd+gEK3Cd28aRY literal 287 UcmZQz7zKzB5Hbm?K=6Pp01+zz6#xJL diff --git a/src/fuzzing/synaptics-mst.builder.xml b/src/fuzzing/synaptics-mst.builder.xml new file mode 100644 index 000000000..b4b15752a --- /dev/null +++ b/src/fuzzing/synaptics-mst.builder.xml @@ -0,0 +1,4 @@ + + 0x1234 + ZGF2ZQ== +