Input: sparse-keymap - use a managed allocation for keymap copy
authorMichał Kępień <kernel@kempniu.pl>
Wed, 8 Mar 2017 17:20:10 +0000 (09:20 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 8 Mar 2017 22:28:53 +0000 (14:28 -0800)
commitfabeb165afd52a3fb05b9b68e5a3550609b8e157
treea5851d7d6d6a45dd1e571b05de4bc07be9670514
parentc470abd4fde40ea6a0846a2beab642a578c0b8cd
Input: sparse-keymap - use a managed allocation for keymap copy

Some platform drivers use devm_input_allocate_device() together with
sparse_keymap_setup() in their .probe callbacks.  While using the former
simplifies error handling, using the latter necessitates calling
sparse_keymap_free() in the error path and upon module unloading to
avoid leaking the copy of the keymap allocated by sparse_keymap_setup().

To help prevent such leaks and enable simpler error handling, make
sparse_keymap_setup() use devm_kmemdup() to create the keymap copy so
that it gets automatically freed.

This works for both managed and non-managed input devices as the keymap
is freed after the last reference to the input device is dropped.

Note that actions previously taken by sparse_keymap_free(), i.e. taking
the input device's mutex and zeroing its keycode and keycodemax fields,
are now redundant because the managed keymap will always be freed after
the input device is unregistered.

Signed-off-by: Michał Kępień <kernel@kempniu.pl>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/sparse-keymap.c