Re: [PATCH]about eicon: array subscript is above array bounds

From: Karsten Keil
Date: Thu Dec 10 2009 - 09:50:21 EST


On Donnerstag, 10. Dezember 2009 05:04:35 Jerry Leo wrote:
> Hi, Karsten Keil,
>
> When i compile eicon,there have some waning look like this:

This looks wrong, but I do not know this part so well.

Armin ?

>
> CC [M] drivers/isdn/hardware/eicon/message.o
> drivers/isdn/hardware/eicon/message.c: In function âadd_b23â:
> drivers/isdn/hardware/eicon/message.c:8426: warning: array subscript
> is above array bounds
> drivers/isdn/hardware/eicon/message.c:8427: warning: array subscript
> is above array bounds
> drivers/isdn/hardware/eicon/message.c:8434: warning: array subscript
> is above array bounds
> drivers/isdn/hardware/eicon/message.c:8435: warning: array subscript
> is above array bounds
> drivers/isdn/hardware/eicon/message.c:8436: warning: array subscript
> is above array bounds
> drivers/isdn/hardware/eicon/message.c:8447: warning: array subscript
> is above array bounds
>
> I think the array is short then be used,because the array's max length
> is 20, then it will use long than this, the code is in
> "drivers/isdn/hardware/eicon/divacapi.h" 1360L, 50994C :
>
>
> #define T30_MAX_STATION_ID_LENGTH 20
> #define T30_MAX_SUBADDRESS_LENGTH 20
> #define T30_MAX_PASSWORD_LENGTH 20
>
> typedef struct t30_info_s T30_INFO;
> struct t30_info_s {
> byte code;
> byte rate_div_2400;
> byte resolution;
> byte data_format;
> byte pages_low;
> byte pages_high;
> byte operating_mode;
> byte control_bits_low;
> byte control_bits_high;
> byte feature_bits_low;
> byte feature_bits_high;
> byte recording_properties;
> byte universal_6;
> byte universal_7;
> byte station_id_len;
> byte head_line_len;
> byte station_id[T30_MAX_STATION_ID_LENGTH];
> /* byte head_line[]; */
> /* byte sub_sep_length; */
> /* byte sub_sep_field[]; */
> /* byte pwd_length; */
> /* byte pwd_field[]; */
> /* byte nsf_info_length; */
> /* byte nsf_info_field[]; */
> };
>
> "drivers/isdn/hardware/eicon/message.c" 15071L, 487328C
>
> if (pos != 0)
> {
> if (CAPI_MAX_DATE_TIME_LENGTH + 2 +
> b3_config_parms[3].length > CAPI_MAX_HEAD_LINE_SPACE)
> pos = 0;
> else
> {
> ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' ';
> ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' ';
> len = (byte)b3_config_parms[2].length;
> if (len > 20)
> len = 20;
> if (CAPI_MAX_DATE_TIME_LENGTH + 2 + len + 2 +
> b3_config_parms[3].length <= CAPI_MAX_HEAD_LINE_SPACE)
> {
> for (i = 0; i < len; i++)
> ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ((byte
> *)b3_config_parms[2].info)[1+i];
> ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' ';
> ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' ';
> }
> }
> }
>
>
>
> can this patch commit?
>

Wrong fileorder, this is a reverse patch.
But I think the code should be fixed.

>
> diff -up linux-2.6/drivers/isdn/hardware/eicon/divacapi.h
> linux-2.6/drivers/isdn/hardware/eicon/divacapi.h.orig
> --- linux-2.6/drivers/isdn/hardware/eicon/divacapi.h 2009-12-10
> 12:02:46.000000000 +0800
> +++ linux-2.6/drivers/isdn/hardware/eicon/divacapi.h.orig 2009-12-10
> 11:04:07.000000000 +0800
> @@ -445,7 +445,7 @@ struct _DIVA_CAPI_ADAPTER {
> #define CAPI_MAX_HEAD_LINE_SPACE 89
> #define CAPI_MAX_DATE_TIME_LENGTH 18
>
> -#define T30_MAX_STATION_ID_LENGTH 30
> +#define T30_MAX_STATION_ID_LENGTH 20
> #define T30_MAX_SUBADDRESS_LENGTH 20
> #define T30_MAX_PASSWORD_LENGTH 20
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/