Skip to content

Commit 6d4511e

Browse files
Binary-EaterJoseExposito
authored andcommitted
HID: uclogic: Correct devm device reference for hidinput input_dev name
Reference the HID device rather than the input device for the devm allocation of the input_dev name. Referencing the input_dev would lead to a use-after-free when the input_dev was unregistered and subsequently fires a uevent that depends on the name. At the point of firing the uevent, the name would be freed by devres management. Use devm_kasprintf to simplify the logic for allocating memory and formatting the input_dev name string. Reported-by: syzbot+3a0ebe8a52b89c63739d@syzkaller.appspotmail.com Closes: https://lore.kernel.org/linux-input/ZOZIZCND+L0P1wJc@penguin/T/ Reported-by: Maxime Ripard <mripard@kernel.org> Closes: https://lore.kernel.org/linux-input/ZOZIZCND+L0P1wJc@penguin/T/#m443f3dce92520f74b6cf6ffa8653f9c92643d4ae Fixes: cce2dbdf258e ("HID: uclogic: name the input nodes based on their tool") Suggested-by: Maxime Ripard <mripard@kernel.org> Suggested-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Rahul Rameshbabu <sergeantsagara@protonmail.com> Reviewed-by: Maxime Ripard <mripard@kernel.org> Link: https://lore.kernel.org/r/20230824061308.222021-2-sergeantsagara@protonmail.com Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
1 parent 1ea2c49 commit 6d4511e

1 file changed

Lines changed: 4 additions & 10 deletions

File tree

hid-uclogic-core.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,8 @@ static int uclogic_input_configured(struct hid_device *hdev,
9595
{
9696
struct uclogic_drvdata *drvdata = hid_get_drvdata(hdev);
9797
struct uclogic_params *params = &drvdata->params;
98-
char *name;
9998
const char *suffix = NULL;
10099
struct hid_field *field;
101-
size_t len;
102100
size_t i;
103101
const struct uclogic_params_frame *frame;
104102

@@ -156,14 +154,10 @@ static int uclogic_input_configured(struct hid_device *hdev,
156154
}
157155
}
158156

159-
if (suffix) {
160-
len = strlen(hdev->name) + 2 + strlen(suffix);
161-
name = devm_kzalloc(&hi->input->dev, len, GFP_KERNEL);
162-
if (name) {
163-
snprintf(name, len, "%s %s", hdev->name, suffix);
164-
hi->input->name = name;
165-
}
166-
}
157+
if (suffix)
158+
hi->input->name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
159+
"%s %s", hdev->name, suffix);
160+
167161
RETURN_SUCCESS;
168162
}
169163
#undef RETURN_SUCCESS

0 commit comments

Comments
 (0)