diff options
author | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2021-02-13 13:32:27 +0200 |
---|---|---|
committer | Oleksandr Suvorov <oleksandr.suvorov@toradex.com> | 2021-02-18 12:37:41 +0200 |
commit | b31d336c98967b34495cc844c6449c97aac5b85d (patch) | |
tree | dc86a7564fc9175f173f01990d0b481dca3a0226 | |
parent | e0ffcaa2dd1c2712971836856afbe9f9ced60271 (diff) |
drm: bridge: lt8912: fix NULL pointer dereference without ddc bus
If there is no ddc i2c bus registered and no display-timings defined
in the bridge node, the driver tries to dereference NULL pointer,
causing a kernel crash [1]. This patch fixes the kernel crash.
[1]
[ 3.528083] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
...
[ 3.571677] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[ 3.579874] Modules linked in:
[ 3.579885] CPU: 0 PID: 97 Comm: kworker/0:10 Not tainted 5.4.91-06307-g616ffa27a412-dirty #48
[ 3.579890] Hardware name: Toradex Apalis iMX8QXP/DX on Apalis Evaluation Board (DT)
...
[ 3.652931] Call trace:
[ 3.652942] lt8912_connector_get_modes+0xdc/0x1d8
[ 3.778792] drm_helper_probe_single_connector_modes+0x174/0x680
[ 3.784811] drm_client_modeset_probe+0x228/0xe70
[ 3.789527] __drm_fb_helper_initial_config_and_unlock+0x44/0x470
[ 3.795634] drm_fbdev_client_hotplug+0xd4/0x188
[ 3.800262] drm_fbdev_generic_setup+0x98/0x140
[ 3.804797] imx_drm_bind+0x100/0x150
...
[ 3.875067] Code: f942c300 f9413c00 97f9cf65 aa0003fc (b9400000)
[ 3.881172] ---[ end trace b83fe35fbb72e05a ]---
Related-to: ELB-3426
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-rw-r--r-- | drivers/gpu/drm/bridge/lt8912.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/bridge/lt8912.c b/drivers/gpu/drm/bridge/lt8912.c index aa407d09d319..6a278a0b4b3b 100644 --- a/drivers/gpu/drm/bridge/lt8912.c +++ b/drivers/gpu/drm/bridge/lt8912.c @@ -317,7 +317,7 @@ static int lt8912_connector_get_modes(struct drm_connector *connector) } else { /* if not EDID, use dtb timings */ timings = of_get_display_timings(lt->dev->of_node); - if (timings->num_timings == 0) { + if (!timings || timings->num_timings == 0) { dev_err(lt->dev, "failed to get display timings from dtb\n"); return 0; } |