add sanitiy check to verify that the aux buffer is not corrupted

This commit is contained in:
Sergej Schumilo 2023-04-11 18:25:16 +02:00
parent 7bb7b75bf5
commit 60c216bc9e
2 changed files with 14 additions and 5 deletions

View File

@ -64,11 +64,7 @@ void init_auxiliary_buffer(auxilary_buffer_t *auxilary_buffer)
VOLATILE_WRITE_16(auxilary_buffer->header.version, QEMU_PT_VERSION); VOLATILE_WRITE_16(auxilary_buffer->header.version, QEMU_PT_VERSION);
uint16_t hash = uint16_t hash = AUX_BUFFER_HASH;
(sizeof(auxilary_buffer_header_t) + sizeof(auxilary_buffer_cap_t) +
sizeof(auxilary_buffer_config_t) + sizeof(auxilary_buffer_result_t) +
sizeof(auxilary_buffer_misc_t)) %
0xFFFF;
VOLATILE_WRITE_16(auxilary_buffer->header.hash, hash); VOLATILE_WRITE_16(auxilary_buffer->header.hash, hash);
@ -83,6 +79,13 @@ void check_auxiliary_config_buffer(auxilary_buffer_t *auxilary_buffer,
if (changed) { if (changed) {
uint8_t aux_byte; uint8_t aux_byte;
/* sanitiy check to verify that the buffer is not corrupted */
uint16_t _hash = AUX_BUFFER_HASH;
uint64_t _magic = AUX_MAGIC;
assert(memcmp(&auxilary_buffer->header.magic, &_magic, sizeof(auxilary_buffer->header.magic)) == 0);
assert(memcmp(&auxilary_buffer->header.hash, &_hash, sizeof(auxilary_buffer->header.hash)) == 0);
VOLATILE_READ_8(aux_byte, auxilary_buffer->configuration.redqueen_mode); VOLATILE_READ_8(aux_byte, auxilary_buffer->configuration.redqueen_mode);
if (aux_byte) { if (aux_byte) {
/* enable redqueen mode */ /* enable redqueen mode */

View File

@ -152,6 +152,12 @@ typedef struct auxilary_buffer_s {
} __attribute__((packed)) auxilary_buffer_t; } __attribute__((packed)) auxilary_buffer_t;
#define AUX_BUFFER_HASH (( sizeof(auxilary_buffer_header_t) +\
sizeof(auxilary_buffer_cap_t) +\
sizeof(auxilary_buffer_config_t) +\
sizeof(auxilary_buffer_result_t) +\
sizeof(auxilary_buffer_misc_t)) % 0xFFFF)
void init_auxiliary_buffer(auxilary_buffer_t *auxilary_buffer); void init_auxiliary_buffer(auxilary_buffer_t *auxilary_buffer);
void check_auxiliary_config_buffer(auxilary_buffer_t *auxilary_buffer, void check_auxiliary_config_buffer(auxilary_buffer_t *auxilary_buffer,
auxilary_buffer_config_t *shadow_config); auxilary_buffer_config_t *shadow_config);