Skip to content

Commit 36e9d08

Browse files
Boris Brezillonairlied
authored andcommitted
drm/cirrus: Fix NULL pointer dereference when registering the fbdev
cirrus_modeset_init() is initializing/registering the emulated fbdev and, since commit c61b93f ("drm/atomic: Fix remaining places where !funcs->best_encoder is valid"), DRM internals can access/test some of the fields in mode_config->funcs as part of the fbdev registration process. Make sure dev->mode_config.funcs is properly set to avoid dereferencing a NULL pointer. Reported-by: Mike Marshall <hubcap@omnibond.com> Reported-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Fixes: c61b93f ("drm/atomic: Fix remaining places where !funcs->best_encoder is valid") Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent 210a021 commit 36e9d08

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

drivers/gpu/drm/cirrus/cirrus_main.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,23 @@ int cirrus_driver_load(struct drm_device *dev, unsigned long flags)
185185
goto out;
186186
}
187187

188+
/*
189+
* cirrus_modeset_init() is initializing/registering the emulated fbdev
190+
* and DRM internals can access/test some of the fields in
191+
* mode_config->funcs as part of the fbdev registration process.
192+
* Make sure dev->mode_config.funcs is properly set to avoid
193+
* dereferencing a NULL pointer.
194+
* FIXME: mode_config.funcs assignment should probably be done in
195+
* cirrus_modeset_init() (that's a common pattern seen in other DRM
196+
* drivers).
197+
*/
198+
dev->mode_config.funcs = &cirrus_mode_funcs;
188199
r = cirrus_modeset_init(cdev);
189200
if (r) {
190201
dev_err(&dev->pdev->dev, "Fatal error during modeset init: %d\n", r);
191202
goto out;
192203
}
193204

194-
dev->mode_config.funcs = (void *)&cirrus_mode_funcs;
195-
196205
return 0;
197206
out:
198207
cirrus_driver_unload(dev);

0 commit comments

Comments
 (0)