Skip to content

Commit acde400

Browse files
martinezjavierhdeller
authored andcommitted
video: fbdev: vesafb: Fix a use-after-free due early fb_info cleanup
Commit b3c9a92 ("fbdev: vesafb: Cleanup fb_info in .fb_destroy rather than .remove") fixed a use-after-free error due the vesafb driver freeing the fb_info in the .remove handler instead of doing it in .fb_destroy. This can happen if the .fb_destroy callback is executed after the .remove callback, since the former tries to access a pointer freed by the latter. But that change didn't take into account that another possible scenario is that .fb_destroy is called before the .remove callback. For example, if no process has the fbdev chardev opened by the time the driver is removed. If that's the case, fb_info will be freed when unregister_framebuffer() is called, making the fb_info pointer accessed in vesafb_remove() after that to no longer be valid. To prevent that, move the expression containing the info->par to happen before the unregister_framebuffer() function call. Fixes: b3c9a92 ("fbdev: vesafb: Cleanup fb_info in .fb_destroy rather than .remove") Reported-by: Pascal Ernster <[email protected]> Signed-off-by: Javier Martinez Canillas <[email protected]> Tested-by: Pascal Ernster <[email protected]> Signed-off-by: Helge Deller <[email protected]>
1 parent 50e35bd commit acde400

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

drivers/video/fbdev/vesafb.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -490,11 +490,12 @@ static int vesafb_remove(struct platform_device *pdev)
490490
{
491491
struct fb_info *info = platform_get_drvdata(pdev);
492492

493-
/* vesafb_destroy takes care of info cleanup */
494-
unregister_framebuffer(info);
495493
if (((struct vesafb_par *)(info->par))->region)
496494
release_region(0x3c0, 32);
497495

496+
/* vesafb_destroy takes care of info cleanup */
497+
unregister_framebuffer(info);
498+
498499
return 0;
499500
}
500501

0 commit comments

Comments
 (0)