* [PATCH] Input: do not use WARN() in input_alloc_absinfo()
@ 2018-08-06 22:18 Dmitry Torokhov
2018-08-07 14:26 ` Dmitry Vyukov
0 siblings, 1 reply; 2+ messages in thread
From: Dmitry Torokhov @ 2018-08-06 22:18 UTC (permalink / raw)
To: linux-input; +Cc: Dmitry Vyukov, Henrik Rydberg, linux-kernel
Some of fuzzers set panic_on_warn=1 so that they can handle WARN()ings
the same way they handle full-blown kernel crashes. We used WARN() in
input_alloc_absinfo() to get a better idea where memory allocation
failed, but since then kmalloc() and friends started dumping call stack
on memory allocation failures anyway, so we are not getting anything
extra from WARN().
Because of the above, let's replace WARN with dev_err(). We use dev_err()
instead of simply removing message and relying on kcalloc() to give us
stack dump so that we'd know the instance of hardware device to which we
were trying to attach input device.
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/input.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 90453e2ab6cf..260f00ebe34d 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -481,11 +481,19 @@ EXPORT_SYMBOL(input_inject_event);
*/
void input_alloc_absinfo(struct input_dev *dev)
{
- if (!dev->absinfo)
- dev->absinfo = kcalloc(ABS_CNT, sizeof(*dev->absinfo),
- GFP_KERNEL);
+ if (dev->absinfo)
+ return;
- WARN(!dev->absinfo, "%s(): kcalloc() failed?\n", __func__);
+ dev->absinfo = kcalloc(ABS_CNT, sizeof(*dev->absinfo), GFP_KERNEL);
+ if (!dev->absinfo) {
+ dev_err(dev->dev.parent ?: &dev->dev,
+ "%s: unable to allocate memory\n", __func__);
+ /*
+ * We will handle this allocation failure in
+ * input_register_device() when we refuse to register input
+ * device with ABS bits but without absinfo.
+ */
+ }
}
EXPORT_SYMBOL(input_alloc_absinfo);
--
2.18.0.597.ga71716f1ad-goog
--
Dmitry
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Input: do not use WARN() in input_alloc_absinfo()
2018-08-06 22:18 [PATCH] Input: do not use WARN() in input_alloc_absinfo() Dmitry Torokhov
@ 2018-08-07 14:26 ` Dmitry Vyukov
0 siblings, 0 replies; 2+ messages in thread
From: Dmitry Vyukov @ 2018-08-07 14:26 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, Henrik Rydberg, LKML
On Tue, Aug 7, 2018 at 12:18 AM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> Some of fuzzers set panic_on_warn=1 so that they can handle WARN()ings
> the same way they handle full-blown kernel crashes. We used WARN() in
> input_alloc_absinfo() to get a better idea where memory allocation
> failed, but since then kmalloc() and friends started dumping call stack
> on memory allocation failures anyway, so we are not getting anything
> extra from WARN().
>
> Because of the above, let's replace WARN with dev_err(). We use dev_err()
> instead of simply removing message and relying on kcalloc() to give us
> stack dump so that we'd know the instance of hardware device to which we
> were trying to attach input device.
>
> Reported-by: Dmitry Vyukov <dvyukov@google.com>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
> drivers/input/input.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/input/input.c b/drivers/input/input.c
> index 90453e2ab6cf..260f00ebe34d 100644
> --- a/drivers/input/input.c
> +++ b/drivers/input/input.c
> @@ -481,11 +481,19 @@ EXPORT_SYMBOL(input_inject_event);
> */
> void input_alloc_absinfo(struct input_dev *dev)
> {
> - if (!dev->absinfo)
> - dev->absinfo = kcalloc(ABS_CNT, sizeof(*dev->absinfo),
> - GFP_KERNEL);
> + if (dev->absinfo)
> + return;
>
> - WARN(!dev->absinfo, "%s(): kcalloc() failed?\n", __func__);
> + dev->absinfo = kcalloc(ABS_CNT, sizeof(*dev->absinfo), GFP_KERNEL);
> + if (!dev->absinfo) {
> + dev_err(dev->dev.parent ?: &dev->dev,
> + "%s: unable to allocate memory\n", __func__);
> + /*
> + * We will handle this allocation failure in
> + * input_register_device() when we refuse to register input
> + * device with ABS bits but without absinfo.
> + */
> + }
> }
> EXPORT_SYMBOL(input_alloc_absinfo);
Thanks!
Acked-by: Dmitry Vyukov <dvyukov@google.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-08-07 14:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-06 22:18 [PATCH] Input: do not use WARN() in input_alloc_absinfo() Dmitry Torokhov
2018-08-07 14:26 ` Dmitry Vyukov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).