forked from Minki/linux
pvr2fb: fix pseudo_palette array overrun and typecast
- the pseudo_palette has only 16 elements. Do not write if regno (the array index) is more than 15. - if using generic drawing libraries, the typecast of pseudo_palette is always u32 * Signed-off-by: Antonino Daplas <adaplas@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
02c2c209c2
commit
a66ad56eb2
@ -333,24 +333,25 @@ static int pvr2fb_setcolreg(unsigned int regno, unsigned int red,
|
||||
((blue & 0xf800) >> 11);
|
||||
|
||||
pvr2fb_set_pal_entry(par, regno, tmp);
|
||||
((u16*)(info->pseudo_palette))[regno] = tmp;
|
||||
break;
|
||||
case 24: /* RGB 888 */
|
||||
red >>= 8; green >>= 8; blue >>= 8;
|
||||
((u32*)(info->pseudo_palette))[regno] = (red << 16) | (green << 8) | blue;
|
||||
tmp = (red << 16) | (green << 8) | blue;
|
||||
break;
|
||||
case 32: /* ARGB 8888 */
|
||||
red >>= 8; green >>= 8; blue >>= 8;
|
||||
tmp = (transp << 24) | (red << 16) | (green << 8) | blue;
|
||||
|
||||
pvr2fb_set_pal_entry(par, regno, tmp);
|
||||
((u32*)(info->pseudo_palette))[regno] = tmp;
|
||||
break;
|
||||
default:
|
||||
pr_debug("Invalid bit depth %d?!?\n", info->var.bits_per_pixel);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (regno < 16)
|
||||
((u32*)(info->pseudo_palette))[regno] = tmp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user