Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: matrix-keymap - switch to using __free() cleanup facility

Use __free(kfree) cleanup facility in matrix_keypad_parse_keymap() to
automatically free temporarily allocated memory.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/ZspoEPdTcH-hpciy@google.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+9 -16
+9 -16
drivers/input/matrix-keymap.c
··· 73 73 struct device *dev = input_dev->dev.parent; 74 74 unsigned int row_shift = get_count_order(cols); 75 75 unsigned int max_keys = rows << row_shift; 76 - u32 *keys; 77 76 int i; 78 77 int size; 79 - int retval; 78 + int error; 80 79 81 80 if (!propname) 82 81 propname = "linux,keymap"; ··· 93 94 return -EINVAL; 94 95 } 95 96 96 - keys = kmalloc_array(size, sizeof(u32), GFP_KERNEL); 97 + u32 *keys __free(kfree) = kmalloc_array(size, sizeof(*keys), GFP_KERNEL); 97 98 if (!keys) 98 99 return -ENOMEM; 99 100 100 - retval = device_property_read_u32_array(dev, propname, keys, size); 101 - if (retval) { 101 + error = device_property_read_u32_array(dev, propname, keys, size); 102 + if (error) { 102 103 dev_err(dev, "failed to read %s property: %d\n", 103 - propname, retval); 104 - goto out; 104 + propname, error); 105 + return error; 105 106 } 106 107 107 108 for (i = 0; i < size; i++) { 108 109 if (!matrix_keypad_map_key(input_dev, rows, cols, 109 - row_shift, keys[i])) { 110 - retval = -EINVAL; 111 - goto out; 112 - } 110 + row_shift, keys[i])) 111 + return -EINVAL; 113 112 } 114 113 115 - retval = 0; 116 - 117 - out: 118 - kfree(keys); 119 - return retval; 114 + return 0; 120 115 } 121 116 122 117 /**