Hi, On 8/25/24 1:09 AM, Dmitry Torokhov wrote: > Use __free(kfree) cleanup facility in matrix_keypad_parse_keymap() to > automatically free temporarily allocated memory. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> Regards, Hans > --- > drivers/input/matrix-keymap.c | 25 +++++++++---------------- > 1 file changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/input/matrix-keymap.c b/drivers/input/matrix-keymap.c > index 5d93043bad8e..3bea3575a0a9 100644 > --- a/drivers/input/matrix-keymap.c > +++ b/drivers/input/matrix-keymap.c > @@ -73,10 +73,9 @@ static int matrix_keypad_parse_keymap(const char *propname, > struct device *dev = input_dev->dev.parent; > unsigned int row_shift = get_count_order(cols); > unsigned int max_keys = rows << row_shift; > - u32 *keys; > int i; > int size; > - int retval; > + int error; > > if (!propname) > propname = "linux,keymap"; > @@ -94,30 +93,24 @@ static int matrix_keypad_parse_keymap(const char *propname, > return -EINVAL; > } > > - keys = kmalloc_array(size, sizeof(u32), GFP_KERNEL); > + u32 *keys __free(kfree) = kmalloc_array(size, sizeof(*keys), GFP_KERNEL); > if (!keys) > return -ENOMEM; > > - retval = device_property_read_u32_array(dev, propname, keys, size); > - if (retval) { > + error = device_property_read_u32_array(dev, propname, keys, size); > + if (error) { > dev_err(dev, "failed to read %s property: %d\n", > - propname, retval); > - goto out; > + propname, error); > + return error; > } > > for (i = 0; i < size; i++) { > if (!matrix_keypad_map_key(input_dev, rows, cols, > - row_shift, keys[i])) { > - retval = -EINVAL; > - goto out; > - } > + row_shift, keys[i])) > + return -EINVAL; > } > > - retval = 0; > - > -out: > - kfree(keys); > - return retval; > + return 0; > } > > /**