[PATCH] drm/amdgpu: Replace kzalloc + copy_from_user with memdup_user

Thorsten Blum posted 1 patch 1 day ago
drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
[PATCH] drm/amdgpu: Replace kzalloc + copy_from_user with memdup_user
Posted by Thorsten Blum 1 day ago
Replace kzalloc() followed by copy_from_user() with memdup_user() to
improve and simplify ta_if_load_debugfs_write() and
ta_if_invoke_debugfs_write().

No functional changes intended.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
index 38face981c3e..6e8aad91bcd3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
@@ -171,13 +171,9 @@ static ssize_t ta_if_load_debugfs_write(struct file *fp, const char *buf, size_t
 
 	copy_pos += sizeof(uint32_t);
 
-	ta_bin = kzalloc(ta_bin_len, GFP_KERNEL);
-	if (!ta_bin)
-		return -ENOMEM;
-	if (copy_from_user((void *)ta_bin, &buf[copy_pos], ta_bin_len)) {
-		ret = -EFAULT;
-		goto err_free_bin;
-	}
+	ta_bin = memdup_user(&buf[copy_pos], ta_bin_len);
+	if (IS_ERR(ta_bin))
+		return PTR_ERR(ta_bin);
 
 	/* Set TA context and functions */
 	set_ta_context_funcs(psp, ta_type, &context);
@@ -327,13 +323,9 @@ static ssize_t ta_if_invoke_debugfs_write(struct file *fp, const char *buf, size
 		return -EFAULT;
 	copy_pos += sizeof(uint32_t);
 
-	shared_buf = kzalloc(shared_buf_len, GFP_KERNEL);
-	if (!shared_buf)
-		return -ENOMEM;
-	if (copy_from_user((void *)shared_buf, &buf[copy_pos], shared_buf_len)) {
-		ret = -EFAULT;
-		goto err_free_shared_buf;
-	}
+	shared_buf = memdup_user(&buf[copy_pos], shared_buf_len);
+	if (IS_ERR(shared_buf))
+		return PTR_ERR(shared_buf);
 
 	set_ta_context_funcs(psp, ta_type, &context);
 
-- 
2.51.0
Re: [PATCH] drm/amdgpu: Replace kzalloc + copy_from_user with memdup_user
Posted by Tvrtko Ursulin 13 hours ago
On 08/09/2025 22:15, Thorsten Blum wrote:
> Replace kzalloc() followed by copy_from_user() with memdup_user() to
> improve and simplify ta_if_load_debugfs_write() and
> ta_if_invoke_debugfs_write().
> 
> No functional changes intended.
> 
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c | 20 ++++++--------------
>   1 file changed, 6 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> index 38face981c3e..6e8aad91bcd3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> @@ -171,13 +171,9 @@ static ssize_t ta_if_load_debugfs_write(struct file *fp, const char *buf, size_t
>   
>   	copy_pos += sizeof(uint32_t);
>   
> -	ta_bin = kzalloc(ta_bin_len, GFP_KERNEL);
> -	if (!ta_bin)
> -		return -ENOMEM;
> -	if (copy_from_user((void *)ta_bin, &buf[copy_pos], ta_bin_len)) {
> -		ret = -EFAULT;
> -		goto err_free_bin;
> -	}
> +	ta_bin = memdup_user(&buf[copy_pos], ta_bin_len);
> +	if (IS_ERR(ta_bin))
> +		return PTR_ERR(ta_bin);
>   
>   	/* Set TA context and functions */
>   	set_ta_context_funcs(psp, ta_type, &context);
> @@ -327,13 +323,9 @@ static ssize_t ta_if_invoke_debugfs_write(struct file *fp, const char *buf, size
>   		return -EFAULT;
>   	copy_pos += sizeof(uint32_t);
>   
> -	shared_buf = kzalloc(shared_buf_len, GFP_KERNEL);
> -	if (!shared_buf)
> -		return -ENOMEM;
> -	if (copy_from_user((void *)shared_buf, &buf[copy_pos], shared_buf_len)) {
> -		ret = -EFAULT;
> -		goto err_free_shared_buf;
> -	}
> +	shared_buf = memdup_user(&buf[copy_pos], shared_buf_len);
> +	if (IS_ERR(shared_buf))
> +		return PTR_ERR(shared_buf);
>   
>   	set_ta_context_funcs(psp, ta_type, &context);
>   

More complete than the one I sent in June^1.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>

I had some other in that series, not sure if you caught those.

Regards,

Tvrtko

1)
https://lore.kernel.org/amd-gfx/20250612104430.41169-1-tvrtko.ursulin@igalia.com/
Re: [PATCH] drm/amdgpu: Replace kzalloc + copy_from_user with memdup_user
Posted by Alex Deucher 7 hours ago
On Tue, Sep 9, 2025 at 4:17 AM Tvrtko Ursulin <tursulin@ursulin.net> wrote:
>
>
> On 08/09/2025 22:15, Thorsten Blum wrote:
> > Replace kzalloc() followed by copy_from_user() with memdup_user() to
> > improve and simplify ta_if_load_debugfs_write() and
> > ta_if_invoke_debugfs_write().
> >
> > No functional changes intended.
> >
> > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c | 20 ++++++--------------
> >   1 file changed, 6 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> > index 38face981c3e..6e8aad91bcd3 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c
> > @@ -171,13 +171,9 @@ static ssize_t ta_if_load_debugfs_write(struct file *fp, const char *buf, size_t
> >
> >       copy_pos += sizeof(uint32_t);
> >
> > -     ta_bin = kzalloc(ta_bin_len, GFP_KERNEL);
> > -     if (!ta_bin)
> > -             return -ENOMEM;
> > -     if (copy_from_user((void *)ta_bin, &buf[copy_pos], ta_bin_len)) {
> > -             ret = -EFAULT;
> > -             goto err_free_bin;
> > -     }
> > +     ta_bin = memdup_user(&buf[copy_pos], ta_bin_len);
> > +     if (IS_ERR(ta_bin))
> > +             return PTR_ERR(ta_bin);
> >
> >       /* Set TA context and functions */
> >       set_ta_context_funcs(psp, ta_type, &context);
> > @@ -327,13 +323,9 @@ static ssize_t ta_if_invoke_debugfs_write(struct file *fp, const char *buf, size
> >               return -EFAULT;
> >       copy_pos += sizeof(uint32_t);
> >
> > -     shared_buf = kzalloc(shared_buf_len, GFP_KERNEL);
> > -     if (!shared_buf)
> > -             return -ENOMEM;
> > -     if (copy_from_user((void *)shared_buf, &buf[copy_pos], shared_buf_len)) {
> > -             ret = -EFAULT;
> > -             goto err_free_shared_buf;
> > -     }
> > +     shared_buf = memdup_user(&buf[copy_pos], shared_buf_len);
> > +     if (IS_ERR(shared_buf))
> > +             return PTR_ERR(shared_buf);
> >
> >       set_ta_context_funcs(psp, ta_type, &context);
> >
>
> More complete than the one I sent in June^1.

I never received this series.  I didn't see it in patchwork either.
Seems it never made it to amd-gfx.  Sorry I missed it. I've applied
the applicable patches now.

>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>

Applied.  Thanks!

Alex

>
> I had some other in that series, not sure if you caught those.
>
> Regards,
>
> Tvrtko
>
> 1)
> https://lore.kernel.org/amd-gfx/20250612104430.41169-1-tvrtko.ursulin@igalia.com/
>