summarylogtreecommitdiffstats
path: root/0008-kernel-nvidia-linux-7.2.0-remove-strncpy.patch
blob: ad65e40f1c67516f30a339b7b4541492c6fe7130 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c
index 9a577a6..1678e07 100644
--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
+++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
@@ -351,7 +351,16 @@ int nvkms_strcmp(const char *s1, const char *s2)
 
 char* nvkms_strncpy(char *dest, const char *src, size_t n)
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(7, 2, 0)
+    size_t i;
+
+    for (i = 0ull; i < n && src[i] != '\0'; i++) dest[i] = src[i];
+    for (; i < n; i++) dest[i] = '\0';
+    
+    return dest;
+#else
     return strncpy(dest, src, n);
+#endif
 }
 
 void nvkms_usleep(NvU64 usec)
diff --git a/kernel/nvidia-uvm/uvm_pmm_gpu.c b/kernel/nvidia-uvm/uvm_pmm_gpu.c
index 922403a..8063292 100644
--- a/kernel/nvidia-uvm/uvm_pmm_gpu.c
+++ b/kernel/nvidia-uvm/uvm_pmm_gpu.c
@@ -159,6 +159,8 @@
 // bug 1775408).
 //
 
+#include <linux/version.h>
+
 #include "uvm_common.h"
 #include "nv_uvm_interface.h"
 #include "uvm_api.h"
@@ -3038,7 +3040,11 @@ static NV_STATUS init_chunk_split_cache_level(uvm_pmm_gpu_t *pmm, size_t level)
             size_t size;
             size_t align;
             if (level == 0) {
+            #if LINUX_VERSION_CODE >= KERNEL_VERSION(7, 2, 0)
+                strscpy(chunk_split_cache[level].name, "uvm_gpu_chunk_t", sizeof(chunk_split_cache[level].name));
+            #else
                 strncpy(chunk_split_cache[level].name, "uvm_gpu_chunk_t", sizeof(chunk_split_cache[level].name) - 1);
+            #endif
                 size = sizeof(uvm_gpu_chunk_t);
                 align = __alignof__(uvm_gpu_chunk_t);
             } else {
diff --git a/kernel/nvidia/linux_nvswitch.c b/kernel/nvidia/linux_nvswitch.c
index 40cb0d7..43c71c5 100644
--- a/kernel/nvidia/linux_nvswitch.c
+++ b/kernel/nvidia/linux_nvswitch.c
@@ -2026,8 +2026,12 @@ nvswitch_os_read_registry_dword
         return -NVL_ERR_GENERIC;
     }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(7, 2, 0)
+    strscpy(regkey_val, regkey_val_start);
+#else
     strncpy(regkey_val, regkey_val_start, regkey_val_len);
     regkey_val[regkey_val_len] = '\0';
+#endif
 
     if (nvswitch_os_strtouint(regkey_val, data) != 0)
     {
@@ -2381,7 +2385,16 @@ nvswitch_os_strncpy
     NvLength length
 )
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(7, 2, 0)
+    NvLength i;
+
+    for (i = 0ull; i < length && src[i] != '\0'; i++) dest[i] = src[i];
+    for (; i < length; i++) dest[i] = '\0';
+
+    return dest;
+#else
     return strncpy(dest, src, length);
+#endif
 }
 
 int
diff --git a/kernel/nvidia/os-interface.c b/kernel/nvidia/os-interface.c
index b3da778..64d10fb 100644
--- a/kernel/nvidia/os-interface.c
+++ b/kernel/nvidia/os-interface.c
@@ -32,6 +32,7 @@
 #include <linux/mmzone.h>
 #include <linux/numa.h>
 #include <linux/cpuset.h>
+#include <linux/version.h>
 
 extern char *NVreg_TemporaryFilePath;
 
@@ -750,8 +751,12 @@ NvU32 NV_API_CALL os_get_current_process(void)
 void NV_API_CALL os_get_current_process_name(char *buf, NvU32 len)
 {
     task_lock(current);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(7, 2, 0)
+    strscpy(buf, current->comm, len);
+#else
     strncpy(buf, current->comm, len - 1);
     buf[len - 1] = '\0';
+#endif
     task_unlock(current);
 }