On Thu, Nov 06, 2025 at 03:07:26PM +0100, Alexander Lobakin wrote: > From: Ally Heev <[email protected]> > Date: Thu, 06 Nov 2025 17:25:48 +0530 > > > Uninitialized pointers with `__free` attribute can cause undefined > > behavior as the memory assigned randomly to the pointer is freed > > automatically when the pointer goes out of scope. > > > > It is better to initialize and assign pointers with `__free` > > attribute in one statement to ensure proper scope-based cleanup. > > > > Reported-by: Dan Carpenter <[email protected]> > > Closes: https://lore.kernel.org/all/[email protected]/ > > Signed-off-by: Ally Heev <[email protected]> > > --- > > Changes in v3: > > - fixed style issues > > - Link to v2: > > https://lore.kernel.org/r/20251106-aheev-uninitialized-free-attr-net-ethernet-v2-1-048da0c5d...@gmail.com > > > > Changes in v2: > > - fixed non-pointer initialization to NULL > > - NOTE: drop v1 > > - Link to v1: > > https://lore.kernel.org/r/20251105-aheev-uninitialized-free-attr-net-ethernet-v1-1-f6ea84bbd...@gmail.com > > --- > > drivers/net/ethernet/intel/ice/ice_flow.c | 5 +++-- > > drivers/net/ethernet/intel/idpf/idpf_virtchnl.c | 5 +++-- > > 2 files changed, 6 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/net/ethernet/intel/ice/ice_flow.c > > b/drivers/net/ethernet/intel/ice/ice_flow.c > > index > > 6d5c939dc8a515c252cd2b77d155b69fa264ee92..3590dacf3ee57879b3809d715e40bb290e40c4aa > > 100644 > > --- a/drivers/net/ethernet/intel/ice/ice_flow.c > > +++ b/drivers/net/ethernet/intel/ice/ice_flow.c > > @@ -1573,12 +1573,13 @@ ice_flow_set_parser_prof(struct ice_hw *hw, u16 > > dest_vsi, u16 fdir_vsi, > > struct ice_parser_profile *prof, enum ice_block blk) > > { > > u64 id = find_first_bit(prof->ptypes, ICE_FLOW_PTYPE_MAX); > > - struct ice_flow_prof_params *params __free(kfree); > > u8 fv_words = hw->blk[blk].es.fvw; > > int status; > > int i, idx; > > > > - params = kzalloc(sizeof(*params), GFP_KERNEL); > > + struct ice_flow_prof_params *params __free(kfree) = > > + kzalloc(sizeof(*params), GFP_KERNEL); > > Please don't do it that way. It's not C++ with RAII and > declare-where-you-use. > Just leave the variable declarations where they are, but initialize them > with `= NULL`. > > Variable declarations must be in one block and sorted from the longest > to the shortest. > > But most important, I'm not even sure how you could trigger an > "undefined behaviour" here. Both here and below the variable tagged with > `__free` is initialized right after the declaration block, before any > return. So how to trigger an UB here?
FWIIW, I'd prefer if we sidestepped this discussion entirely by not using __free [1] in this driver. It seems to me that for both functions updated by this patch that can easily be achieved using an idiomatic goto label to free on error. [1] https://docs.kernel.org/process/maintainer-netdev.html#using-device-managed-and-cleanup-h-constructs ...
