Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=973d9ab231a6b9feb1ff5b9a072f11756eca96cc
Commit:     973d9ab231a6b9feb1ff5b9a072f11756eca96cc
Parent:     eb3daa83c2f63743fb7597f620beac75e1ba5633
Author:     Antonino A. Daplas <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 17 04:05:41 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Jul 17 10:23:12 2007 -0700

    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]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/video/tridentfb.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c
index 55e8aa4..c699864 100644
--- a/drivers/video/tridentfb.c
+++ b/drivers/video/tridentfb.c
@@ -976,7 +976,7 @@ static int tridentfb_setcolreg(unsigned regno, unsigned 
red, unsigned green,
                return 1;
 
 
-       if (bpp==8) {
+       if (bpp == 8) {
                t_outb(0xFF,0x3C6);
                t_outb(regno,0x3C8);
 
@@ -984,19 +984,21 @@ static int tridentfb_setcolreg(unsigned regno, unsigned 
red, unsigned green,
                t_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;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to