From a55f610e2adbd2f4b34993d488b27e8bf92e5272 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Mon, 1 Dec 2025 19:54:38 +0900 Subject: [PATCH] cdi: resolve symlinks Fix using /etc/cdi entries in rootless mode: > level=warning msg="Refreshing the CDI registry generated errors" > error="failed to monitor for changes: no such file or directory\nfailed to monitor for changes: no such file or directory" Signed-off-by: Akihiro Suda --- daemon/cdi.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/daemon/cdi.go b/daemon/cdi.go index e4074e2130..df31dcb4a1 100644 --- a/daemon/cdi.go +++ b/daemon/cdi.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "os" + "path/filepath" "github.com/containerd/log" "github.com/moby/moby/api/types/system" @@ -22,6 +23,14 @@ type cdiHandler struct { // The driver injects CDI devices into an incoming OCI spec and is called for DeviceRequests associated with CDI devices. // If the list of CDI spec directories is empty, the driver is not registered. func RegisterCDIDriver(cdiSpecDirs ...string) *cdi.Cache { + for i, dir := range cdiSpecDirs { + if _, err := os.Stat(dir); !errors.Is(err, os.ErrNotExist) { + cdiSpecDirs[i], err = filepath.EvalSymlinks(dir) + if err != nil { + log.L.WithField("dir", dir).WithError(err).Warn("Failed to evaluate symlinks for CDI spec directory") + } + } + } driver, cache := newCDIDeviceDriver(cdiSpecDirs...) registerDeviceDriver("cdi", driver) return cache