tridentfb: Fix pseudo_palette array overrun in setcolreg
PATCH 17/24 tridentfb: Fix pseudo_palette array overrun in setcolreg
The pseudo_palette has only 16 elements. Do not write if regno (the array index) is more than 15.
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/tridentfb.c | 30 ++++++++++++++++-------------- 1 files changed, 16 insertions(+), 14 deletions(-)
drivers/video/tridentfb.c +16 -14
@@ -976,7 +976,7 @@ static int tridentfb_setcolreg(unsignedreturn 1 ; -if (bpp==8 ) { +if (bpp ==8 ) {t_outb (0xFF ,0x3C6 );t_outb (regno,0x3C8 );
@@ -984,19 +984,21 @@ static int tridentfb_setcolreg(unsignedt_outb (green>>10 ,0x3C9 );t_outb (blue>>10 ,0x3C9 ); - }else if (bpp ==16 ) {/* RGB 565 */ -u32 col; - - col = (red &0xF800 ) | ((green &0xFC00 ) >>5 ) | - ((blue &0xF800 ) >>11 ); - col |= col <<16 ; - ((u32 *)(info->pseudo_palette))[regno] = col; - }else if (bpp ==32 )/* ARGB 8888 */ - ((u32 *)info->pseudo_palette)[regno] = - ((transp &0xFF00 ) <<16 ) | - ((red &0xFF00 ) <<8 ) | - ((green &0xFF00 )) | - ((blue &0xFF00 )>>8 ); + }else if (regno <16 ) { +if (bpp ==16 ) {/* RGB 565 */ +u32 col; + + col = (red &0xF800 ) | ((green &0xFC00 ) >>5 ) | + ((blue &0xF800 ) >>11 ); + col |= col <<16 ; + ((u32 *)(info->pseudo_palette))[regno] = col; + }else if (bpp ==32 )/* ARGB 8888 */ + ((u32 *)info->pseudo_palette)[regno] = + ((transp &0xFF00 ) <<16 ) | + ((red &0xFF00 ) <<8 ) | + ((green &0xFF00 )) | + ((blue &0xFF00 )>>8 ); + }// debug("exit\n"); return 0 ;
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/