Skip to content

Commit d5eb8e3

Browse files
JoseExpositogregkh
authored andcommitted
drm/vkms: Fix use after free and double free on init error
[ Upstream commit ed15511 ] If the driver initialization fails, the vkms_exit() function might access an uninitialized or freed default_config pointer and it might double free it. Fix both possible errors by initializing default_config only when the driver initialization succeeded. Reported-by: Louis Chauvet <louis.chauvet@bootlin.com> Closes: https://lore.kernel.org/all/Z5uDHcCmAwiTsGte@louis-chauvet-laptop/ Fixes: 2df7af9 ("drm/vkms: Add vkms_config type") Signed-off-by: José Expósito <jose.exposito89@gmail.com> Reviewed-by: Thomas Zimmermann <tzimmremann@suse.de> Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250212084912.3196-1-jose.exposito89@gmail.com Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent b84d743 commit d5eb8e3

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

drivers/gpu/drm/vkms/vkms_drv.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,17 +245,19 @@ static int __init vkms_init(void)
245245
if (!config)
246246
return -ENOMEM;
247247

248-
default_config = config;
249-
250248
config->cursor = enable_cursor;
251249
config->writeback = enable_writeback;
252250
config->overlay = enable_overlay;
253251

254252
ret = vkms_create(config);
255-
if (ret)
253+
if (ret) {
256254
kfree(config);
255+
return ret;
256+
}
257257

258-
return ret;
258+
default_config = config;
259+
260+
return 0;
259261
}
260262

261263
static void vkms_destroy(struct vkms_config *config)
@@ -279,9 +281,10 @@ static void vkms_destroy(struct vkms_config *config)
279281

280282
static void __exit vkms_exit(void)
281283
{
282-
if (default_config->dev)
283-
vkms_destroy(default_config);
284+
if (!default_config)
285+
return;
284286

287+
vkms_destroy(default_config);
285288
kfree(default_config);
286289
}
287290

0 commit comments

Comments
 (0)