From: Kees Cook <kees@kernel.org>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Andrea Pinski <andrew.pinski@oss.qualcomm.com>,
Jeffrey Law <jefflaw@qti.qualcomm.com>,
Joseph Myers <josmyers@redhat.com>,
Richard Biener <rguenther@suse.de>,
Martin Uecker <uecker@tugraz.at>,
Peter Zijlstra <peterz@infradead.org>,
Uros Bizjak <ubizjak@gmail.com>, Ard Biesheuvel <ardb@kernel.org>,
Jan Hubicka <hubicka@ucw.cz>,
Richard Earnshaw <richard.earnshaw@arm.com>,
Richard Sandiford <richard.sandiford@arm.com>,
Marcus Shawcroft <marcus.shawcroft@arm.com>,
Kyrylo Tkachov <kyrylo.tkachov@arm.com>,
Kito Cheng <kito.cheng@gmail.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Andrew Waterman <andrew@sifive.com>,
Jim Wilson <jim.wilson.gcc@gmail.com>,
Dan Li <ashimida.1990@gmail.com>,
Sami Tolvanen <samitolvanen@google.com>,
Ramon de C Valle <rcvalle@google.com>,
Joao Moreira <joao@overdrivepizza.com>,
Nathan Chancellor <nathan@kernel.org>,
Bill Wendling <morbo@google.com>,
Osterlund Sebastian <sebastian.osterlund@intel.com>,
Constable Scott D <scott.d.constable@intel.com>,
gcc-patches@gcc.gnu.org, linux-hardening@vger.kernel.org
Subject: Re: [PATCH v16 4/7] x86: Add x86_64 Kernel Control Flow Integrity implementation
Date: Mon, 5 Oct 2026 15:38:25 -0700 [thread overview]
Message-ID: <20261005221221.ca9a3d-kees@kernel.org> (raw)
In-Reply-To: <asOBQfGfzUOX4uFq@tucnak>
On Mon, Oct 05, 2026 at 12:51:45PM +0200, Jakub Jelinek wrote:
> What is reason to use movl + addl instead of just cmpl?
> I mean,
> int foo (int *p) { return *p == 0x12345678; }
> is compiled into
> cmpl $305419896, (%rdi)
> so I wonder why you can't just compare -4(%r11) with
> a 32-bit immediate.
> Are you trying to avoid the immediate to be present in the insn
> sequence, so that nothing can do an indirect call to the insn after this
> compare?
Right, though there are actually a couple reasons. And Peter, please
keep me honest here if I've forgotten something...
First is to keep the resulting live register contents free of
the hash value itself so it can't be used for register content
re-use/exfiltration/side-channels[0]. (While the emitted binary for KCFI
has "known" hashes, Linux mutates all hash locations on x86_64 with a
per-boot random value. This is another use of the trap annotation section:
all KCFI call sites are known, and similarly all KCFI targets are known,
so Linux XORs them all. And let me tell you how much fun it was to debug
THAT[1] when I messed up making the targets visible correctly.)
Second is to avoid always injecting a valid target into the insn sequence,
but this is less important because lots of modern hardware will have
IBT active, so it wouldn't actually be a usable entry point.
And then, pragmatically, it's what Linux expects there. The kernel's
KCFI FineIBT implementation[2] and the trap handlers[3] both expect
exactly that sequence of bytes today.
The commit log kind of hints at part of this, but you make a good point
that it is not really well spelled out. Should I improve the commit
log or the comments? It seems lengthy for a code comment, but it's less
discoverable in the commit log.
-Kees
[0] https://lore.kernel.org/lkml/656a965d6241d3a697180cc4d05ada2b@overdrivepizza.com/
[1] https://lore.kernel.org/lkml/20250904034656.3670313-5-kees@kernel.org/
[2] https://elixir.bootlin.com/linux/v7.3-rc2/source/arch/x86/kernel/alternative.c#L1316
[3] https://elixir.bootlin.com/linux/v7.3-rc2/source/arch/x86/include/asm/cfi.h#L47
--
Kees Cook
next prev parent reply other threads:[~2026-10-05 22:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 16:49 [PATCH v16 0/7] Introduce Kernel Control Flow Integrity ABI [PR107048] Kees Cook
2026-09-02 16:49 ` [PATCH v16 1/7] kcfi: Introduce KCFI typeinfo mangling API Kees Cook
2026-09-02 16:49 ` [PATCH v16 2/7] kcfi: Add core Kernel Control Flow Integrity infrastructure Kees Cook
2026-09-02 16:49 ` [PATCH v16 3/7] kcfi: Add regression test suite Kees Cook
2026-09-02 16:49 ` [PATCH v16 4/7] x86: Add x86_64 Kernel Control Flow Integrity implementation Kees Cook
2026-10-05 10:51 ` Jakub Jelinek
2026-10-05 22:38 ` Kees Cook [this message]
2026-09-02 16:49 ` [PATCH v16 5/7] aarch64: Add AArch64 " Kees Cook
2026-09-02 16:49 ` [PATCH v16 6/7] arm: Add ARM 32-bit " Kees Cook
2026-09-02 16:49 ` [PATCH v16 7/7] riscv: Add RISC-V " Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261005221221.ca9a3d-kees@kernel.org \
--to=kees@kernel.org \
--cc=andrew.pinski@oss.qualcomm.com \
--cc=andrew@sifive.com \
--cc=ardb@kernel.org \
--cc=ashimida.1990@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=hubicka@ucw.cz \
--cc=jakub@redhat.com \
--cc=jefflaw@qti.qualcomm.com \
--cc=jim.wilson.gcc@gmail.com \
--cc=joao@overdrivepizza.com \
--cc=josmyers@redhat.com \
--cc=kito.cheng@gmail.com \
--cc=kyrylo.tkachov@arm.com \
--cc=linux-hardening@vger.kernel.org \
--cc=marcus.shawcroft@arm.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=rcvalle@google.com \
--cc=rguenther@suse.de \
--cc=richard.earnshaw@arm.com \
--cc=richard.sandiford@arm.com \
--cc=samitolvanen@google.com \
--cc=scott.d.constable@intel.com \
--cc=sebastian.osterlund@intel.com \
--cc=ubizjak@gmail.com \
--cc=uecker@tugraz.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox