diff options
author | Luiz Sampaio <sampaio.ime@gmail.com> | 2021-11-09 19:07:32 -0300 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2021-11-24 11:46:52 +0100 |
commit | 4daa9ff89ef27be43c15995412d6aee393a78200 (patch) | |
tree | 6be42ed28dfed32cd06e1bfcf334246827a8bd3a /drivers/auxdisplay/charlcd.c | |
parent | 94047df12fec0e51e860b5317223f67a3ea4eb07 (diff) |
auxdisplay: charlcd: checking for pointer reference before dereferencing
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>
Diffstat (limited to 'drivers/auxdisplay/charlcd.c')
-rw-r--r-- | drivers/auxdisplay/charlcd.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c index cca3b600c0ba..6d309e4971b6 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; |