From: "Antonino A. Daplas" - the pseudo_palette is only 16 elements long. - do not write to the pseudo_palette if regno (array index) is more than 15. Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- drivers/video/sis/sis.h | 2 +- drivers/video/sis/sis_main.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff -puN drivers/video/sis/sis.h~sisfb-fix-pseudo_palette-array-size-and-overrun drivers/video/sis/sis.h --- a/drivers/video/sis/sis.h~sisfb-fix-pseudo_palette-array-size-and-overrun +++ a/drivers/video/sis/sis.h @@ -479,7 +479,7 @@ struct sis_video_info { struct fb_var_screeninfo default_var; struct fb_fix_screeninfo sisfb_fix; - u32 pseudo_palette[17]; + u32 pseudo_palette[16]; struct sisfb_monitor { u16 hmin; diff -puN drivers/video/sis/sis_main.c~sisfb-fix-pseudo_palette-array-size-and-overrun drivers/video/sis/sis_main.c --- a/drivers/video/sis/sis_main.c~sisfb-fix-pseudo_palette-array-size-and-overrun +++ a/drivers/video/sis/sis_main.c @@ -1405,12 +1405,18 @@ sisfb_setcolreg(unsigned regno, unsigned } break; case 16: + if (regno >= 16) + break; + ((u32 *)(info->pseudo_palette))[regno] = (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11); break; case 32: + if (regno >= 16) + break; + red >>= 8; green >>= 8; blue >>= 8; _