copy_from_user() returns the number of bytes not copied, not an errno. kfd_criu_restore_svm() stored that count in ret before overwriting it with -EFAULT. Test the return value directly so ret only ever holds an error code.
v2: - split the original patch into two, one change per patch (Yifan) Signed-off-by: Perry Yuan <[email protected]> --- drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c index a571fda5c713..ea1a2cca6a06 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -4257,9 +4257,8 @@ int kfd_criu_restore_svm(struct kfd_process *p, return -ENOMEM; } - ret = copy_from_user(&criu_svm_md->data, user_priv_ptr + *priv_data_offset, - svm_priv_data_size); - if (ret) { + if (copy_from_user(&criu_svm_md->data, user_priv_ptr + *priv_data_offset, + svm_priv_data_size)) { ret = -EFAULT; goto exit; } -- 2.34.1
