Add opentree fallback patch for RPi downstream kernel (<6.15)
Talos assumes bare metal kernels support open_tree on anonymous FS (added in 6.15). The RPi downstream kernel (6.12.x) does not, causing shadow bind mount failures for /etc files and cascading network init failures. This patch removes the InContainer() gate so the capability check runs on all platforms. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5c81953278
commit
6cffb4e311
@ -0,0 +1,45 @@
|
||||
From 98366401143dcc31c056a7d96242775f9ba013ca Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Beaulieu-Duncan <mathias@svrnty.io>
|
||||
Date: Sat, 14 Feb 2026 14:05:15 -0500
|
||||
Subject: [PATCH 4/4] Fallback to classic bind mounts on kernels without
|
||||
open_tree support
|
||||
|
||||
The open_tree syscall on anonymous filesystem file descriptors was added
|
||||
in kernel 6.15.0. Talos previously only checked for this capability when
|
||||
running in container mode, assuming bare metal always had a sufficiently
|
||||
new kernel. However, platforms like RPi5/CM5 use the RPi downstream
|
||||
kernel (6.12.x) which lacks this feature, causing shadow bind mount
|
||||
failures for /etc files and cascading network initialization failures.
|
||||
|
||||
Remove the InContainer() gate so the OpentreeOnAnonymousFS() capability
|
||||
check runs on all platforms, enabling the classic (OSRoot) fallback when
|
||||
the kernel does not support the newer mount API.
|
||||
---
|
||||
.../pkg/runtime/v1alpha2/v1alpha2_controller.go | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go
|
||||
index 29b297654..653a45d57 100644
|
||||
--- a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go
|
||||
+++ b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go
|
||||
@@ -113,11 +113,12 @@ func (ctrl *Controller) Run(ctx context.Context, drainer *runtime.Drainer) error
|
||||
|
||||
networkBindMountTarget = constants.SystemResolvedPath
|
||||
|
||||
- // While running in container, we don't have control over kernel version
|
||||
- // shipped with the machine. If the kernel does not support open_tree syscall
|
||||
- // on anonymous filesystem file descriptors, we need to fallback to the classic,
|
||||
- // less secure mode. This capability was added in kernel 6.15.0.
|
||||
- if ctrl.v1alpha1Runtime.State().Platform().Mode().InContainer() {
|
||||
+ // If the kernel does not support open_tree syscall on anonymous filesystem
|
||||
+ // file descriptors, we need to fallback to the classic, less secure mode.
|
||||
+ // This capability was added in kernel 6.15.0. This check is needed for
|
||||
+ // containers (where the host kernel is unknown) and for bare metal platforms
|
||||
+ // running older kernels such as the RPi downstream kernel (6.12.x).
|
||||
+ {
|
||||
opentreeOnAnonymous, err := runtime.KernelCapabilities().OpentreeOnAnonymousFS()
|
||||
if err != nil {
|
||||
return err
|
||||
--
|
||||
2.50.1 (Apple Git-155)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user