| From b637f956500cf4fce047ab5fe998fe4c6d84c2be Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 9 Nov 2021 19:07:32 -0300 |
| Subject: auxdisplay: charlcd: checking for pointer reference before |
| dereferencing |
| |
| From: Luiz Sampaio <sampaio.ime@gmail.com> |
| |
| [ Upstream commit 4daa9ff89ef27be43c15995412d6aee393a78200 ] |
| |
| Check if the pointer lcd->ops->init_display exists before dereferencing it. |
| If a driver called charlcd_init() without defining the ops, this would |
| return segmentation fault, as happened to me when implementing a charlcd |
| driver. Checking the pointer before dereferencing protects from |
| segmentation fault. |
| |
| Signed-off-by: Luiz Sampaio <sampaio.ime@gmail.com> |
| Signed-off-by: Miguel Ojeda <ojeda@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/auxdisplay/charlcd.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c |
| index 304accde365c8..6c010d4efa4ae 100644 |
| --- a/drivers/auxdisplay/charlcd.c |
| +++ b/drivers/auxdisplay/charlcd.c |
| @@ -578,6 +578,9 @@ static int charlcd_init(struct charlcd *lcd) |
| * Since charlcd_init_display() needs to write data, we have to |
| * enable mark the LCD initialized just before. |
| */ |
| + if (WARN_ON(!lcd->ops->init_display)) |
| + return -EINVAL; |
| + |
| ret = lcd->ops->init_display(lcd); |
| if (ret) |
| return ret; |
| -- |
| 2.34.1 |
| |