diff --git a/internal/discover/graphics.go b/internal/discover/graphics.go index b5c248d4..e87f85c3 100644 --- a/internal/discover/graphics.go +++ b/internal/discover/graphics.go @@ -146,6 +146,27 @@ func newGraphicsLibrariesDiscoverer(logger logger.Interface, driver *root.Driver } } +// Mounts discovers the required libraries and filters out libnvidia-allocator.so. +// The library libnvidia-allocator.so is already handled by either the *.RM_VERSION +// injection or by libnvidia-container. We therefore filter it out here as a +// workaround for the case where libnvidia-container will re-mount this in the +// container, which causes issues with shared mount propagation. +func (d graphicsDriverLibraries) Mounts() ([]Mount, error) { + mounts, err := d.Discover.Mounts() + if err != nil { + return nil, fmt.Errorf("failed to get library mounts: %v", err) + } + + var filtered []Mount + for _, mount := range mounts { + if d.isDriverLibrary(filepath.Base(mount.Path), "libnvidia-allocator.so") { + continue + } + filtered = append(filtered, mount) + } + return filtered, nil +} + // Create necessary library symlinks for graphics drivers func (d graphicsDriverLibraries) Hooks() ([]Hook, error) { mounts, err := d.Discover.Mounts() diff --git a/internal/discover/graphics_test.go b/internal/discover/graphics_test.go index 3df0cfc2..d484d9ba 100644 --- a/internal/discover/graphics_test.go +++ b/internal/discover/graphics_test.go @@ -62,11 +62,7 @@ func TestGraphicsLibrariesDiscoverer(t *testing.T) { return mounts, nil }, }, - expectedMounts: []Mount{ - { - Path: "/usr/lib64/libnvidia-allocator.so.123.45.67", - }, - }, + expectedMounts: nil, expectedHooks: []Hook{ { Lifecycle: "createContainer", @@ -121,9 +117,6 @@ func TestGraphicsLibrariesDiscoverer(t *testing.T) { }, }, expectedMounts: []Mount{ - { - Path: "/usr/lib64/libnvidia-allocator.so.123.45.67", - }, { Path: "/usr/lib64/libnvidia-vulkan-producer.so.123.45.67", },