From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by sourceware.org (Postfix) with ESMTPS id A111C3858C33 for ; Tue, 16 Aug 2022 15:47:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A111C3858C33 Received: by mail-pg1-x52e.google.com with SMTP id l64so9605784pge.0 for ; Tue, 16 Aug 2022 08:47:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=OscZvt/ro4r87YwJ70fXTAbqVSlrFDMpiohd3vomfmQ=; b=i3+166+Bm91nTx4rxgRvivmCEAto9HepMCQeTEFoMqfCyAOnp6XL8TG7gV/JHcES+z 7TvdrbW1OIgMlsTzNnehO7wdyoiSVZ8BPW2BIj6oJ3jxo5+abCN5Cuazxv/IWfhJyYMJ ku+Dj0f2d27WK5OOqfNFgMI+BVVhTAxTjBhd6sAOzzkJOw6m0J5a7IEsGAPrDLVbIt01 3Y9w6o4brnue3OhTt4VHqM3ZXygE0UAih2NAFqar+yBOrgzUyupWqejQNsluZ8UeFTrO TsxzlXFCvtdGQsNXTrkEQi81V99A8ktiA5JitOv4EoIIIMW/DfA5swLGh0cLc7j5lM41 i2jA== X-Gm-Message-State: ACgBeo14/vX3LAkhIFHBLIcElZ/pwImZ+XqS1L9CW2b6opsR+O5fiAWM 76zruEvtulit3r8tJPMqV83s4EZ5Cc4= X-Google-Smtp-Source: AA6agR5+RH6SBsmMW1h3cNgKoSeDE/JrpqRbKoxdyiS1rVzBYv4YEiWfrjCLFmJZY5KFKGwvkiaDvg== X-Received: by 2002:a62:1a14:0:b0:52d:daae:b289 with SMTP id a20-20020a621a14000000b0052ddaaeb289mr21527857pfa.55.1660664866907; Tue, 16 Aug 2022 08:47:46 -0700 (PDT) Received: from gnu-tgl-3.localdomain ([172.56.38.79]) by smtp.gmail.com with ESMTPSA id z127-20020a623385000000b0052d432b4cc0sm8609797pfz.33.2022.08.16.08.47.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Aug 2022 08:47:46 -0700 (PDT) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 65B41C00EF; Tue, 16 Aug 2022 08:47:45 -0700 (PDT) From: "H.J. Lu" To: binutils@sourceware.org Subject: [PATCH] i386: Add MAX_OPERAND_BUFFER_SIZE Date: Tue, 16 Aug 2022 08:47:45 -0700 Message-Id: <20220816154745.516630-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3025.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Aug 2022 15:47:50 -0000 When displaying operands, invalid opcodes may overflow operand buffer due to additional styling characters. Each style is encoded with 3 bytes. Define MAX_OPERAND_BUFFER_SIZE for operand buffer size and increase it from 100 bytes to 128 bytes to accommodate 9 sets of styles in an operand. gas/ PR binutils/29483 * testsuite/gas/i386/i386.exp: Run pr29483. * testsuite/gas/i386/pr29483.d: New file. * testsuite/gas/i386/pr29483.s: Likewise. opcodes/ PR binutils/29483 * i386-dis.c (MAX_OPERAND_BUFFER_SIZE): New. (obuf): Replace 100 with MAX_OPERAND_BUFFER_SIZE. (staging_area): Likewise. (op_out): Likewise. --- gas/testsuite/gas/i386/i386.exp | 1 + gas/testsuite/gas/i386/pr29483.d | 10 ++++++++++ gas/testsuite/gas/i386/pr29483.s | 3 +++ opcodes/i386-dis.c | 9 ++++++--- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/i386/pr29483.d create mode 100644 gas/testsuite/gas/i386/pr29483.s diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 1d27dfc78b8..68576be8d78 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -1346,6 +1346,7 @@ if [gas_64_check] then { run_dump_test ehinterp } run_dump_test pr27198 + run_dump_test pr29483 set ASFLAGS "$old_ASFLAGS --64" diff --git a/gas/testsuite/gas/i386/pr29483.d b/gas/testsuite/gas/i386/pr29483.d new file mode 100644 index 00000000000..6592ecd4dca --- /dev/null +++ b/gas/testsuite/gas/i386/pr29483.d @@ -0,0 +1,10 @@ +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +0+ : + +[a-f0-9]+: 65 62 62 7d 97 a0 94 ff 20 20 20 ae vpscatterdd %xmm26,%gs:-0x51dfdfe0\(%rdi,%xmm23,8\)\{bad\}\{%k7\}\{z\}/\(bad\) +#pass diff --git a/gas/testsuite/gas/i386/pr29483.s b/gas/testsuite/gas/i386/pr29483.s new file mode 100644 index 00000000000..6b133acf17b --- /dev/null +++ b/gas/testsuite/gas/i386/pr29483.s @@ -0,0 +1,3 @@ + .text +pr29483: + .byte 0x65,0x62,0x62,0x7d,0x97,0xa0,0x94,0xff,0x20,0x20,0x20,0xae diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 1761df583da..c1166a4446c 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -119,6 +119,9 @@ static void DistinctDest_Fixup (instr_info *, int, int); buffers. See oappend_insert_style for more details. */ #define STYLE_MARKER_CHAR '\002' +/* The maximum operand buffer size. */ +#define MAX_OPERAND_BUFFER_SIZE 128 + struct dis_private { /* Points to first byte not fetched. */ bfd_byte *max_fetched; @@ -165,7 +168,7 @@ struct instr_info current instruction. */ int evex_used; - char obuf[100]; + char obuf[MAX_OPERAND_BUFFER_SIZE]; char *obufp; char *mnemonicendp; unsigned char *start_codep; @@ -9275,7 +9278,7 @@ i386_dis_printf (instr_info *ins, enum disassembler_style style, va_list ap; enum disassembler_style curr_style = style; char *start, *curr; - char staging_area[100]; + char staging_area[MAX_OPERAND_BUFFER_SIZE]; int res; va_start (ap, fmt); @@ -9377,7 +9380,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) .last_seg_prefix = -1, .fwait_prefix = -1, }; - char op_out[MAX_OPERANDS][100]; + char op_out[MAX_OPERANDS][MAX_OPERAND_BUFFER_SIZE]; priv.orig_sizeflag = AFLAG | DFLAG; if ((info->mach & bfd_mach_i386_i386) != 0) -- 2.37.1