From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753381AbdBUNpM (ORCPT ); Tue, 21 Feb 2017 08:45:12 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:35370 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752574AbdBUNpE (ORCPT ); Tue, 21 Feb 2017 08:45:04 -0500 From: "Pranay Kr. Srivastava" To: w.d.hubbs@gmail.com, chris@the-brannons.com, kirk@reisers.ca, samuel.thibault@ens-lyon.org, gregkh@linuxfoundation.org, sfr@canb.auug.org.au, speakup@linux-speakup.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Cc: "Pranay Kr. Srivastava" Subject: [PATCH Speakup v2] return same error value from spk_set_key_info Date: Tue, 21 Feb 2017 19:14:38 +0530 Message-Id: <20170221134438.59469-1-pranjas@gmail.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170221122407.re5zby44cdhvfy46@var.youpi.perso.aquilenet.fr> References: <20170221122407.re5zby44cdhvfy46@var.youpi.perso.aquilenet.fr> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch makes spk_set_key_info return -EINVAL in case of failure instead of returning 4 different values for the type of error that occurred. Print the offending values instead as debug message. Signed-off-by: Pranay Kr. Srivastava --- drivers/staging/speakup/main.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c index c2f70ef..ad95905 100644 --- a/drivers/staging/speakup/main.c +++ b/drivers/staging/speakup/main.c @@ -1216,13 +1216,20 @@ int spk_set_key_info(const u_char *key_info, u_char *k_buffer) u_char ch, version, num_keys; version = *cp++; - if (version != KEY_MAP_VER) - return -1; + if (version != KEY_MAP_VER) { + pr_debug("version found %d should be %d\n", + version, KEY_MAP_VER); + return -EINVAL; + } num_keys = *cp; states = (int)cp[1]; key_data_len = (states + 1) * (num_keys + 1); - if (key_data_len + SHIFT_TBL_SIZE + 4 >= sizeof(spk_key_buf)) - return -2; + if (key_data_len + SHIFT_TBL_SIZE + 4 >= sizeof(spk_key_buf)) { + pr_debug("key_data_len = %d, SHIFT_TBL_SIZE + 4 = %d,\t" + "sizeof(spk_key_buf) = %lu\n", key_data_len, + SHIFT_TBL_SIZE + 4, sizeof(spk_key_buf)); + return -EINVAL; + } memset(k_buffer, 0, SHIFT_TBL_SIZE); memset(spk_our_keys, 0, sizeof(spk_our_keys)); spk_shift_table = k_buffer; @@ -1233,14 +1240,19 @@ int spk_set_key_info(const u_char *key_info, u_char *k_buffer) cp1 += 2; /* now pointing at shift states */ for (i = 1; i <= states; i++) { ch = *cp1++; - if (ch >= SHIFT_TBL_SIZE) - return -3; + if (ch >= SHIFT_TBL_SIZE) { + pr_debug("ch = %d, SHIFT_TBL_SIZE = %d\n", ch, + SHIFT_TBL_SIZE); + return -EINVAL; + } spk_shift_table[ch] = i; } keymap_flags = *cp1++; while ((ch = *cp1)) { - if (ch >= MAX_KEY) - return -4; + if (ch >= MAX_KEY) { + pr_debug("ch = %d, MAX_KEY = %d\n", ch, MAX_KEY); + return -EINVAL; + } spk_our_keys[ch] = cp1; cp1 += states + 1; } -- 2.10.2