Bug#1034264: bullseye-pu: package nvidia-modprobe/470.182.03-1
Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu
Hi,
along with the nvidia-graphics-drivers* packages, I'd like to upgrade
nvidia-modprobe to a new upstream release this time, too.
It's unusual that nvidia-modprobe sees any updates (besides the version
bump) in the older release branches when the corresponding driver
package gets updated, so in order not to have an nvidia-modprobe that
unneccessarily deviates from upstream behavior, lets update that, too.
The corresponding change has been cherry-picked into sid (there is no
530 release yet that includes it, since the last 530 release is a week
older than the 525/470/450 releases that included this change). It is not
yet in bookworm.
+nvidia-modprobe (470.182.03-1) bullseye; urgency=medium
+
+ * New upstream release.
+ - Updated nvidia-modprobe to create symbolic links in /dev/char when
+ creating the /dev/nvidia* device nodes. This resolves an issue that
+ prevented the device nodes from working with newer versions of runc:
+ https://github.com/opencontainers/runc/issues/3708
+ * Update Lintian overrides.
+ * Upload to bullseye.
+
+ -- Andreas Beckmann <anbe@debian.org> Tue, 11 Apr 2023 22:21:56 +0200
Andreas
diff --git a/debian/changelog b/debian/changelog
index 5eca61c..b3176cc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+nvidia-modprobe (470.182.03-1) bullseye; urgency=medium
+
+ * New upstream release.
+ - Updated nvidia-modprobe to create symbolic links in /dev/char when
+ creating the /dev/nvidia* device nodes. This resolves an issue that
+ prevented the device nodes from working with newer versions of runc:
+ https://github.com/opencontainers/runc/issues/3708
+ * Update Lintian overrides.
+ * Upload to bullseye.
+
+ -- Andreas Beckmann <anbe@debian.org> Tue, 11 Apr 2023 22:21:56 +0200
+
nvidia-modprobe (470.103.01-1~deb11u1) bullseye; urgency=medium
* Rebuild for bullseye.
diff --git a/debian/copyright b/debian/copyright
index ff0d5ff..26ebb3f 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -9,7 +9,8 @@ Disclaimer:
NVIDIA drivers in non-free.
Files: *
-Copyright: Copyright (C) 2004-2017 NVIDIA Corporation
+Copyright:
+ Copyright (C) 2004-2023 NVIDIA Corporation
License: Expat
Files: modprobe-utils/pci-enum.h
@@ -25,7 +26,8 @@ Copyright: (C) Copyright IBM Corporation 2006
License: Expat
Files: debian/*
-Copyright: © 2014-2022 Andreas Beckmann <anbe@debian.org>
+Copyright:
+ © 2014-2023 Andreas Beckmann <anbe@debian.org>
License: Expat
License: Expat
diff --git a/debian/gbp.conf b/debian/gbp.conf
index f5b3a2c..47d7377 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,2 +1,5 @@
+[DEFAULT]
+debian-branch = bullseye
+
[import-orig]
upstream-vcs-tag = %(version)s
diff --git a/debian/nvidia-modprobe.lintian-overrides b/debian/nvidia-modprobe.lintian-overrides
index ecc59fc..d19f35e 100644
--- a/debian/nvidia-modprobe.lintian-overrides
+++ b/debian/nvidia-modprobe.lintian-overrides
@@ -1 +1 @@
-elevated-privileges usr/bin/nvidia-modprobe 4755 root/root
+elevated-privileges 4755 root/root [usr/bin/nvidia-modprobe]
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
index 8ebed74..f462e54 100644
--- a/debian/source/lintian-overrides
+++ b/debian/source/lintian-overrides
@@ -1,2 +1,2 @@
# upstream provides no signatures
-debian-watch-does-not-check-gpg-signature
+debian-watch-does-not-check-openpgp-signature
diff --git a/modprobe-utils/nvidia-modprobe-utils.c b/modprobe-utils/nvidia-modprobe-utils.c
index 7437751..1a2144f 100644
--- a/modprobe-utils/nvidia-modprobe-utils.c
+++ b/modprobe-utils/nvidia-modprobe-utils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, NVIDIA CORPORATION.
+ * Copyright (c) 2013-2023, NVIDIA CORPORATION.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -42,6 +42,7 @@
#include "nvidia-modprobe-utils.h"
#include "pci-enum.h"
+#define NV_DEV_PATH "/dev/"
#define NV_PROC_MODPROBE_PATH "/proc/sys/kernel/modprobe"
#define NV_PROC_MODULES_PATH "/proc/modules"
#define NV_PROC_DEVICES_PATH "/proc/devices"
@@ -502,6 +503,75 @@ int nvidia_get_file_state(int minor)
return state;
}
+/*
+ * Symbolically link the /dev/char/<major:minor> file to the given
+ * device node.
+ */
+static int symlink_char_dev(int major, int minor, const char *dev_path)
+{
+ char symlink_path[NV_MAX_CHARACTER_DEVICE_FILE_STRLEN];
+ char dev_rel_path[NV_MAX_CHARACTER_DEVICE_FILE_STRLEN];
+ struct stat link_status;
+ struct stat dev_status;
+ int ret;
+
+ ret = snprintf(symlink_path, NV_MAX_CHARACTER_DEVICE_FILE_STRLEN,
+ NV_CHAR_DEVICE_NAME, major, minor);
+
+ if (ret < 0 || ret >= NV_MAX_CHARACTER_DEVICE_FILE_STRLEN)
+ {
+ return 0;
+ }
+
+ /* Verify that the target device node exists and is a character device. */
+ if (stat(dev_path, &dev_status) != 0 || !S_ISCHR(dev_status.st_mode))
+ {
+ return 0;
+ }
+
+ /* Verify the device path prefix is as expected. */
+ if (strncmp(dev_path, NV_DEV_PATH, strlen(NV_DEV_PATH)) != 0)
+ {
+ return 0;
+ }
+
+ /*
+ * Create the relative path for the symlink by replacing "/dev/" prefix in
+ * the path with "../", to match existing links in the /dev/char directory.
+ */
+ ret = snprintf(dev_rel_path, NV_MAX_CHARACTER_DEVICE_FILE_STRLEN,
+ "../%s", dev_path + strlen(NV_DEV_PATH));
+
+ if (ret < 0 || ret >= NV_MAX_CHARACTER_DEVICE_FILE_STRLEN)
+ {
+ return 0;
+ }
+
+ /*
+ * An existing link may not point at the target device, so remove it.
+ * Any error is discarded since the failure checks below will handle
+ * the problematic cases.
+ */
+ (void)remove(symlink_path);
+
+ ret = symlink(dev_rel_path, symlink_path);
+
+ /*
+ * If the symlink(3) failed, we either don't have permission to create it,
+ * or the file already exists -- our remove(3) call above failed. In this
+ * case, we return success only if the link exists and matches the target
+ * device (stat(2) will follow the link).
+ */
+ if (ret < 0 &&
+ (stat(symlink_path, &link_status) != 0 ||
+ link_status.st_ino != dev_status.st_ino))
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
/*
* Attempt to create the specified device file with the specified major
* and minor number. If proc_path is specified, scan it for custom file
@@ -532,7 +602,7 @@ static int mknod_helper(int major, int minor, const char *path,
if (modification_allowed != 1)
{
- return 1;
+ return symlink_char_dev(major, minor, path);
}
state = get_file_state_helper(path, major, minor,
@@ -542,7 +612,7 @@ static int mknod_helper(int major, int minor, const char *path,
nvidia_test_file_state(state, NvDeviceFileStateChrDevOk) &&
nvidia_test_file_state(state, NvDeviceFileStatePermissionsOk))
{
- return 1;
+ return symlink_char_dev(major, minor, path);
}
/* If the stat(2) above failed, we need to create the device file. */
@@ -594,10 +664,9 @@ static int mknod_helper(int major, int minor, const char *path,
return 0;
}
- return 1;
+ return symlink_char_dev(major, minor, path);
}
-
/*
* Attempt to create a device file with the specified minor number for
* the specified NVIDIA module instance.
diff --git a/modprobe-utils/nvidia-modprobe-utils.h b/modprobe-utils/nvidia-modprobe-utils.h
index 924f7c3..ebc01e1 100644
--- a/modprobe-utils/nvidia-modprobe-utils.h
+++ b/modprobe-utils/nvidia-modprobe-utils.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, NVIDIA CORPORATION.
+ * Copyright (c) 2013-2023, NVIDIA CORPORATION.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@@ -46,6 +46,8 @@
#define NV_CAPS_MODULE_NAME "nvidia-caps"
#define NV_CAP_DEVICE_NAME "/dev/" NV_CAPS_MODULE_NAME "/nvidia-cap%d"
+#define NV_CHAR_DEVICE_NAME "/dev/char/%d:%d"
+
#if defined(NV_LINUX)
typedef enum
diff --git a/version.mk b/version.mk
index 061d452..2953b73 100644
--- a/version.mk
+++ b/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 470.103.01
+NVIDIA_VERSION = 470.182.03
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
Reply to: