[PATCH SPEAKUP v2 1/3] return same error value from spk_set_key_info

Samuel Thibault samuel.thibault at ens-lyon.org
Tue Feb 28 04:04:44 EST 2017


Pranay Kr. Srivastava, on mar. 28 févr. 2017 13:57:53 +0530, wrote:
> 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 <pranjas at gmail.com>

Reviewed-by: Samuel Thibault <samuel.thibault at ens-lyon.org>

> ---
>  drivers/staging/speakup/main.c | 27 +++++++++++++++++++--------
>  1 file changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c
> index c2f70ef..a1d5b66 100644
> --- a/drivers/staging/speakup/main.c
> +++ b/drivers/staging/speakup/main.c
> @@ -1216,13 +1216,19 @@ 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("too many key_infos (%d over %u)\n",
> +			 key_data_len + SHIFT_TBL_SIZE + 4, (unsigned int)(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 +1239,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("(%d) not valid shift state (max_allowed = %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("(%d), not valid key, (max_allowed = %d)\n", ch, MAX_KEY);
> +			return -EINVAL;
> +		}
>  		spk_our_keys[ch] = cp1;
>  		cp1 += states + 1;
>  	}
> -- 
> 2.10.2
> 

-- 
Samuel
Progress (n.): The process through which the Internet has evolved from
smart people in front of dumb terminals to dumb people in front of smart
terminals.


More information about the Speakup mailing list