> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf > Of Ally Heev > Sent: Monday, November 24, 2025 8:41 AM > To: Nguyen, Anthony L <[email protected]>; Kitszel, > Przemyslaw <[email protected]>; Andrew Lunn > <[email protected]>; David S. Miller <[email protected]>; Eric > Dumazet <[email protected]>; Jakub Kicinski <[email protected]>; Paolo > Abeni <[email protected]> > Cc: [email protected]; [email protected]; linux- > [email protected]; Ally Heev <[email protected]>; Simon Horman > <[email protected]>; Dan Carpenter <[email protected]> > Subject: [Intel-wired-lan] [PATCH RESEND RFT net-next 2/2] idpf: > remove __free usage in idpf_virtchnl > > usage of cleanup attributes is discouraged in net [1], achieve cleanup > using goto. In this patch though, only uninitialized pointers with > __free attribute are cleaned as they can cause undefined behavior when > they go out of scope > > Suggested-by: Simon Horman <[email protected]> > Reported-by: Dan Carpenter <[email protected]> > Closes: https://lore.kernel.org/all/[email protected]/ > Signed-off-by: Ally Heev <[email protected]> > > [1] https://docs.kernel.org/process/maintainer-netdev.html#using- > device-managed-and-cleanup-h-constructs > > Signed-off-by: Ally Heev <[email protected]> > --- > drivers/net/ethernet/intel/idpf/idpf_virtchnl.c | 28 > +++++++++++++++++-------- > 1 file changed, 19 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c > b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c > index > cbb5fa30f5a0ec778c1ee30470da3ca21cc1af24..5b2bf8c3205bc1ea0746f78afa2a > 24f3f8ad2a8c 100644 > --- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c > +++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c > @@ -1012,7 +1012,7 @@ static int idpf_send_get_caps_msg(struct > idpf_adapter *adapter) > */ > static int idpf_send_get_lan_memory_regions(struct idpf_adapter > *adapter) { > - struct virtchnl2_get_lan_memory_regions *rcvd_regions > __free(kfree); > + struct virtchnl2_get_lan_memory_regions *rcvd_regions = NULL; > struct idpf_vc_xn_params xn_params = { > .vc_op = VIRTCHNL2_OP_GET_LAN_MEMORY_REGIONS, > .recv_buf.iov_len = IDPF_CTLQ_MAX_BUF_LEN, @@ -1029,21 > +1029,29 @@ static int idpf_send_get_lan_memory_regions(struct > idpf_adapter *adapter) > > xn_params.recv_buf.iov_base = rcvd_regions; > reply_sz = idpf_vc_xn_exec(adapter, &xn_params); > - if (reply_sz < 0) > - return reply_sz; > + if (reply_sz < 0) { > + err = reply_sz; > + goto out; > + } > > num_regions = le16_to_cpu(rcvd_regions->num_memory_regions); > size = struct_size(rcvd_regions, mem_reg, num_regions); > - if (reply_sz < size) > - return -EIO; > + if (reply_sz < size) { > + err = -EIO; > + goto out; > + } > > - if (size > IDPF_CTLQ_MAX_BUF_LEN) > - return -EINVAL; > + if (size > IDPF_CTLQ_MAX_BUF_LEN) { > + err = -EINVAL; > + goto out; > + } > > hw = &adapter->hw; > hw->lan_regs = kcalloc(num_regions, sizeof(*hw->lan_regs), > GFP_KERNEL); > - if (!hw->lan_regs) > - return -ENOMEM; > + if (!hw->lan_regs) { > + err = -ENOMEM; > + goto out; > + } > > for (int i = 0; i < num_regions; i++) { > hw->lan_regs[i].addr_len = > @@ -1053,6 +1061,8 @@ static int > idpf_send_get_lan_memory_regions(struct idpf_adapter *adapter) > } > hw->num_lan_regs = num_regions; > > +out: > + kfree(rcvd_regions); > return err; > } > > > -- > 2.47.3
Reviewed-by: Aleksandr Loktionov <[email protected]>
