forked from Minki/linux
Input: pxa27x_keypad - fix NULL pointer dereference
A NULL pointer dereference exception occurs in the driver probe function when device tree is used. The pdata pointer will be NULL in this case, but the code dereferences it in all cases. When device tree is used, a platform data structure is allocated and initialized, and in all cases this pointer is copied to the driver's private data, so the variable being tested should be accessed through the driver's private data structure. Signed-off-by: Mike Dunn <mikedunn@newsguy.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
c7dc65737c
commit
049d75f72d
@ -786,10 +786,17 @@ static int pxa27x_keypad_probe(struct platform_device *pdev)
|
|||||||
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
|
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
|
||||||
input_set_capability(input_dev, EV_MSC, MSC_SCAN);
|
input_set_capability(input_dev, EV_MSC, MSC_SCAN);
|
||||||
|
|
||||||
if (pdata)
|
if (pdata) {
|
||||||
error = pxa27x_keypad_build_keycode(keypad);
|
error = pxa27x_keypad_build_keycode(keypad);
|
||||||
else
|
} else {
|
||||||
error = pxa27x_keypad_build_keycode_from_dt(keypad);
|
error = pxa27x_keypad_build_keycode_from_dt(keypad);
|
||||||
|
/*
|
||||||
|
* Data that we get from DT resides in dynamically
|
||||||
|
* allocated memory so we need to update our pdata
|
||||||
|
* pointer.
|
||||||
|
*/
|
||||||
|
pdata = keypad->pdata;
|
||||||
|
}
|
||||||
if (error) {
|
if (error) {
|
||||||
dev_err(&pdev->dev, "failed to build keycode\n");
|
dev_err(&pdev->dev, "failed to build keycode\n");
|
||||||
goto failed_put_clk;
|
goto failed_put_clk;
|
||||||
|
Loading…
Reference in New Issue
Block a user