diff options
author | Colin Ian King <colin.king@canonical.com> | 2021-04-06 17:40:02 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-04-07 16:58:33 +0100 |
commit | 14e13b1ce92ea278fc0d7bb95b340b46cff624ab (patch) | |
tree | 1c120c255c71b89afe3cd0dc7be207f48c53fccd /drivers/base | |
parent | 394409aafd017adfcffd075595cb01cc456a9327 (diff) |
regmap-irq: Fix dereference of a potentially null d->virt_buf
The clean up of struct d can potentiallly index into a null array
d->virt_buf causing errorenous pointer dereferencing issues on
kfree calls. Fix this by adding a null check on d->virt_buf before
attempting to traverse the array to kfree the objects.
Addresses-Coverity: ("Dereference after null check")
Fixes: 4c5014456305 ("regmap-irq: Introduce virtual regs to handle more config regs")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Link: https://lore.kernel.org/r/20210406164002.430221-1-colin.king@canonical.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/regmap/regmap-irq.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c index e6343ccc6aa1..760296a4b606 100644 --- a/drivers/base/regmap/regmap-irq.c +++ b/drivers/base/regmap/regmap-irq.c @@ -901,9 +901,11 @@ err_alloc: kfree(d->mask_buf); kfree(d->status_buf); kfree(d->status_reg_buf); - for (i = 0; i < chip->num_virt_regs; i++) - kfree(d->virt_buf[i]); - kfree(d->virt_buf); + if (d->virt_buf) { + for (i = 0; i < chip->num_virt_regs; i++) + kfree(d->virt_buf[i]); + kfree(d->virt_buf); + } kfree(d); return ret; } |