Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c590cece authored by Bruno Prémont's avatar Bruno Prémont Committed by Linus Torvalds
Browse files

Further fbcon sanity checking



This moves the

    if (num_registered_fb == FB_MAX)
            return -ENXIO;

check _AFTER_ the call to do_remove_conflicting_framebuffers() as this
would (now in a safe way) allow a native driver to replace the
conflicting one even if all slots in registered_fb[] are taken.

This also prevents unregistering a framebuffer that is no longer
registered (vga16f will unregister at module unload time even if the
frame buffer had been unregistered earlier due to being found
conflicting).

Signed-off-by: default avatarBruno Prémont <bonbons@linux-vserver.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 712f3147
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -1573,15 +1573,15 @@ static int do_register_framebuffer(struct fb_info *fb_info)
	struct fb_event event;
	struct fb_event event;
	struct fb_videomode mode;
	struct fb_videomode mode;


	if (num_registered_fb == FB_MAX)
		return -ENXIO;

	if (fb_check_foreignness(fb_info))
	if (fb_check_foreignness(fb_info))
		return -ENOSYS;
		return -ENOSYS;


	do_remove_conflicting_framebuffers(fb_info->apertures, fb_info->fix.id,
	do_remove_conflicting_framebuffers(fb_info->apertures, fb_info->fix.id,
					 fb_is_primary_device(fb_info));
					 fb_is_primary_device(fb_info));


	if (num_registered_fb == FB_MAX)
		return -ENXIO;

	num_registered_fb++;
	num_registered_fb++;
	for (i = 0 ; i < FB_MAX; i++)
	for (i = 0 ; i < FB_MAX; i++)
		if (!registered_fb[i])
		if (!registered_fb[i])
@@ -1639,7 +1639,7 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
	int i, ret = 0;
	int i, ret = 0;


	i = fb_info->node;
	i = fb_info->node;
	if (!registered_fb[i])
	if (i < 0 || i >= FB_MAX || registered_fb[i] != fb_info)
		return -EINVAL;
		return -EINVAL;


	if (!lock_fb_info(fb_info))
	if (!lock_fb_info(fb_info))