From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1386) id 40BD53858D37; Fri, 28 Apr 2023 06:24:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40BD53858D37 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Jan Beulich To: bfd-cvs@sourceware.org Subject: [binutils-gdb] x86: limit data passed to prefix_name() X-Act-Checkin: binutils-gdb X-Git-Author: Jan Beulich X-Git-Refname: refs/heads/master X-Git-Oldrev: 6b50f5f4cb8e36e5ecdbba5caf70c7f4ffaa03ad X-Git-Newrev: ffe983ed7a93366a947f7cc9c569e85e63115fe9 Message-Id: <20230428062450.40BD53858D37@sourceware.org> Date: Fri, 28 Apr 2023 06:24:50 +0000 (GMT) X-BeenThere: binutils-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 Apr 2023 06:24:50 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3Dffe983ed7a93= 366a947f7cc9c569e85e63115fe9 commit ffe983ed7a93366a947f7cc9c569e85e63115fe9 Author: Jan Beulich Date: Fri Apr 28 08:24:11 2023 +0200 x86: limit data passed to prefix_name() =20 Make apparent that neither what "ins" points to nor, in particular, that "ins->info->private_data" is actually used in the function. Diff: --- opcodes/i386-dis.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 65a2abdd85e..8650e28267c 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -119,7 +119,6 @@ static bool PREFETCHI_Fixup (instr_info *, int, int); static void ATTRIBUTE_PRINTF_3 i386_dis_printf (const instr_info *, enum disassembler_style, const char *, ...); -static const char *prefix_name (const instr_info *, int, int); =20 /* This character is used to encode style information within the output buffers. See oappend_insert_style for more details. */ @@ -143,6 +142,8 @@ enum address_mode mode_64bit }; =20 +static const char *prefix_name (enum address_mode, int, int); + enum x86_64_isa { amd64 =3D 1, @@ -351,7 +352,8 @@ fetch_error (const instr_info *ins) return -1; =20 if (ins->prefixes || ins->fwait_prefix >=3D 0 || (ins->rex & REX_OPCODE)) - name =3D prefix_name (ins, priv->the_buffer[0], priv->orig_sizeflag); + name =3D prefix_name (ins->address_mode, priv->the_buffer[0], + priv->orig_sizeflag); if (name !=3D NULL) i386_dis_printf (ins, dis_style_mnemonic, "%s", name); else @@ -8924,7 +8926,7 @@ ckprefix (instr_info *ins) prefix byte. */ =20 static const char * -prefix_name (const instr_info *ins, int pref, int sizeflag) +prefix_name (enum address_mode mode, int pref, int sizeflag) { static const char *rexes [16] =3D { @@ -8987,7 +8989,7 @@ prefix_name (const instr_info *ins, int pref, int siz= eflag) case 0x66: return (sizeflag & DFLAG) ? "data16" : "data32"; case 0x67: - if (ins->address_mode =3D=3D mode_64bit) + if (mode =3D=3D mode_64bit) return (sizeflag & AFLAG) ? "addr32" : "addr64"; else return (sizeflag & AFLAG) ? "addr16" : "addr32"; @@ -9764,7 +9766,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int i= ntel_syntax) i++) i386_dis_printf (&ins, dis_style_mnemonic, "%s%s", (i =3D=3D 0 ? "" : " "), - prefix_name (&ins, ins.all_prefixes[i], sizeflag)); + prefix_name (ins.address_mode, ins.all_prefixes[i], + sizeflag)); ret =3D i; goto out; =20 @@ -9791,7 +9794,8 @@ print_insn (bfd_vma pc, disassemble_info *info, int i= ntel_syntax) for (i =3D 0; i < ins.fwait_prefix && ins.all_prefixes[i]; i++) i386_dis_printf (&ins, dis_style_mnemonic, "%s ", - prefix_name (&ins, ins.all_prefixes[i], sizeflag)); + prefix_name (ins.address_mode, ins.all_prefixes[i], + sizeflag)); i386_dis_printf (&ins, dis_style_mnemonic, "fwait"); ret =3D i + 1; goto out; @@ -10033,8 +10037,9 @@ print_insn (bfd_vma pc, disassemble_info *info, int= intel_syntax) for (i =3D 0; i < (int) ARRAY_SIZE (ins.all_prefixes); i++) if (ins.all_prefixes[i]) { - const char *name; - name =3D prefix_name (&ins, ins.all_prefixes[i], orig_sizeflag); + const char *name =3D prefix_name (ins.address_mode, ins.all_prefixes[i], + orig_sizeflag); + if (name =3D=3D NULL) abort (); prefix_length +=3D strlen (name) + 1;