[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251009155752.773732-103-sashal@kernel.org>
Date: Thu, 9 Oct 2025 11:56:09 -0400
From: Sasha Levin <sashal@...nel.org>
To: patches@...ts.linux.dev,
stable@...r.kernel.org
Cc: Thomas Weißschuh <thomas.weissschuh@...utronix.de>,
Nishanth Menon <nm@...com>,
Sasha Levin <sashal@...nel.org>,
linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org
Subject: [PATCH AUTOSEL 6.17-5.10] soc: ti: pruss: don't use %pK through printk
From: Thomas Weißschuh <thomas.weissschuh@...utronix.de>
[ Upstream commit a5039648f86424885aae37f03dc39bc9cb972ecb ]
In the past %pK was preferable to %p as it would not leak raw pointer
values into the kernel log.
Since commit ad67b74d2469 ("printk: hash addresses printed with %p")
the regular %p has been improved to avoid this issue.
Furthermore, restricted pointers ("%pK") were never meant to be used
through printk(). They can still unintentionally leak raw pointers or
acquire sleeping locks in atomic contexts.
Switch to the regular pointer formatting which is safer and
easier to reason about.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@...utronix.de>
Link: https://lore.kernel.org/r/20250811-restricted-pointers-soc-v2-1-7af7ed993546@linutronix.de
Signed-off-by: Nishanth Menon <nm@...com>
Signed-off-by: Sasha Levin <sashal@...nel.org>
---
LLM Generated explanations, may be completely bogus:
Based on my comprehensive investigation, here is my analysis:
## BACKPORT RECOMMENDATION: **YES**
---
## Detailed Analysis
### Nature of the Change
This commit changes a single format specifier from `%pK` to `%p` in a
`dev_dbg()` call at drivers/soc/ti/pruss.c:452. The line changes from:
```c
dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %pK\n", ...)
```
to:
```c
dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %p\n", ...)
```
### This is a Correctness Fix, Not Just Cleanup
While it appears to be a simple cleanup, **this is actually a bug fix**
that prevents sleeping-in-atomic-context issues:
1. **The %pK Implementation Problem** (lib/vsprintf.c:860-904):
- When `kptr_restrict=1`, `%pK` calls `current_cred()` and
`has_capability_noaudit()`
- These functions can acquire sleeping locks
- In IRQ context (hardirq, softirq, NMI), `%pK` simply returns "pK-
error" - a useless output
- The commit message explicitly states: "%pK can still
unintentionally leak raw pointers or acquire sleeping locks in
atomic contexts"
2. **Why %p is Superior**:
- Since commit ad67b74d2469 (November 2017), `%p` hashes addresses by
default
- `%p` never sleeps, never acquires locks, always safe in any context
- Provides equivalent security without the correctness issues
### Evidence Supporting Backporting
1. **Part of Tree-Wide Cleanup**: This is one of 60+ similar commits by
Thomas Weißschuh addressing the same issue across the kernel
2. **Similar Commits Already Backported**:
- BPF subsystem fix (2caa6b88e0ba → c2f48cb89b76f) - already
backported
- LoongArch unwinder fixes - backported to multiple stable trees
- Multiple driver subsystems receiving the same fix
3. **Already Backported to This Tree**: Commit 126ca37f56175 shows this
exact fix has already been backported to the 6.17 stable tree
(visible in remotes/build/linus-next branch)
4. **Recent Upstream Commit**: Authored August 11, 2025, targeting v6.18
kernel
### Stable Kernel Criteria Assessment
✅ **Fixes important bug**: Prevents potential sleeping-in-atomic-context
bugs
✅ **Small and contained**: Single character change in one debug
statement
✅ **Obvious and correct**: Clear technical rationale, well-documented
issue
✅ **No side effects**: Debug output will still show pointer (hashed),
just safer
✅ **No architectural changes**: Pure format specifier fix
✅ **Minimal regression risk**: Cannot break functionality, only changes
debug output format
✅ **Non-critical subsystem**: TI PRUSS driver is SoC-specific, not core
kernel
### Why This Matters
While `dev_dbg()` in the PRUSS driver setup path is unlikely to be
called from atomic context in normal operation, this fix:
1. **Prevents future bugs** if code paths change
2. **Follows kernel hardening best practices**
3. **Part of systematic kernel-wide improvement**
4. **Eliminates a potential security issue** (raw pointer leaks when
CAP_SYSLOG present)
5. **Zero cost** - no performance impact, no behavior change except
safer
### Conclusion
This is a **defensive correctness fix** with zero regression risk. It
prevents a class of bugs (sleeping-in-atomic-context), improves security
(consistent address hashing), and aligns with ongoing kernel hardening
efforts. The fact that similar commits are actively being backported to
stable trees, and this specific commit has already been backported to
6.17, strongly supports backporting.
**Backport Status: YES** - This commit should be backported to stable
kernel trees.
drivers/soc/ti/pruss.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c
index d7634bf5413a3..038576805bfa0 100644
--- a/drivers/soc/ti/pruss.c
+++ b/drivers/soc/ti/pruss.c
@@ -449,7 +449,7 @@ static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss)
pruss->mem_regions[i].pa = res.start;
pruss->mem_regions[i].size = resource_size(&res);
- dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %pK\n",
+ dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %p\n",
mem_names[i], &pruss->mem_regions[i].pa,
pruss->mem_regions[i].size, pruss->mem_regions[i].va);
}
--
2.51.0
Powered by blists - more mailing lists