From: Richard Sandiford Date: Fri, 3 Dec 2021 11:57:17 +0000 (+0000) Subject: aarch64: Fix uninitialised memory X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=69ce6091e62c3bc2442c2e9b3b2d689266e96b1f;p=binutils-gdb.git aarch64: Fix uninitialised memory AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B are not paired with an error string, but we had an assert that the error was nonnull. Previously this assert was testing uninitialised memory and so could pass or fail arbitrarily. opcodes/ * aarch64-opc.c (verify_mops_pme_sequence): Initialize the error field to null for AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B. * aarch64-dis.c (print_verifier_notes): Move assert. --- diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index fdb87b4526f..c0fb83122af 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -3386,7 +3386,6 @@ print_verifier_notes (aarch64_operand_error *detail, /* The output of the verifier cannot be a fatal error, otherwise the assembly would not have succeeded. We can safely ignore these. */ assert (detail->non_fatal); - assert (detail->error); (*info->fprintf_func) (info->stream, " // note: "); switch (detail->kind) @@ -3405,6 +3404,7 @@ print_verifier_notes (aarch64_operand_error *detail, break; default: + assert (detail->error); (*info->fprintf_func) (info->stream, "%s", detail->error); if (detail->index >= 0) (*info->fprintf_func) (info->stream, " at operand %d", diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index 49dfe98769a..7aa37a5f0ab 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -5522,6 +5522,7 @@ verify_mops_pme_sequence (const struct aarch64_inst *inst, && prev_insn->opcode != opcode - 1) { mismatch_detail->kind = AARCH64_OPDE_EXPECTED_A_AFTER_B; + mismatch_detail->error = NULL; mismatch_detail->index = -1; mismatch_detail->data[0].s = prev_insn->opcode[1].name; mismatch_detail->data[1].s = prev_insn->opcode->name; @@ -5534,6 +5535,7 @@ verify_mops_pme_sequence (const struct aarch64_inst *inst, if (is_new_section || !prev_insn || prev_insn->opcode != opcode - 1) { mismatch_detail->kind = AARCH64_OPDE_A_SHOULD_FOLLOW_B; + mismatch_detail->error = NULL; mismatch_detail->index = -1; mismatch_detail->data[0].s = opcode->name; mismatch_detail->data[1].s = opcode[-1].name;