diff -ruN orig/conftest.sh patched/conftest.sh --- orig/conftest.sh 2026-06-11 06:33:08.000000000 -0600 +++ patched/conftest.sh 2026-09-24 11:40:21.371928925 -0600 @@ -3528,6 +3528,25 @@ fi ;; + drm_atomic_commit_present) + # + # Local patch for Linux 7.2: determine if struct drm_atomic_state was renamed to + # struct drm_atomic_commit, by Linux kernel commit 5164f7e7ff8e + # ("drm: Rename struct drm_atomic_state to drm_atomic_commit") in v7.2. + # sizeof() requires the complete type, so this cannot give a false + # positive on older kernels. + # + CODE=" + #if defined(NV_DRM_DRM_ATOMIC_H_PRESENT) + #include + #endif + int conftest_drm_atomic_commit_present(void) { + return sizeof(struct drm_atomic_commit); + }" + + compile_check_conftest "$CODE" "NV_DRM_ATOMIC_COMMIT_PRESENT" "" "types" + ;; + drm_atomic_state_ref_counting) # # Determine if functions drm_atomic_state_get/put() are diff -ruN orig/nvidia/linux_nvswitch.c patched/nvidia/linux_nvswitch.c --- orig/nvidia/linux_nvswitch.c 2025-04-08 07:05:00.000000000 -0600 +++ patched/nvidia/linux_nvswitch.c 2026-09-24 11:40:21.371479365 -0600 @@ -2026,7 +2026,7 @@ return -NVL_ERR_GENERIC; } - strncpy(regkey_val, regkey_val_start, regkey_val_len); + memcpy(regkey_val, regkey_val_start, regkey_val_len); /* Local patch for Linux 7.2 */ regkey_val[regkey_val_len] = '\0'; if (nvswitch_os_strtouint(regkey_val, data) != 0) @@ -2381,7 +2381,17 @@ NvLength length ) { - return strncpy(dest, src, length); + /* + * Local patch for Linux 7.2: strncpy() was removed from the kernel. This wrapper is + * called from closed-source code, so keep the exact strncpy() + * semantics (copy, then zero-pad the remainder). + */ + NvLength i; + for (i = 0; i < length && src[i] != '\0'; i++) + dest[i] = src[i]; + for (; i < length; i++) + dest[i] = '\0'; + return dest; } int diff -ruN orig/nvidia/os-interface.c patched/nvidia/os-interface.c --- orig/nvidia/os-interface.c 2026-06-11 06:33:08.000000000 -0600 +++ patched/nvidia/os-interface.c 2026-09-24 11:40:21.371194436 -0600 @@ -750,8 +750,7 @@ void NV_API_CALL os_get_current_process_name(char *buf, NvU32 len) { task_lock(current); - strncpy(buf, current->comm, len - 1); - buf[len - 1] = '\0'; + strscpy(buf, current->comm, len); /* Local patch for Linux 7.2 */ task_unlock(current); } diff -ruN orig/nvidia-drm/nvidia-drm-conftest.h patched/nvidia-drm/nvidia-drm-conftest.h --- orig/nvidia-drm/nvidia-drm-conftest.h 2026-06-11 06:33:08.000000000 -0600 +++ patched/nvidia-drm/nvidia-drm-conftest.h 2026-09-24 11:40:21.376668766 -0600 @@ -215,4 +215,41 @@ #endif /* defined(NV_BSD) */ +/* + * Local patch for Linux 7.2: Linux kernel commit 5164f7e7ff8e ("drm: Rename struct + * drm_atomic_state to drm_atomic_commit") renamed the struct and its helpers. + */ +#if defined(NV_DRM_ATOMIC_COMMIT_PRESENT) +#define drm_atomic_state drm_atomic_commit +#define drm_atomic_state_alloc drm_atomic_commit_alloc +#define drm_atomic_state_clear drm_atomic_commit_clear +#define drm_atomic_state_get drm_atomic_commit_get +#define drm_atomic_state_put drm_atomic_commit_put +#define drm_atomic_state_free drm_atomic_commit_put +#define drm_atomic_state_init drm_atomic_commit_init +#define drm_atomic_state_default_clear drm_atomic_commit_default_clear +#define drm_atomic_state_default_release drm_atomic_commit_default_release + +/* + * These conftests probe using the old 'struct drm_atomic_state' name, so they + * report false negatives on 7.2+. All of these features exist on any kernel + * that has struct drm_atomic_commit. + */ +#ifndef NV_DRM_ATOMIC_STATE_REF_COUNTING_PRESENT +#define NV_DRM_ATOMIC_STATE_REF_COUNTING_PRESENT +#endif +#ifndef NV_DRM_CRTC_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG +#define NV_DRM_CRTC_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG +#endif +#ifndef NV_DRM_PLANE_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG +#define NV_DRM_PLANE_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG +#endif +#ifndef NV_DRM_ATOMIC_HELPER_SWAP_STATE_HAS_STALL_ARG +#define NV_DRM_ATOMIC_HELPER_SWAP_STATE_HAS_STALL_ARG +#endif +#ifndef NV_DRM_ATOMIC_HELPER_SWAP_STATE_RETURN_INT +#define NV_DRM_ATOMIC_HELPER_SWAP_STATE_RETURN_INT +#endif +#endif /* NV_DRM_ATOMIC_COMMIT_PRESENT */ + #endif /* defined(__NVIDIA_DRM_CONFTEST_H__) */ diff -ruN orig/nvidia-drm/nvidia-drm-sources.mk patched/nvidia-drm/nvidia-drm-sources.mk --- orig/nvidia-drm/nvidia-drm-sources.mk 2026-06-11 06:33:08.000000000 -0600 +++ patched/nvidia-drm/nvidia-drm-sources.mk 2026-09-24 11:40:21.375196662 -0600 @@ -117,6 +117,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_atomic_check_has_atomic_state_arg NV_CONFTEST_TYPE_COMPILE_TESTS += drm_gem_object_vmap_has_map_arg NV_CONFTEST_TYPE_COMPILE_TESTS += drm_plane_atomic_check_has_atomic_state_arg +NV_CONFTEST_TYPE_COMPILE_TESTS += drm_atomic_commit_present NV_CONFTEST_TYPE_COMPILE_TESTS += drm_device_has_pdev NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_state_has_no_vblank NV_CONFTEST_TYPE_COMPILE_TESTS += drm_mode_config_has_allow_fb_modifiers diff -ruN orig/nvidia-modeset/nvidia-modeset-linux.c patched/nvidia-modeset/nvidia-modeset-linux.c --- orig/nvidia-modeset/nvidia-modeset-linux.c 2026-06-11 06:33:08.000000000 -0600 +++ patched/nvidia-modeset/nvidia-modeset-linux.c 2026-09-24 11:40:21.371588341 -0600 @@ -351,7 +351,17 @@ char* nvkms_strncpy(char *dest, const char *src, size_t n) { - return strncpy(dest, src, n); + /* + * Local patch for Linux 7.2: strncpy() was removed from the kernel. This wrapper is + * called from closed-source code, so keep the exact strncpy() + * semantics (copy, then zero-pad the remainder). + */ + size_t i; + for (i = 0; i < n && src[i] != '\0'; i++) + dest[i] = src[i]; + for (; i < n; i++) + dest[i] = '\0'; + return dest; } void nvkms_usleep(NvU64 usec) diff -ruN orig/nvidia-uvm/uvm_pmm_gpu.c patched/nvidia-uvm/uvm_pmm_gpu.c --- orig/nvidia-uvm/uvm_pmm_gpu.c 2025-04-08 07:05:14.000000000 -0600 +++ patched/nvidia-uvm/uvm_pmm_gpu.c 2026-09-24 11:40:21.371337056 -0600 @@ -3038,7 +3038,7 @@ size_t size; size_t align; if (level == 0) { - strncpy(chunk_split_cache[level].name, "uvm_gpu_chunk_t", sizeof(chunk_split_cache[level].name) - 1); + strscpy(chunk_split_cache[level].name, "uvm_gpu_chunk_t", sizeof(chunk_split_cache[level].name)); /* Local patch for Linux 7.2 */ size = sizeof(uvm_gpu_chunk_t); align = __alignof__(uvm_gpu_chunk_t); } else {