From: Thorsten Blum Date: Wed, 17 Sep 2025 15:09:41 +0000 (+0200) Subject: pds_fwctl: Replace kzalloc + copy_from_user with memdup_user in pdsfc_fw_rpc X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=479bec4cb39a1bfb2e5d3e3959d660f61399cad4;p=thirdparty%2Fkernel%2Fstable.git pds_fwctl: Replace kzalloc + copy_from_user with memdup_user in pdsfc_fw_rpc Replace kzalloc() followed by copy_from_user() with memdup_user() to improve and simplify pdsfc_fw_rpc(). Return early if an error occurs and remove the obsolete 'err_out' label. No functional changes intended. Link: https://patch.msgid.link/r/20250917150941.168887-1-thorsten.blum@linux.dev Signed-off-by: Thorsten Blum Reviewed-by: Dave Jiang Reviewed-by: Jason Gunthorpe Tested-by: Brett Creeley Signed-off-by: Jason Gunthorpe --- diff --git a/drivers/fwctl/pds/main.c b/drivers/fwctl/pds/main.c index 8dd659aee256..1809853f6353 100644 --- a/drivers/fwctl/pds/main.c +++ b/drivers/fwctl/pds/main.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -366,18 +367,10 @@ static void *pdsfc_fw_rpc(struct fwctl_uctx *uctx, enum fwctl_rpc_scope scope, return ERR_PTR(err); if (rpc->in.len > 0) { - in_payload = kzalloc(rpc->in.len, GFP_KERNEL); - if (!in_payload) { - dev_err(dev, "Failed to allocate in_payload\n"); - err = -ENOMEM; - goto err_out; - } - - if (copy_from_user(in_payload, u64_to_user_ptr(rpc->in.payload), - rpc->in.len)) { + in_payload = memdup_user(u64_to_user_ptr(rpc->in.payload), rpc->in.len); + if (IS_ERR(in_payload)) { dev_dbg(dev, "Failed to copy in_payload from user\n"); - err = -EFAULT; - goto err_in_payload; + return in_payload; } in_payload_dma_addr = dma_map_single(dev->parent, in_payload, @@ -453,7 +446,6 @@ err_out_payload: rpc->in.len, DMA_TO_DEVICE); err_in_payload: kfree(in_payload); -err_out: if (err) return ERR_PTR(err);