diff options
author | Antonino A. Daplas <adaplas@gmail.com> | 2007-07-17 07:05:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-17 13:23:12 -0400 |
commit | 7592181005261c3d90398375ab6922f56cdd2bad (patch) | |
tree | 9ca5d040ec5bd2258553af8e3f2ef8d14e5db316 /drivers/video/cyblafb.c | |
parent | 11494543a5775b4764d0172084092715a533a8ce (diff) |
cyblafb: 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 <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/cyblafb.c')
-rw-r--r-- | drivers/video/cyblafb.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/video/cyblafb.c b/drivers/video/cyblafb.c index 94a66c2d2cf5..e23324d10be2 100644 --- a/drivers/video/cyblafb.c +++ b/drivers/video/cyblafb.c | |||
@@ -1068,15 +1068,18 @@ static int cyblafb_setcolreg(unsigned regno, unsigned red, unsigned green, | |||
1068 | out8(0x3C9, green >> 10); | 1068 | out8(0x3C9, green >> 10); |
1069 | out8(0x3C9, blue >> 10); | 1069 | out8(0x3C9, blue >> 10); |
1070 | 1070 | ||
1071 | } else if (bpp == 16) // RGB 565 | 1071 | } else if (regno < 16) { |
1072 | ((u32 *) info->pseudo_palette)[regno] = | 1072 | if (bpp == 16) // RGB 565 |
1073 | (red & 0xF800) | | 1073 | ((u32 *) info->pseudo_palette)[regno] = |
1074 | ((green & 0xFC00) >> 5) | ((blue & 0xF800) >> 11); | 1074 | (red & 0xF800) | |
1075 | else if (bpp == 32) // ARGB 8888 | 1075 | ((green & 0xFC00) >> 5) | |
1076 | ((u32 *) info->pseudo_palette)[regno] = | 1076 | ((blue & 0xF800) >> 11); |
1077 | ((transp & 0xFF00) << 16) | | 1077 | else if (bpp == 32) // ARGB 8888 |
1078 | ((red & 0xFF00) << 8) | | 1078 | ((u32 *) info->pseudo_palette)[regno] = |
1079 | ((green & 0xFF00)) | ((blue & 0xFF00) >> 8); | 1079 | ((transp & 0xFF00) << 16) | |
1080 | ((red & 0xFF00) << 8) | | ||
1081 | ((green & 0xFF00)) | ((blue & 0xFF00) >> 8); | ||
1082 | } | ||
1080 | 1083 | ||
1081 | return 0; | 1084 | return 0; |
1082 | } | 1085 | } |