summaryrefslogtreecommitdiffstats
path: root/system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch')
-rw-r--r--system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch b/system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch
new file mode 100644
index 0000000000..df61dfa85d
--- /dev/null
+++ b/system/nvidia-legacy390-driver/nvidia-installer-removed-sysctl-h.patch
@@ -0,0 +1,58 @@
+diff -Nur nvidia-installer-390.143.orig/kernel.c nvidia-installer-390.143/kernel.c
+--- nvidia-installer-390.143.orig/kernel.c 2021-03-12 02:29:56.000000000 -0500
++++ nvidia-installer-390.143/kernel.c 2021-06-23 11:15:12.813980616 -0400
+@@ -23,7 +23,6 @@
+ #include <sys/utsname.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <sys/sysctl.h>
+ #include <ctype.h>
+ #include <stdlib.h>
+ #include <dirent.h>
+@@ -1055,9 +1050,9 @@
+ #define PRINTK_LOGLEVEL_KERN_ALERT 1
+
+ /*
+- * Attempt to set the printk loglevel, first using the /proc/sys interface,
+- * and falling back to the deprecated sysctl if that fails. Pass the previous
+- * loglevel back to the caller and return TRUE on success, or FALSE on failure.
++ * Attempt to set the printk loglevel using the /proc/sys interface.
++ * Pass the previous loglevel back to the caller and return TRUE on success,
++ * or FALSE on failure.
+ */
+ static int set_loglevel(int level, int *old_level)
+ {
+@@ -1067,6 +1062,9 @@
+ fp = fopen("/proc/sys/kernel/printk", "r+");
+ if (fp) {
+ if (!old_level || fscanf(fp, "%d ", old_level) == 1) {
++ /* Use a dynamic buffer for the string: the kernel does not range
++ * check the loglevel, so the value reported by the procfs file
++ * may have an unknown number of digits. */
+ char *strlevel = nvasprintf("%d", level);
+
+ fseek(fp, 0, SEEK_SET);
+@@ -1079,23 +1077,6 @@
+ fclose(fp);
+ }
+
+- if (!loglevel_set) {
+- /*
+- * Explicitly initialize the value of len, even though it looks like the
+- * syscall should do that, since in practice it doesn't always actually
+- * set the value of the pointed-to length parameter.
+- */
+- size_t len = sizeof(int);
+- int name[] = { CTL_KERN, KERN_PRINTK };
+-
+- if (!old_level ||
+- sysctl(name, ARRAY_LEN(name), old_level, &len, NULL, 0) == 0) {
+- if (sysctl(name, ARRAY_LEN(name), NULL, 0, &level, len) == 0) {
+- loglevel_set = TRUE;
+- }
+- }
+- }
+-
+ return loglevel_set;
+ }
+