[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