2.5.24 matroxfb memory corruption
PATCH 1/1 2.5.24 matroxfb memory corruption
Hi,
Linus, please apply this. When James converted all drivers to unifieddo_install_cmap(), he blindly changed also matroxfb, which happily uses fbcon.currcon == -1. This caused memory corruption because of memory before fb_display[] array was overwritten.
Default do_install_cmap() also installed invalid default color map
in some matroxfb resolutions. Not all world have >= 4bpp.
Thanks,
Petr Vandrovec [email protected]
drivers/video/matrox/matroxfb_base.c +14 -1
@@ -141,6 +141,19 @@/* --------------------------------------------------------------------- */ +static inline void my_install_cmap (WPMINFO2 ) +{ +/* Do not touch this code if you do not understand what it does! */ +/* Never try to use do_install_cmap() instead. It is crap. */ +struct fb_cmap * cmap = &ACCESS_FBINFO (currcon_display)->cmap; + +if (cmap->len) +fb_set_cmap (cmap,1 , &ACCESS_FBINFO (fbcon)); +else +fb_set_cmap (fb_default_cmap (ACCESS_FBINFO (curr.cmap_len)), +1 , &ACCESS_FBINFO (fbcon)); +} + static void matrox_pan_var(WPMINFO struct fb_var_screeninfo *var) {unsigned int pos;
@@ -869,7 +882,7 @@up_read (&ACCESS_FBINFO (altout.lock)); } matrox_cfbX_init(PMINFO display); -do_install_cmap (ACCESS_FBINFO (fbcon.currcon),&ACCESS_FBINFO (fbcon)); +my_install_cmap (PMINFO2 );#if defined(CONFIG_FB_COMPAT_XPMAC )if (console_fb_info == &ACCESS_FBINFO (fbcon)) {int vmode, cmode;
drivers/video/matrox/matroxfb_crtc2.c +14 -1
@@ -84,6 +84,19 @@#undef m2info } +static inline void my_install_cmap (struct matroxfb_dh_fb_info * m2info) +{ +/* Do not touch this code if you do not understand what it does! */ +/* Never try to use do_install_cmap() instead. It is crap. */ +struct fb_cmap * cmap = &m2info->currcon_display->cmap; + +if (cmap->len) +fb_set_cmap (cmap,1 , &m2info->fbcon); +else +fb_set_cmap (fb_default_cmap (16 ),1 , &m2info->fbcon); +} + + static void matroxfb_dh_restore(struct matroxfb_dh_fb_info* m2info, struct my_timming* mt, struct display* p,
@@ -439,7 +452,7 @@up_read (&ACCESS_FBINFO (altout.lock)); }matroxfb_dh_cfbX_init (m2info, p); -do_install_cmap (ACCESS_FBINFO (fbcon.currcon), &ACCESS_FBINFO (fbcon)); +my_install_cmap (m2info); }return 0 ;#undef m2info
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
No, I will not fix your computer.
http://thinkgeek.com/sf