Re: [PATCH] leds: lp55xx: fix null deref on firmware load failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Michal,

Thank you for the patch.

On 2/11/19 10:29 AM, Michal Kazior wrote:
From: Michal Kazior <michal@xxxxxxxxx>

I've stumbled upon a kernel crash and the logs
pointed me towards the lp5562 driver:

<4>[306013.841294] lp5562 0-0030: Direct firmware load for lp5562 failed with error -2
<4>[306013.894990] lp5562 0-0030: Falling back to user helper
...
<3>[306073.924886] lp5562 0-0030: firmware request failed
<1>[306073.939456] Unable to handle kernel NULL pointer dereference at virtual address 00000000
<4>[306074.251011] PC is at _raw_spin_lock+0x1c/0x58
<4>[306074.255539] LR is at release_firmware+0x6c/0x138
...

After taking a look I noticed firmware_release()
could be called with either NULL or a dangling
pointer.

Signed-off-by: Michal Kazior <michal@xxxxxxxxx>
---
  drivers/leds/leds-lp55xx-common.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/leds/leds-lp55xx-common.c b/drivers/leds/leds-lp55xx-common.c
index 3d79a6380761..64986f0fd367 100644
--- a/drivers/leds/leds-lp55xx-common.c
+++ b/drivers/leds/leds-lp55xx-common.c
@@ -201,7 +201,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
if (!fw) {
  		dev_err(dev, "firmware request failed\n");
-		goto out;
+		return;
  	}
/* handling firmware data is chip dependent */
@@ -217,6 +217,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
  out:
  	/* firmware should be released for other channel use */
  	release_firmware(chip->fw);
+	chip->fw = NULL;
  }
static int lp55xx_request_firmware(struct lp55xx_chip *chip)



Added tag:

Fixes: 10c06d178df11 ("leds-lp55xx: support firmware interface"),

and applied.

--
Best regards,
Jacek Anaszewski



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux