From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Sasha Levin <sashal@kernel.org>,
alexandre.f.demers@gmail.com, alexander.deucher@amd.com
Subject: [PATCH AUTOSEL 6.17-5.10] samples: work around glibc redefining some of our defines wrong
Date: Mon, 24 Nov 2025 03:06:22 -0500 [thread overview]
Message-ID: <20251124080644.3871678-8-sashal@kernel.org> (raw)
In-Reply-To: <20251124080644.3871678-1-sashal@kernel.org>
From: Linus Torvalds <torvalds@linux-foundation.org>
[ Upstream commit a48f822908982353c3256e35a089e9e7d0d61580 ]
Apparently as of version 2.42, glibc headers define AT_RENAME_NOREPLACE
and some of the other flags for renameat2() and friends in <stdio.h>.
Which would all be fine, except for inexplicable reasons glibc decided
to define them _differently_ from the kernel definitions, which then
makes some of our sample code that includes both kernel headers and user
space headers unhappy, because the compiler will (correctly) complain
about redefining things.
Now, mixing kernel headers and user space headers is always a somewhat
iffy proposition due to namespacing issues, but it's kind of inevitable
in our sample and selftest code. And this is just glibc being stupid.
Those defines come from the kernel, glibc is exposing the kernel
interfaces, and glibc shouldn't make up some random new expressions for
these values.
It's not like glibc headers changed the actual result values, but they
arbitrarily just decided to use a different expression to describe those
values. The kernel just does
#define AT_RENAME_NOREPLACE 0x0001
while glibc does
# define RENAME_NOREPLACE (1 << 0)
# define AT_RENAME_NOREPLACE RENAME_NOREPLACE
instead. Same value in the end, but very different macro definition.
For absolutely no reason.
This has since been fixed in the glibc development tree, so eventually
we'll end up with the canonical expressions and no clashes. But in the
meantime the broken headers are in the glibc-2.42 release and have made
it out into distributions.
Do a minimal work-around to make the samples build cleanly by just
undefining the affected macros in between the user space header include
and the kernel header includes.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
## COMPREHENSIVE ANALYSIS
### 1. COMMIT MESSAGE ANALYSIS
**Problem:** The commit addresses a build failure introduced by glibc
version 2.42. The glibc headers (`<stdio.h>`) began defining
`AT_RENAME_NOREPLACE`, `AT_RENAME_EXCHANGE`, and `AT_RENAME_WHITEOUT`
using bitwise shift expressions (e.g., `1 << 0`). The Linux kernel
headers (`<linux/stat.h>`, `<linux/fcntl.h>`) define these same
constants using hexadecimal literals (e.g., `0x0001`). When sample
programs include both sets of headers, the compiler detects a macro
redefinition mismatch, causing the build to fail.
**Solution:** The fix implements a workaround by explicitly `#undef`-ing
the conflicting macros after including the glibc headers but before
including the kernel headers. This ensures the kernel headers can define
them without conflict.
**Context:** The commit is signed off by Linus Torvalds, indicating
high-level validation. While it lacks a "Cc: stable" tag, the nature of
the change (fixing a build regression caused by external environment
changes) is a standard candidate for backporting.
### 2. DEEP CODE RESEARCH
**Affected Files:**
- `samples/vfs/test-statx.c` (Added in v4.20, present in 5.4+, 5.10+,
5.15+, 6.1+, 6.6+ stable trees)
- `samples/watch_queue/watch_test.c` (Added in v5.8, present in 5.10+,
5.15+, 6.1+, 6.6+ stable trees)
**Technical Mechanism:**
The conflict arises from the preprocessor.
- **Kernel Definition (`include/uapi/linux/fcntl.h`):**
```c
#define AT_RENAME_NOREPLACE 0x0001
```
- **New Glibc Definition:**
```c
#define RENAME_NOREPLACE (1 << 0)
#define AT_RENAME_NOREPLACE RENAME_NOREPLACE
```
Because `0x0001` is not textually identical to `(1 << 0)` (or the
expansion thereof), the preprocessor flags this as a redefinition error.
**The Fix:**
The commit inserts:
```c
// Work around glibc header silliness
#undef AT_RENAME_NOREPLACE
#undef AT_RENAME_EXCHANGE
#undef AT_RENAME_WHITEOUT
```
This effectively cleans the slate before the kernel headers are parsed,
restoring the canonical kernel definitions for the remainder of the
file.
### 3. STABLE KERNEL RULES ASSESSMENT
**Classification:** **BUILD FIX**
This falls strictly under the **EXCEPTIONS** list in the stable kernel
rules:
> "4. BUILD FIXES: Fixes for compilation errors or warnings... These are
critical for users who need to build the kernel"
**Compliance Check:**
- **Obviously correct:** Yes. It is a standard preprocessor workaround
for header conflicts.
- **Fixes a real bug:** Yes. Users with modern distributions (Fedora
Rawhide, Arch, etc.) cannot compile the kernel samples without this.
- **Small and contained:** Yes. 12 lines of added code, strictly
preprocessor directives.
- **No new features:** Yes. It preserves existing behavior.
### 4. RISK ASSESSMENT
**Risk:** **ZERO**
- **Scope:** The changes are limited exclusively to the `samples/`
directory. These files are user-space example programs and tests; they
are not part of the kernel image (vmlinuz) or modules (.ko).
- **Runtime Impact:** None. The macros resolve to the same numeric
values (`1` vs `0x0001`), so the compiled binary behavior is
identical.
- **Regression Potential:** None. The `#undef` only affects the specific
translation units of the sample programs.
### 5. USER IMPACT EVALUATION
**Target Audience:** Developers, distribution maintainers, and CI
systems building the full kernel tree (including `make samples`).
**Severity:** Medium (Build Breakage). While it doesn't break the booted
kernel, build failures are blocking issues that disrupt workflows and
testing. As glibc 2.42 propagates to stable distributions (Debian,
Ubuntu, RHEL), this issue will become widespread.
### 6. CONCLUSION
This commit is a textbook example of a stable backport candidate under
the "Build Fix" exception. It fixes a tangible regression caused by
toolchain/library updates, has zero risk to the kernel runtime, and
ensures the kernel source tree remains buildable on modern systems.
**YES**
samples/vfs/test-statx.c | 6 ++++++
samples/watch_queue/watch_test.c | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/samples/vfs/test-statx.c b/samples/vfs/test-statx.c
index 49c7a46cee073..424a6fa15723c 100644
--- a/samples/vfs/test-statx.c
+++ b/samples/vfs/test-statx.c
@@ -19,6 +19,12 @@
#include <time.h>
#include <sys/syscall.h>
#include <sys/types.h>
+
+// Work around glibc header silliness
+#undef AT_RENAME_NOREPLACE
+#undef AT_RENAME_EXCHANGE
+#undef AT_RENAME_WHITEOUT
+
#include <linux/stat.h>
#include <linux/fcntl.h>
#define statx foo
diff --git a/samples/watch_queue/watch_test.c b/samples/watch_queue/watch_test.c
index 8c6cb57d5cfc5..24cf7d7a19725 100644
--- a/samples/watch_queue/watch_test.c
+++ b/samples/watch_queue/watch_test.c
@@ -16,6 +16,12 @@
#include <errno.h>
#include <sys/ioctl.h>
#include <limits.h>
+
+// Work around glibc header silliness
+#undef AT_RENAME_NOREPLACE
+#undef AT_RENAME_EXCHANGE
+#undef AT_RENAME_WHITEOUT
+
#include <linux/watch_queue.h>
#include <linux/unistd.h>
#include <linux/keyctl.h>
--
2.51.0
next prev parent reply other threads:[~2025-11-24 8:07 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-24 8:06 [PATCH AUTOSEL 6.17-5.10] platform/x86: huawei-wmi: add keys for HONOR models Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] sched_ext: Fix possible deadlock in the deferred_irq_workfn() Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-5.15] HID: elecom: Add support for ELECOM M-XT3URBK (018F) Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86: intel-uncore-freq: Add additional client processors Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.6] platform/x86/amd/pmc: Add spurious_8042 to Xbox Ally Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-5.10] pinctrl: qcom: msm: Fix deadlock in pinmux configuration Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86: hp-wmi: Add Omen 16-wf1xxx fan support Sasha Levin
2025-11-24 8:06 ` Sasha Levin [this message]
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.6] HID: hid-input: Extend Elan ignore battery quirk to USB Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] HID: lenovo: fixup Lenovo Yoga Slim 7x Keyboard rdesc Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86/amd/pmc: Add support for Van Gogh SoC Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] sched_ext: Use IRQ_WORK_INIT_HARD() to initialize rq->scx.kick_cpus_irq_work Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86/intel/hid: Add Nova Lake support Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86: hp-wmi: mark Victus 16-r0 and 16-s0 for victus_s fan and thermal profile support Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-5.4] platform/x86: acer-wmi: Ignore backlight event Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17] platform/x86: hp-wmi: Add Omen MAX 16-ah0xx fan support and thermal profile Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.6] platform/x86/amd: pmc: Add Lenovo Legion Go 2 to pmc quirk list Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.6] nvme: fix admin request_queue lifetime Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.1] LoongArch: Mask all interrupts during kexec/kdump Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-6.1] HID: apple: Add SONiX AK870 PRO to non_apple_keyboards quirk list Sasha Levin
2025-11-24 8:06 ` [PATCH AUTOSEL 6.17-5.4] bfs: Reconstruct file type when loading from disk Sasha Levin
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=20251124080644.3871678-8-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=alexander.deucher@amd.com \
--cc=alexandre.f.demers@gmail.com \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/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