* [PATCH 1/3] gcc-plugins: pinpoint: use quoted includes for internal headers
2026-09-02 23:33 [RFC][PATCH 0/3] SPSLR-v3 cleanups Kees Cook
@ 2026-09-02 23:33 ` Kees Cook
2026-09-02 23:33 ` [PATCH 2/3] gcc-plugins: sanemaker: make the no-op trap macros statement-safe Kees Cook
2026-09-02 23:33 ` [PATCH 3/3] gcc-plugins: pinpoint: move to subdirectory Kees Cook
2 siblings, 0 replies; 4+ messages in thread
From: Kees Cook @ 2026-09-02 23:33 UTC (permalink / raw)
To: York Jasper Niebuhr; +Cc: Kees Cook, Ard Biesheuvel, franzen, linux-hardening
Pinpoint includes its own headers with angle brackets:
#include <pinpoint.h>
#include <passes.h>
Angle brackets search only the -I paths. This happens to work because
plugin_cxxflags carries -I $(obj), and for an in-tree build $(obj) is
the same directory as $(src). For an O= build it is not, and the plugin
fails to compile:
scripts/gcc-plugins/asm_offset_pass.c:3:10: fatal error: pinpoint.h:
No such file or directory
That -I $(obj) exists for randstruct's *generated* randomize_layout_seed.h,
which really does live in the build tree; pinpoint's headers are ordinary
source files.
Switch the 19 headers pinpoint owns to quoted includes, which search the
including file's directory first and therefore need no -I at all. GCC's
own plugin headers (tree.h, ssa.h, ...) keep angle brackets.
Build tested ARCH=x86_64 defconfig+CONFIG_SPSLR=y with the patched
GCC 16.1.0 / GAS 2.46.1 toolchain: scripts/gcc-plugins/ now builds with
O= (out-of-tree), which it did not before. A full kernel build still
needs the following patch, for an unrelated reason.
Assisted-by: Claude:claude-opus-5[1m]
Signed-off-by: Kees Cook <kees@kernel.org>
---
scripts/gcc-plugins/asm_offset_pass.c | 6 +++---
scripts/gcc-plugins/dpin_registry.c | 6 +++---
scripts/gcc-plugins/dpin_registry.h | 2 +-
scripts/gcc-plugins/ipin_registry.c | 6 +++---
scripts/gcc-plugins/ipin_registry.h | 6 +++---
scripts/gcc-plugins/layout_hash.c | 6 +++---
scripts/gcc-plugins/layout_hash.h | 2 +-
scripts/gcc-plugins/on_finish_decl.c | 4 ++--
scripts/gcc-plugins/on_finish_type.c | 4 ++--
scripts/gcc-plugins/on_finish_unit.c | 16 ++++++++--------
scripts/gcc-plugins/on_preserve_component_ref.c | 10 +++++-----
scripts/gcc-plugins/on_register_attributes.c | 4 ++--
scripts/gcc-plugins/on_start_unit.c | 8 ++++----
scripts/gcc-plugins/passes.h | 4 ++--
scripts/gcc-plugins/pinpoint.c | 8 ++++----
scripts/gcc-plugins/pinpoint.h | 4 ++--
.../gcc-plugins/rtl_ipin_survival_scan_pass.c | 8 ++++----
scripts/gcc-plugins/safe-attribs.h | 2 +-
scripts/gcc-plugins/safe-diagnostic.h | 2 +-
scripts/gcc-plugins/safe-ggc.h | 2 +-
scripts/gcc-plugins/safe-gimple.h | 4 ++--
scripts/gcc-plugins/safe-input.h | 2 +-
scripts/gcc-plugins/safe-langhooks.h | 2 +-
scripts/gcc-plugins/safe-md5.h | 2 +-
scripts/gcc-plugins/safe-output.h | 2 +-
scripts/gcc-plugins/safe-plugin-version.h | 2 +-
scripts/gcc-plugins/safe-rtl.h | 2 +-
scripts/gcc-plugins/safe-tree.h | 2 +-
scripts/gcc-plugins/separate_offset_pass.c | 8 ++++----
scripts/gcc-plugins/target_hash_builtin_pass.c | 12 ++++++------
scripts/gcc-plugins/target_registry.c | 10 +++++-----
scripts/gcc-plugins/target_registry.h | 2 +-
32 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/scripts/gcc-plugins/asm_offset_pass.c b/scripts/gcc-plugins/asm_offset_pass.c
index 5a1be25f1f2c..1e9b864e6df2 100644
--- a/scripts/gcc-plugins/asm_offset_pass.c
+++ b/scripts/gcc-plugins/asm_offset_pass.c
@@ -1,8 +1,8 @@
#include <unordered_map>
-#include <pinpoint.h>
-#include <passes.h>
-#include <ipin_registry.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "ipin_registry.h"
/*
* gsi_replace() changes the statement, but SSA names that were defined by the
diff --git a/scripts/gcc-plugins/dpin_registry.c b/scripts/gcc-plugins/dpin_registry.c
index 415f7befe296..1c24e1049fa9 100644
--- a/scripts/gcc-plugins/dpin_registry.c
+++ b/scripts/gcc-plugins/dpin_registry.c
@@ -1,9 +1,9 @@
#include <string>
#include <unordered_set>
-#include <pinpoint.h>
-#include <dpin_registry.h>
-#include <target_registry.h>
+#include "pinpoint.h"
+#include "dpin_registry.h"
+#include "target_registry.h"
static std::list<dpin> pins;
static std::unordered_set<std::string> seen_dpin_symbols;
diff --git a/scripts/gcc-plugins/dpin_registry.h b/scripts/gcc-plugins/dpin_registry.h
index 500535ce0bf2..35eebde04fa2 100644
--- a/scripts/gcc-plugins/dpin_registry.h
+++ b/scripts/gcc-plugins/dpin_registry.h
@@ -4,7 +4,7 @@
#include <list>
#include <string>
-#include <safe-tree.h>
+#include "safe-tree.h"
struct dpin {
struct component {
diff --git a/scripts/gcc-plugins/ipin_registry.c b/scripts/gcc-plugins/ipin_registry.c
index 41e2d525a08f..533eab7e7ebd 100644
--- a/scripts/gcc-plugins/ipin_registry.c
+++ b/scripts/gcc-plugins/ipin_registry.c
@@ -1,9 +1,9 @@
#include <cstring>
#include <algorithm>
-#include <pinpoint.h>
-#include <ipin_registry.h>
-#include <target_registry.h>
+#include "pinpoint.h"
+#include "ipin_registry.h"
+#include "target_registry.h"
#define PINPOINT_SEPARATOR "__spslr_offsetof"
#define PINPOINT_IPIN_MARKER "spslr_ipin_marker"
diff --git a/scripts/gcc-plugins/ipin_registry.h b/scripts/gcc-plugins/ipin_registry.h
index 0fff090ed6e7..528b877f06da 100644
--- a/scripts/gcc-plugins/ipin_registry.h
+++ b/scripts/gcc-plugins/ipin_registry.h
@@ -4,9 +4,9 @@
#include <limits>
#include <map>
-#include <safe-tree.h>
-#include <safe-gimple.h>
-#include <safe-rtl.h>
+#include "safe-tree.h"
+#include "safe-gimple.h"
+#include "safe-rtl.h"
struct ipin {
enum class state { pending, separator, pin, live };
diff --git a/scripts/gcc-plugins/layout_hash.c b/scripts/gcc-plugins/layout_hash.c
index 6200bd037f54..de939c6d10c0 100644
--- a/scripts/gcc-plugins/layout_hash.c
+++ b/scripts/gcc-plugins/layout_hash.c
@@ -2,10 +2,10 @@
#include <cstring>
#include <string>
-#include <layout_hash.h>
-#include <target_registry.h>
+#include "layout_hash.h"
+#include "target_registry.h"
-#include <safe-md5.h>
+#include "safe-md5.h"
namespace
{
diff --git a/scripts/gcc-plugins/layout_hash.h b/scripts/gcc-plugins/layout_hash.h
index b4b660bd0b96..213654f77043 100644
--- a/scripts/gcc-plugins/layout_hash.h
+++ b/scripts/gcc-plugins/layout_hash.h
@@ -3,6 +3,6 @@
#include <array>
#include <cstddef>
-#include <safe-tree.h>
+#include "safe-tree.h"
std::array<std::byte, 16> compute_layout_hash(tree target_type);
diff --git a/scripts/gcc-plugins/on_finish_decl.c b/scripts/gcc-plugins/on_finish_decl.c
index 6781d2516e75..c451b0156830 100644
--- a/scripts/gcc-plugins/on_finish_decl.c
+++ b/scripts/gcc-plugins/on_finish_decl.c
@@ -1,5 +1,5 @@
-#include <passes.h>
-#include <dpin_registry.h>
+#include "passes.h"
+#include "dpin_registry.h"
void on_finish_decl(void *plugin_data, void *user_data)
{
diff --git a/scripts/gcc-plugins/on_finish_type.c b/scripts/gcc-plugins/on_finish_type.c
index 023470f8cc8c..0722931a9532 100644
--- a/scripts/gcc-plugins/on_finish_type.c
+++ b/scripts/gcc-plugins/on_finish_type.c
@@ -1,5 +1,5 @@
-#include <passes.h>
-#include <target_registry.h>
+#include "passes.h"
+#include "target_registry.h"
void on_finish_type(void *plugin_data, void *user_data)
{
diff --git a/scripts/gcc-plugins/on_finish_unit.c b/scripts/gcc-plugins/on_finish_unit.c
index 5229dbb53c52..3504ad0b8482 100644
--- a/scripts/gcc-plugins/on_finish_unit.c
+++ b/scripts/gcc-plugins/on_finish_unit.c
@@ -4,14 +4,14 @@
#include <algorithm>
#include <unordered_map>
-#include <pinpoint.h>
-#include <passes.h>
-#include <ipin_registry.h>
-#include <dpin_registry.h>
-#include <serialize.h>
-#include <target_registry.h>
-#include <safe-input.h>
-#include <safe-output.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "ipin_registry.h"
+#include "dpin_registry.h"
+#include "serialize.h"
+#include "target_registry.h"
+#include "safe-input.h"
+#include "safe-output.h"
/*
* Finish-unit emits the per-compilation-unit metadata into the object asm.
diff --git a/scripts/gcc-plugins/on_preserve_component_ref.c b/scripts/gcc-plugins/on_preserve_component_ref.c
index 133269438914..93e69ab804ec 100644
--- a/scripts/gcc-plugins/on_preserve_component_ref.c
+++ b/scripts/gcc-plugins/on_preserve_component_ref.c
@@ -1,8 +1,8 @@
-#include <pinpoint.h>
-#include <passes.h>
-#include <ipin_registry.h>
-#include <target_registry.h>
-#include <safe-tree.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "ipin_registry.h"
+#include "target_registry.h"
+#include "safe-tree.h"
static tree materialize_c_rvalue(location_t loc, tree expr)
{
diff --git a/scripts/gcc-plugins/on_register_attributes.c b/scripts/gcc-plugins/on_register_attributes.c
index 221693a1c465..9e2ae6104d57 100644
--- a/scripts/gcc-plugins/on_register_attributes.c
+++ b/scripts/gcc-plugins/on_register_attributes.c
@@ -1,5 +1,5 @@
-#include <pinpoint.h>
-#include <passes.h>
+#include "pinpoint.h"
+#include "passes.h"
static tree check_spslr_attribute(tree *node, tree name, tree args, int flags,
bool *no_add_attrs)
diff --git a/scripts/gcc-plugins/on_start_unit.c b/scripts/gcc-plugins/on_start_unit.c
index dc8917209de7..59b9de9a8178 100644
--- a/scripts/gcc-plugins/on_start_unit.c
+++ b/scripts/gcc-plugins/on_start_unit.c
@@ -1,7 +1,7 @@
-#include <passes.h>
-#include <ipin_registry.h>
-#include <dpin_registry.h>
-#include <target_registry.h>
+#include "passes.h"
+#include "ipin_registry.h"
+#include "dpin_registry.h"
+#include "target_registry.h"
void on_start_unit(void *plugin_data, void *user_data)
{
diff --git a/scripts/gcc-plugins/passes.h b/scripts/gcc-plugins/passes.h
index f22949330e80..cd32cc6bb1e9 100644
--- a/scripts/gcc-plugins/passes.h
+++ b/scripts/gcc-plugins/passes.h
@@ -1,7 +1,7 @@
#pragma once
-#include <safe-gimple.h>
-#include <safe-rtl.h>
+#include "safe-gimple.h"
+#include "safe-rtl.h"
void on_register_attributes(void *plugin_data, void *user_data);
void on_finish_type(void *plugin_data, void *user_data);
diff --git a/scripts/gcc-plugins/pinpoint.c b/scripts/gcc-plugins/pinpoint.c
index 619487fdb53f..7245f079989e 100644
--- a/scripts/gcc-plugins/pinpoint.c
+++ b/scripts/gcc-plugins/pinpoint.c
@@ -1,10 +1,10 @@
#include <filesystem>
#include <string>
-#include <pinpoint.h>
-#include <passes.h>
-#include <safe-gcc-plugin.h>
-#include <safe-plugin-version.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "safe-gcc-plugin.h"
+#include "safe-plugin-version.h"
int plugin_is_GPL_compatible;
diff --git a/scripts/gcc-plugins/pinpoint.h b/scripts/gcc-plugins/pinpoint.h
index 7f88cda32f48..52a72e587057 100644
--- a/scripts/gcc-plugins/pinpoint.h
+++ b/scripts/gcc-plugins/pinpoint.h
@@ -1,7 +1,7 @@
#pragma once
#include <cstdio>
-#include <safe-diagnostic.h>
-#include <safe-ggc.h>
+#include "safe-diagnostic.h"
+#include "safe-ggc.h"
#define SPSLR_ATTRIBUTE "spslr"
#define SPSLR_FIELD_FIXED_ATTRIBUTE "spslr_field_fixed"
diff --git a/scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c b/scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c
index a30f709f6fb6..a9c88d456a46 100644
--- a/scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c
+++ b/scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c
@@ -1,7 +1,7 @@
-#include <pinpoint.h>
-#include <passes.h>
-#include <ipin_registry.h>
-#include <safe-rtl.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "ipin_registry.h"
+#include "safe-rtl.h"
static const pass_data rtl_ipin_survival_scan_pass_data = {
RTL_PASS,
diff --git a/scripts/gcc-plugins/safe-attribs.h b/scripts/gcc-plugins/safe-attribs.h
index 2d62fe75c72b..0b99515c41a8 100644
--- a/scripts/gcc-plugins/safe-attribs.h
+++ b/scripts/gcc-plugins/safe-attribs.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_ATTRIBS_H
#define SAFEGCC_ATTRIBS_H
diff --git a/scripts/gcc-plugins/safe-diagnostic.h b/scripts/gcc-plugins/safe-diagnostic.h
index c58b739d88ed..d52589b87379 100644
--- a/scripts/gcc-plugins/safe-diagnostic.h
+++ b/scripts/gcc-plugins/safe-diagnostic.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_DIAGNOSTIC_H
#define SAFEGCC_DIAGNOSTIC_H
diff --git a/scripts/gcc-plugins/safe-ggc.h b/scripts/gcc-plugins/safe-ggc.h
index 5df62ad492e8..d5a129e365b7 100644
--- a/scripts/gcc-plugins/safe-ggc.h
+++ b/scripts/gcc-plugins/safe-ggc.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_GGC_H
#define SAFEGCC_GGC_H
diff --git a/scripts/gcc-plugins/safe-gimple.h b/scripts/gcc-plugins/safe-gimple.h
index 2eb0bae2f0a4..e2981947822a 100644
--- a/scripts/gcc-plugins/safe-gimple.h
+++ b/scripts/gcc-plugins/safe-gimple.h
@@ -1,5 +1,5 @@
-#include <safe-gcc-plugin.h>
-#include <safe-tree.h>
+#include "safe-gcc-plugin.h"
+#include "safe-tree.h"
#ifndef SAFEGCC_GIMPLE_H
#define SAFEGCC_GIMPLE_H
diff --git a/scripts/gcc-plugins/safe-input.h b/scripts/gcc-plugins/safe-input.h
index fe24435830fe..0ff64a012bab 100644
--- a/scripts/gcc-plugins/safe-input.h
+++ b/scripts/gcc-plugins/safe-input.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_INPUT_H
#define SAFEGCC_INPUT_H
diff --git a/scripts/gcc-plugins/safe-langhooks.h b/scripts/gcc-plugins/safe-langhooks.h
index 3fbea6ccb579..b62bad0b770f 100644
--- a/scripts/gcc-plugins/safe-langhooks.h
+++ b/scripts/gcc-plugins/safe-langhooks.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_LANGHOOKS_H
#define SAFEGCC_LANGHOOKS_H
diff --git a/scripts/gcc-plugins/safe-md5.h b/scripts/gcc-plugins/safe-md5.h
index 8341cb193467..0140b0a4df24 100644
--- a/scripts/gcc-plugins/safe-md5.h
+++ b/scripts/gcc-plugins/safe-md5.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_MD5_H
#define SAFEGCC_MD5_H
diff --git a/scripts/gcc-plugins/safe-output.h b/scripts/gcc-plugins/safe-output.h
index 5da7fec494be..fc0a2bbe8ec0 100644
--- a/scripts/gcc-plugins/safe-output.h
+++ b/scripts/gcc-plugins/safe-output.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_OUTPUT_H
#define SAFEGCC_OUTPUT_H
diff --git a/scripts/gcc-plugins/safe-plugin-version.h b/scripts/gcc-plugins/safe-plugin-version.h
index e43a1689da8c..2fd308b7e19a 100644
--- a/scripts/gcc-plugins/safe-plugin-version.h
+++ b/scripts/gcc-plugins/safe-plugin-version.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_PLUGIN_VERSION_H
#define SAFEGCC_PLUGIN_VERSION_H
diff --git a/scripts/gcc-plugins/safe-rtl.h b/scripts/gcc-plugins/safe-rtl.h
index f89decdb1d18..7720bf57ef0d 100644
--- a/scripts/gcc-plugins/safe-rtl.h
+++ b/scripts/gcc-plugins/safe-rtl.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_RTL_H
#define SAFEGCC_RTL_H
diff --git a/scripts/gcc-plugins/safe-tree.h b/scripts/gcc-plugins/safe-tree.h
index d968f8b9675a..9b4851ec3afa 100644
--- a/scripts/gcc-plugins/safe-tree.h
+++ b/scripts/gcc-plugins/safe-tree.h
@@ -1,4 +1,4 @@
-#include <safe-gcc-plugin.h>
+#include "safe-gcc-plugin.h"
#ifndef SAFEGCC_TREE_H
#define SAFEGCC_TREE_H
diff --git a/scripts/gcc-plugins/separate_offset_pass.c b/scripts/gcc-plugins/separate_offset_pass.c
index 9598f1148896..cbb4d8a68c3a 100644
--- a/scripts/gcc-plugins/separate_offset_pass.c
+++ b/scripts/gcc-plugins/separate_offset_pass.c
@@ -1,10 +1,10 @@
#include <functional>
#include <list>
-#include <pinpoint.h>
-#include <passes.h>
-#include <ipin_registry.h>
-#include <target_registry.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "ipin_registry.h"
+#include "target_registry.h"
/*
* AccessChain flattens nested COMPONENT_REF / ARRAY_REF expressions from
diff --git a/scripts/gcc-plugins/target_hash_builtin_pass.c b/scripts/gcc-plugins/target_hash_builtin_pass.c
index d35b8df9abbc..bf1f61a0d342 100644
--- a/scripts/gcc-plugins/target_hash_builtin_pass.c
+++ b/scripts/gcc-plugins/target_hash_builtin_pass.c
@@ -2,13 +2,13 @@
#include <map>
#include <string>
-#include <pinpoint.h>
-#include <passes.h>
-#include <serialize.h>
-#include <target_registry.h>
+#include "pinpoint.h"
+#include "passes.h"
+#include "serialize.h"
+#include "target_registry.h"
-#include <safe-gimple.h>
-#include <safe-tree.h>
+#include "safe-gimple.h"
+#include "safe-tree.h"
namespace
{
diff --git a/scripts/gcc-plugins/target_registry.c b/scripts/gcc-plugins/target_registry.c
index a692520467bd..dc41cec197e3 100644
--- a/scripts/gcc-plugins/target_registry.c
+++ b/scripts/gcc-plugins/target_registry.c
@@ -3,12 +3,12 @@
#include <set>
#include <vector>
-#include <pinpoint.h>
-#include <target_registry.h>
-#include <layout_hash.h>
+#include "pinpoint.h"
+#include "target_registry.h"
+#include "layout_hash.h"
-#include <safe-attribs.h>
-#include <safe-langhooks.h>
+#include "safe-attribs.h"
+#include "safe-langhooks.h"
struct validated_target {
std::vector<target::compressed_field> fields{};
diff --git a/scripts/gcc-plugins/target_registry.h b/scripts/gcc-plugins/target_registry.h
index 5531cefffb38..e58a9fab1c5b 100644
--- a/scripts/gcc-plugins/target_registry.h
+++ b/scripts/gcc-plugins/target_registry.h
@@ -6,7 +6,7 @@
#include <vector>
#include <array>
-#include <safe-tree.h>
+#include "safe-tree.h"
struct target {
struct compressed_field {
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/3] gcc-plugins: sanemaker: make the no-op trap macros statement-safe
2026-09-02 23:33 [RFC][PATCH 0/3] SPSLR-v3 cleanups Kees Cook
2026-09-02 23:33 ` [PATCH 1/3] gcc-plugins: pinpoint: use quoted includes for internal headers Kees Cook
@ 2026-09-02 23:33 ` Kees Cook
2026-09-02 23:33 ` [PATCH 3/3] gcc-plugins: pinpoint: move to subdirectory Kees Cook
2 siblings, 0 replies; 4+ messages in thread
From: Kees Cook @ 2026-09-02 23:33 UTC (permalink / raw)
To: York Jasper Niebuhr; +Cc: Kees Cook, Ard Biesheuvel, franzen, linux-hardening
With CONFIG_SPSLR=y and CONFIG_SANEMAKER=n -- the baseline configuration
named in the cover letter -- the build fails:
kernel/module/main.c:105:63: error: suggest braces around empty body
in an 'if' statement [-Werror=empty-body]
105 | (const char *)text->base + text->size);
cc1: all warnings being treated as errors
The sanemaker_*() stubs expand to nothing when CONFIG_SANEMAKER is off,
and sanemaker_register_module_image() uses them as the body of an if:
if (text->base && text->size)
sanemaker_new_image_text(...);
which leaves "if (cond) ;".
Give the stubs the usual do { } while (0) body so they are valid
statements. No change when CONFIG_SANEMAKER=y.
Build tested ARCH=x86_64 defconfig+CONFIG_SPSLR=y with the patched
GCC 16.1.0 / GAS 2.46.1 toolchain, CONFIG_SANEMAKER unset.
Assisted-by: Claude:claude-opus-5[1m]
Signed-off-by: Kees Cook <kees@kernel.org>
---
include/sanemaker/traps.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/sanemaker/traps.h b/include/sanemaker/traps.h
index bcb75198b18b..b9a39584de27 100644
--- a/include/sanemaker/traps.h
+++ b/include/sanemaker/traps.h
@@ -17,7 +17,7 @@ void __sanemaker_target_tag_trap(const void *ptr, const unsigned char *target);
#else
-#define sanemaker_target_tag(ptr, type)
+#define sanemaker_target_tag(ptr, type) do { } while (0)
#endif
@@ -32,7 +32,7 @@ void __sanemaker_target_untag_trap(const void *ptr);
#else
-#define sanemaker_target_untag(ptr)
+#define sanemaker_target_untag(ptr) do { } while (0)
#endif
@@ -50,7 +50,7 @@ void __sanemaker_finish_layout_trap(const void *fields,
#else
-#define sanemaker_finish_layout(fields, target)
+#define sanemaker_finish_layout(fields, target) do { } while (0)
#endif
@@ -90,7 +90,7 @@ void __sanemaker_signal_trap(sanemaker_signal_t signal);
#else
-#define sanemaker_signal(signal)
+#define sanemaker_signal(signal) do { } while (0)
#endif
@@ -125,10 +125,10 @@ void __sanemaker_drop_image_text_trap(const char *image, const void *begin,
#else
-#define sanemaker_new_image(name, base)
-#define sanemaker_new_image_text(image, begin, end)
-#define sanemaker_drop_image(image)
-#define sanemaker_drop_image_text(image, begin, end)
+#define sanemaker_new_image(name, base) do { } while (0)
+#define sanemaker_new_image_text(image, begin, end) do { } while (0)
+#define sanemaker_drop_image(image) do { } while (0)
+#define sanemaker_drop_image_text(image, begin, end) do { } while (0)
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 3/3] gcc-plugins: pinpoint: move to subdirectory
2026-09-02 23:33 [RFC][PATCH 0/3] SPSLR-v3 cleanups Kees Cook
2026-09-02 23:33 ` [PATCH 1/3] gcc-plugins: pinpoint: use quoted includes for internal headers Kees Cook
2026-09-02 23:33 ` [PATCH 2/3] gcc-plugins: sanemaker: make the no-op trap macros statement-safe Kees Cook
@ 2026-09-02 23:33 ` Kees Cook
2 siblings, 0 replies; 4+ messages in thread
From: Kees Cook @ 2026-09-02 23:33 UTC (permalink / raw)
To: York Jasper Niebuhr; +Cc: Kees Cook, Ard Biesheuvel, franzen, linux-hardening
Pinpoint adds 35 files directly to scripts/gcc-plugins/, a directory
shared with the other plugins, using generic names such as serialize.c,
passes.h, layout_hash.c and target_registry.c, plus twelve safe-*.h
wrappers. Move them into scripts/gcc-plugins/pinpoint/ so they no longer
crowd the shared namespace, matching how the rest of the series is laid
out (kernel/spslr/, samples/spslr/tasklist/).
Build tested ARCH=x86_64 defconfig+CONFIG_SPSLR=y with the patched
GCC 16.1.0 / GAS 2.46.1 toolchain, using O= (out-of-tree). Boot tested
under QEMU to a busybox userspace: two randomized boots and one
"nospslr" control all reach userspace and complete a task_struct
exercise (ps, /proc/self/{stat,status}, 200 fork+execs, signals, pipes,
timers) with zero oops/BUG/WARNING.
Assisted-by: Claude:claude-opus-5[1m]
Signed-off-by: Kees Cook <kees@kernel.org>
---
scripts/gcc-plugins/Makefile | 32 +++++++++----------
.../{ => pinpoint}/asm_offset_pass.c | 0
.../{ => pinpoint}/dpin_registry.c | 0
.../{ => pinpoint}/dpin_registry.h | 0
.../{ => pinpoint}/ipin_registry.c | 0
.../{ => pinpoint}/ipin_registry.h | 0
.../gcc-plugins/{ => pinpoint}/layout_hash.c | 0
.../gcc-plugins/{ => pinpoint}/layout_hash.h | 0
.../{ => pinpoint}/on_finish_decl.c | 0
.../{ => pinpoint}/on_finish_type.c | 0
.../{ => pinpoint}/on_finish_unit.c | 0
.../on_preserve_component_ref.c | 0
.../{ => pinpoint}/on_register_attributes.c | 0
.../{ => pinpoint}/on_start_unit.c | 0
scripts/gcc-plugins/{ => pinpoint}/passes.h | 0
scripts/gcc-plugins/{ => pinpoint}/pinpoint.c | 0
scripts/gcc-plugins/{ => pinpoint}/pinpoint.h | 0
.../rtl_ipin_survival_scan_pass.c | 0
.../gcc-plugins/{ => pinpoint}/safe-attribs.h | 0
.../{ => pinpoint}/safe-diagnostic.h | 0
.../{ => pinpoint}/safe-gcc-plugin.h | 0
scripts/gcc-plugins/{ => pinpoint}/safe-ggc.h | 0
.../gcc-plugins/{ => pinpoint}/safe-gimple.h | 0
.../gcc-plugins/{ => pinpoint}/safe-input.h | 0
.../{ => pinpoint}/safe-langhooks.h | 0
scripts/gcc-plugins/{ => pinpoint}/safe-md5.h | 0
.../gcc-plugins/{ => pinpoint}/safe-output.h | 0
.../{ => pinpoint}/safe-plugin-version.h | 0
scripts/gcc-plugins/{ => pinpoint}/safe-rtl.h | 0
.../gcc-plugins/{ => pinpoint}/safe-tree.h | 0
.../{ => pinpoint}/separate_offset_pass.c | 0
.../gcc-plugins/{ => pinpoint}/serialize.c | 0
.../gcc-plugins/{ => pinpoint}/serialize.h | 0
.../{ => pinpoint}/target_hash_builtin_pass.c | 0
.../{ => pinpoint}/target_registry.c | 0
.../{ => pinpoint}/target_registry.h | 0
36 files changed, 16 insertions(+), 16 deletions(-)
rename scripts/gcc-plugins/{ => pinpoint}/asm_offset_pass.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/dpin_registry.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/dpin_registry.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/ipin_registry.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/ipin_registry.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/layout_hash.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/layout_hash.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_finish_decl.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_finish_type.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_finish_unit.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_preserve_component_ref.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_register_attributes.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/on_start_unit.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/passes.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/pinpoint.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/pinpoint.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/rtl_ipin_survival_scan_pass.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-attribs.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-diagnostic.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-gcc-plugin.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-ggc.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-gimple.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-input.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-langhooks.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-md5.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-output.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-plugin-version.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-rtl.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/safe-tree.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/separate_offset_pass.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/serialize.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/serialize.h (100%)
rename scripts/gcc-plugins/{ => pinpoint}/target_hash_builtin_pass.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/target_registry.c (100%)
rename scripts/gcc-plugins/{ => pinpoint}/target_registry.h (100%)
diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile
index 1ecc9e923b85..71f605875647 100644
--- a/scripts/gcc-plugins/Makefile
+++ b/scripts/gcc-plugins/Makefile
@@ -23,22 +23,22 @@ targets += randomize_layout_seed.h
# foo-objs := foo.o foo2.o
pinpoint_plugin-objs := \
- pinpoint.o \
- asm_offset_pass.o \
- dpin_registry.o \
- ipin_registry.o \
- layout_hash.o \
- on_finish_decl.o \
- on_finish_type.o \
- on_finish_unit.o \
- on_preserve_component_ref.o \
- on_register_attributes.o \
- on_start_unit.o \
- rtl_ipin_survival_scan_pass.o \
- separate_offset_pass.o \
- serialize.o \
- target_registry.o \
- target_hash_builtin_pass.o
+ pinpoint/pinpoint.o \
+ pinpoint/asm_offset_pass.o \
+ pinpoint/dpin_registry.o \
+ pinpoint/ipin_registry.o \
+ pinpoint/layout_hash.o \
+ pinpoint/on_finish_decl.o \
+ pinpoint/on_finish_type.o \
+ pinpoint/on_finish_unit.o \
+ pinpoint/on_preserve_component_ref.o \
+ pinpoint/on_register_attributes.o \
+ pinpoint/on_start_unit.o \
+ pinpoint/rtl_ipin_survival_scan_pass.o \
+ pinpoint/separate_offset_pass.o \
+ pinpoint/serialize.o \
+ pinpoint/target_registry.o \
+ pinpoint/target_hash_builtin_pass.o
always-y += $(GCC_PLUGIN)
diff --git a/scripts/gcc-plugins/asm_offset_pass.c b/scripts/gcc-plugins/pinpoint/asm_offset_pass.c
similarity index 100%
rename from scripts/gcc-plugins/asm_offset_pass.c
rename to scripts/gcc-plugins/pinpoint/asm_offset_pass.c
diff --git a/scripts/gcc-plugins/dpin_registry.c b/scripts/gcc-plugins/pinpoint/dpin_registry.c
similarity index 100%
rename from scripts/gcc-plugins/dpin_registry.c
rename to scripts/gcc-plugins/pinpoint/dpin_registry.c
diff --git a/scripts/gcc-plugins/dpin_registry.h b/scripts/gcc-plugins/pinpoint/dpin_registry.h
similarity index 100%
rename from scripts/gcc-plugins/dpin_registry.h
rename to scripts/gcc-plugins/pinpoint/dpin_registry.h
diff --git a/scripts/gcc-plugins/ipin_registry.c b/scripts/gcc-plugins/pinpoint/ipin_registry.c
similarity index 100%
rename from scripts/gcc-plugins/ipin_registry.c
rename to scripts/gcc-plugins/pinpoint/ipin_registry.c
diff --git a/scripts/gcc-plugins/ipin_registry.h b/scripts/gcc-plugins/pinpoint/ipin_registry.h
similarity index 100%
rename from scripts/gcc-plugins/ipin_registry.h
rename to scripts/gcc-plugins/pinpoint/ipin_registry.h
diff --git a/scripts/gcc-plugins/layout_hash.c b/scripts/gcc-plugins/pinpoint/layout_hash.c
similarity index 100%
rename from scripts/gcc-plugins/layout_hash.c
rename to scripts/gcc-plugins/pinpoint/layout_hash.c
diff --git a/scripts/gcc-plugins/layout_hash.h b/scripts/gcc-plugins/pinpoint/layout_hash.h
similarity index 100%
rename from scripts/gcc-plugins/layout_hash.h
rename to scripts/gcc-plugins/pinpoint/layout_hash.h
diff --git a/scripts/gcc-plugins/on_finish_decl.c b/scripts/gcc-plugins/pinpoint/on_finish_decl.c
similarity index 100%
rename from scripts/gcc-plugins/on_finish_decl.c
rename to scripts/gcc-plugins/pinpoint/on_finish_decl.c
diff --git a/scripts/gcc-plugins/on_finish_type.c b/scripts/gcc-plugins/pinpoint/on_finish_type.c
similarity index 100%
rename from scripts/gcc-plugins/on_finish_type.c
rename to scripts/gcc-plugins/pinpoint/on_finish_type.c
diff --git a/scripts/gcc-plugins/on_finish_unit.c b/scripts/gcc-plugins/pinpoint/on_finish_unit.c
similarity index 100%
rename from scripts/gcc-plugins/on_finish_unit.c
rename to scripts/gcc-plugins/pinpoint/on_finish_unit.c
diff --git a/scripts/gcc-plugins/on_preserve_component_ref.c b/scripts/gcc-plugins/pinpoint/on_preserve_component_ref.c
similarity index 100%
rename from scripts/gcc-plugins/on_preserve_component_ref.c
rename to scripts/gcc-plugins/pinpoint/on_preserve_component_ref.c
diff --git a/scripts/gcc-plugins/on_register_attributes.c b/scripts/gcc-plugins/pinpoint/on_register_attributes.c
similarity index 100%
rename from scripts/gcc-plugins/on_register_attributes.c
rename to scripts/gcc-plugins/pinpoint/on_register_attributes.c
diff --git a/scripts/gcc-plugins/on_start_unit.c b/scripts/gcc-plugins/pinpoint/on_start_unit.c
similarity index 100%
rename from scripts/gcc-plugins/on_start_unit.c
rename to scripts/gcc-plugins/pinpoint/on_start_unit.c
diff --git a/scripts/gcc-plugins/passes.h b/scripts/gcc-plugins/pinpoint/passes.h
similarity index 100%
rename from scripts/gcc-plugins/passes.h
rename to scripts/gcc-plugins/pinpoint/passes.h
diff --git a/scripts/gcc-plugins/pinpoint.c b/scripts/gcc-plugins/pinpoint/pinpoint.c
similarity index 100%
rename from scripts/gcc-plugins/pinpoint.c
rename to scripts/gcc-plugins/pinpoint/pinpoint.c
diff --git a/scripts/gcc-plugins/pinpoint.h b/scripts/gcc-plugins/pinpoint/pinpoint.h
similarity index 100%
rename from scripts/gcc-plugins/pinpoint.h
rename to scripts/gcc-plugins/pinpoint/pinpoint.h
diff --git a/scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c b/scripts/gcc-plugins/pinpoint/rtl_ipin_survival_scan_pass.c
similarity index 100%
rename from scripts/gcc-plugins/rtl_ipin_survival_scan_pass.c
rename to scripts/gcc-plugins/pinpoint/rtl_ipin_survival_scan_pass.c
diff --git a/scripts/gcc-plugins/safe-attribs.h b/scripts/gcc-plugins/pinpoint/safe-attribs.h
similarity index 100%
rename from scripts/gcc-plugins/safe-attribs.h
rename to scripts/gcc-plugins/pinpoint/safe-attribs.h
diff --git a/scripts/gcc-plugins/safe-diagnostic.h b/scripts/gcc-plugins/pinpoint/safe-diagnostic.h
similarity index 100%
rename from scripts/gcc-plugins/safe-diagnostic.h
rename to scripts/gcc-plugins/pinpoint/safe-diagnostic.h
diff --git a/scripts/gcc-plugins/safe-gcc-plugin.h b/scripts/gcc-plugins/pinpoint/safe-gcc-plugin.h
similarity index 100%
rename from scripts/gcc-plugins/safe-gcc-plugin.h
rename to scripts/gcc-plugins/pinpoint/safe-gcc-plugin.h
diff --git a/scripts/gcc-plugins/safe-ggc.h b/scripts/gcc-plugins/pinpoint/safe-ggc.h
similarity index 100%
rename from scripts/gcc-plugins/safe-ggc.h
rename to scripts/gcc-plugins/pinpoint/safe-ggc.h
diff --git a/scripts/gcc-plugins/safe-gimple.h b/scripts/gcc-plugins/pinpoint/safe-gimple.h
similarity index 100%
rename from scripts/gcc-plugins/safe-gimple.h
rename to scripts/gcc-plugins/pinpoint/safe-gimple.h
diff --git a/scripts/gcc-plugins/safe-input.h b/scripts/gcc-plugins/pinpoint/safe-input.h
similarity index 100%
rename from scripts/gcc-plugins/safe-input.h
rename to scripts/gcc-plugins/pinpoint/safe-input.h
diff --git a/scripts/gcc-plugins/safe-langhooks.h b/scripts/gcc-plugins/pinpoint/safe-langhooks.h
similarity index 100%
rename from scripts/gcc-plugins/safe-langhooks.h
rename to scripts/gcc-plugins/pinpoint/safe-langhooks.h
diff --git a/scripts/gcc-plugins/safe-md5.h b/scripts/gcc-plugins/pinpoint/safe-md5.h
similarity index 100%
rename from scripts/gcc-plugins/safe-md5.h
rename to scripts/gcc-plugins/pinpoint/safe-md5.h
diff --git a/scripts/gcc-plugins/safe-output.h b/scripts/gcc-plugins/pinpoint/safe-output.h
similarity index 100%
rename from scripts/gcc-plugins/safe-output.h
rename to scripts/gcc-plugins/pinpoint/safe-output.h
diff --git a/scripts/gcc-plugins/safe-plugin-version.h b/scripts/gcc-plugins/pinpoint/safe-plugin-version.h
similarity index 100%
rename from scripts/gcc-plugins/safe-plugin-version.h
rename to scripts/gcc-plugins/pinpoint/safe-plugin-version.h
diff --git a/scripts/gcc-plugins/safe-rtl.h b/scripts/gcc-plugins/pinpoint/safe-rtl.h
similarity index 100%
rename from scripts/gcc-plugins/safe-rtl.h
rename to scripts/gcc-plugins/pinpoint/safe-rtl.h
diff --git a/scripts/gcc-plugins/safe-tree.h b/scripts/gcc-plugins/pinpoint/safe-tree.h
similarity index 100%
rename from scripts/gcc-plugins/safe-tree.h
rename to scripts/gcc-plugins/pinpoint/safe-tree.h
diff --git a/scripts/gcc-plugins/separate_offset_pass.c b/scripts/gcc-plugins/pinpoint/separate_offset_pass.c
similarity index 100%
rename from scripts/gcc-plugins/separate_offset_pass.c
rename to scripts/gcc-plugins/pinpoint/separate_offset_pass.c
diff --git a/scripts/gcc-plugins/serialize.c b/scripts/gcc-plugins/pinpoint/serialize.c
similarity index 100%
rename from scripts/gcc-plugins/serialize.c
rename to scripts/gcc-plugins/pinpoint/serialize.c
diff --git a/scripts/gcc-plugins/serialize.h b/scripts/gcc-plugins/pinpoint/serialize.h
similarity index 100%
rename from scripts/gcc-plugins/serialize.h
rename to scripts/gcc-plugins/pinpoint/serialize.h
diff --git a/scripts/gcc-plugins/target_hash_builtin_pass.c b/scripts/gcc-plugins/pinpoint/target_hash_builtin_pass.c
similarity index 100%
rename from scripts/gcc-plugins/target_hash_builtin_pass.c
rename to scripts/gcc-plugins/pinpoint/target_hash_builtin_pass.c
diff --git a/scripts/gcc-plugins/target_registry.c b/scripts/gcc-plugins/pinpoint/target_registry.c
similarity index 100%
rename from scripts/gcc-plugins/target_registry.c
rename to scripts/gcc-plugins/pinpoint/target_registry.c
diff --git a/scripts/gcc-plugins/target_registry.h b/scripts/gcc-plugins/pinpoint/target_registry.h
similarity index 100%
rename from scripts/gcc-plugins/target_registry.h
rename to scripts/gcc-plugins/pinpoint/target_registry.h
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread