[llvm] [X86][Disassembler] Reject instructions longer than 15 bytes (PR #208277)

Charles Zablit via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 8 10:50:51 PDT 2026


https://github.com/charles-zablit created https://github.com/llvm/llvm-project/pull/208277

An x86 instruction can be at most 15 bytes. The decoder already checks for overruns but only emits an `LLVM_DEBUG` message and still returns `Success`. This patch returns `Fail` instead, so `getInstruction()` never reports a size
that isn't a valid instruction length.

>From be40fd8c63d41b891d5bd391ebc435c34306047d Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Wed, 8 Jul 2026 18:49:49 +0100
Subject: [PATCH] [X86][Disassembler] Reject instructions longer than 15 bytes

---
 llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
index d499dc43dcab6..1d83ee40b9bc1 100644
--- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -1835,8 +1835,10 @@ MCDisassembler::DecodeStatus X86GenericDisassembler::getInstruction(
   Insn.operands = x86OperandSets[Insn.spec->operands];
   Insn.length = Insn.readerCursor - Insn.startLocation;
   Size = Insn.length;
-  if (Size > 15)
+  if (Size > 15) {
     LLVM_DEBUG(dbgs() << "Instruction exceeds 15-byte limit");
+    return Fail;
+  }
 
   bool Ret = translateInstruction(Instr, Insn, this);
   if (!Ret) {



More information about the llvm-commits mailing list