Staging: speakup: fix an out-of-bounds error.
authorChristopher Brannon <chris@the-brannons.com>
Mon, 21 Feb 2011 14:07:10 +0000 (14:07 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Feb 2011 22:39:09 +0000 (14:39 -0800)
The cur_item variable from keyhelp.c is an index into a table of
messages.  The following condition should always hold:
MSG_FUNCNAMES_START + cur_item <= MSG_FUNCNAMES_END.
The check in keyhelp.c was wrong.  It allowed cur_item to be
incremented to an out-of-bounds value.

Signed-off-by: Christopher Brannon <chris@the-brannons.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/speakup/keyhelp.c

index 236f06d35ca6e90c469b8cbdfb026d9c25e0857a..23cf7f44f4502735a6ca80348842a89876a6ec40 100644 (file)
@@ -161,7 +161,9 @@ int handle_help(struct vc_data *vc, u_char type, u_char ch, u_short key)
                }
        cur_item = letter_offsets[ch-'a'];
        } else if (type == KT_CUR) {
-               if (ch == 0 && (cur_item + 1) <= MSG_FUNCNAMES_END)
+               if (ch == 0
+                   && (MSG_FUNCNAMES_START + cur_item + 1) <=
+                   MSG_FUNCNAMES_END)
                        cur_item++;
                else if (ch == 3 && cur_item > 0)
                        cur_item--;