forked from mirrors/linux
		
	We need to prevent that users configure a screen size which is smaller than the currently selected font size. Otherwise rendering chars on the screen will access memory outside the graphics memory region. This patch adds a new function fbcon_modechange_possible() which implements this check and which later may be extended with other checks if necessary. The new function is called from the FBIOPUT_VSCREENINFO ioctl handler in fbmem.c, which will return -EINVAL if userspace asked for a too small screen size. Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> Cc: stable@vger.kernel.org # v5.4+
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _LINUX_FBCON_H
 | 
						|
#define _LINUX_FBCON_H
 | 
						|
 | 
						|
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
 | 
						|
void __init fb_console_init(void);
 | 
						|
void __exit fb_console_exit(void);
 | 
						|
int fbcon_fb_registered(struct fb_info *info);
 | 
						|
void fbcon_fb_unregistered(struct fb_info *info);
 | 
						|
void fbcon_fb_unbind(struct fb_info *info);
 | 
						|
void fbcon_suspended(struct fb_info *info);
 | 
						|
void fbcon_resumed(struct fb_info *info);
 | 
						|
int fbcon_mode_deleted(struct fb_info *info,
 | 
						|
		       struct fb_videomode *mode);
 | 
						|
void fbcon_new_modelist(struct fb_info *info);
 | 
						|
void fbcon_get_requirement(struct fb_info *info,
 | 
						|
			   struct fb_blit_caps *caps);
 | 
						|
void fbcon_fb_blanked(struct fb_info *info, int blank);
 | 
						|
int  fbcon_modechange_possible(struct fb_info *info,
 | 
						|
			       struct fb_var_screeninfo *var);
 | 
						|
void fbcon_update_vcs(struct fb_info *info, bool all);
 | 
						|
void fbcon_remap_all(struct fb_info *info);
 | 
						|
int fbcon_set_con2fb_map_ioctl(void __user *argp);
 | 
						|
int fbcon_get_con2fb_map_ioctl(void __user *argp);
 | 
						|
#else
 | 
						|
static inline void fb_console_init(void) {}
 | 
						|
static inline void fb_console_exit(void) {}
 | 
						|
static inline int fbcon_fb_registered(struct fb_info *info) { return 0; }
 | 
						|
static inline void fbcon_fb_unregistered(struct fb_info *info) {}
 | 
						|
static inline void fbcon_fb_unbind(struct fb_info *info) {}
 | 
						|
static inline void fbcon_suspended(struct fb_info *info) {}
 | 
						|
static inline void fbcon_resumed(struct fb_info *info) {}
 | 
						|
static inline int fbcon_mode_deleted(struct fb_info *info,
 | 
						|
				     struct fb_videomode *mode) { return 0; }
 | 
						|
static inline void fbcon_new_modelist(struct fb_info *info) {}
 | 
						|
static inline void fbcon_get_requirement(struct fb_info *info,
 | 
						|
					 struct fb_blit_caps *caps) {}
 | 
						|
static inline void fbcon_fb_blanked(struct fb_info *info, int blank) {}
 | 
						|
static inline int  fbcon_modechange_possible(struct fb_info *info,
 | 
						|
				struct fb_var_screeninfo *var) { return 0; }
 | 
						|
static inline void fbcon_update_vcs(struct fb_info *info, bool all) {}
 | 
						|
static inline void fbcon_remap_all(struct fb_info *info) {}
 | 
						|
static inline int fbcon_set_con2fb_map_ioctl(void __user *argp) { return 0; }
 | 
						|
static inline int fbcon_get_con2fb_map_ioctl(void __user *argp) { return 0; }
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* _LINUX_FBCON_H */
 |