From 2ff99be5dbbc11fd6884c0d2840ccb4bdc819e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 1 Jul 2026 16:39:35 +0200 Subject: [PATCH] goodixmoc: Fix handling of CRC32 in big endian archs --- libfprint/drivers/goodixmoc/goodix.c | 7 ++++--- libfprint/drivers/goodixmoc/goodix_proto.c | 6 +----- meson.build | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 8c7578e5..7dcca91d 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -177,7 +177,7 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer, gx_proto_crc32_calc (transfer->buffer, PACKAGE_HEADER_SIZE + header.len, (uint8_t *) &crc32_calc); if (!fpi_byte_reader_get_uint32_le (&reader, &crc32) || - crc32_calc != crc32) + GUINT32_FROM_LE (crc32_calc) != crc32) { fpi_ssm_mark_failed (transfer->ssm, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, @@ -1618,7 +1618,7 @@ gx_fp_template_delete (FpDevice *device) gsize user_id_len = 0; const guint8 *tid; gsize tid_len = 0; - gsize payload_len = 0; + guint16 payload_len = 0; g_autofree guint8 *payload = NULL; fpi_device_get_delete_data (device, &print); @@ -1631,7 +1631,8 @@ gx_fp_template_delete (FpDevice *device) fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID)); return; } - if (!encode_finger_id (tid, tid_len, user_id, user_id_len, &payload, (guint16 *) &payload_len)) + + if (!encode_finger_id (tid, tid_len, user_id, user_id_len, &payload, &payload_len)) { fpi_device_delete_complete (device, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, diff --git a/libfprint/drivers/goodixmoc/goodix_proto.c b/libfprint/drivers/goodixmoc/goodix_proto.c index 5125d72c..3812ea8d 100644 --- a/libfprint/drivers/goodixmoc/goodix_proto.c +++ b/libfprint/drivers/goodixmoc/goodix_proto.c @@ -493,8 +493,6 @@ static uint8_t sensor_config[26] = { int gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig) { - uint32_t crc32_calc = 0; - if (!pconfig) return -1; memset (pconfig, 0, sizeof (*pconfig)); @@ -503,9 +501,7 @@ gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig) memcpy (&pconfig->config, sensor_config, G_N_ELEMENTS (sensor_config)); pconfig->reserved[0] = 1; - gx_proto_crc32_calc ((uint8_t *) pconfig, sizeof (*pconfig) - PACKAGE_CRC_SIZE, (uint8_t *) &crc32_calc); - - memcpy (pconfig->crc_value, &crc32_calc, PACKAGE_CRC_SIZE); + gx_proto_crc32_calc ((uint8_t *) pconfig, sizeof (*pconfig) - PACKAGE_CRC_SIZE, pconfig->crc_value); return 0; } diff --git a/meson.build b/meson.build index 60910d0e..bced591d 100644 --- a/meson.build +++ b/meson.build @@ -136,7 +136,7 @@ drivers_info = { 'upektc': {}, 'upeksonly': {}, 'upekts': {}, - 'goodixmoc': { 'endian_dependent': true }, + 'goodixmoc': {}, 'nb1010': {}, 'fpcmoc': {}, 'realtek': {},