aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Munsie <imunsie@au.ibm.com>2010-03-11 07:07:24 -0500
committerDavid S. Miller <davem@davemloft.net>2010-03-15 18:47:02 -0400
commit8b4017d8c191822f1c93744e7876c9020e6209aa (patch)
tree6ca42661c6483b0a27dbed39b193575b0ef2c120
parentdec9951b8ad86c591af7b452966bf48b307a4010 (diff)
i4l: silence compiler warnings for array access in Eicon DIVA ISDN driver
When compiling this driver, the compiler throws the following warnings: 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 This arises from the particular semantics the driver is using to write to the nlc array (static byte[256]). The array has a length in byte 0 followed by a T30_INFO struct starting at byte 1. The T30_INFO struct has a number of variable length strings after the station_id entry, which cannot be explicitly defined in the struct and the driver accesses them with an array index to station_id beyond the length of station_id. This patch merely changes the semantics that the driver uses to access the entries after the station_id entry to use the original 256 byte nlc array taking the offset and length of the station_id entry to calculate where to write in the array, thereby silencing the warning. Signed-off-by: Ian Munsie <imunsie@au.ibm.com> Cc: Armin Schindler <mac@melware.de> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: Stoyan Gaydarov <sgayda2@uiuc.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/isdn/hardware/eicon/message.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/isdn/hardware/eicon/message.c b/drivers/isdn/hardware/eicon/message.c
index ae89fb89da64..4bd469b0c631 100644
--- a/drivers/isdn/hardware/eicon/message.c
+++ b/drivers/isdn/hardware/eicon/message.c
@@ -8423,17 +8423,17 @@ static word add_b23(PLCI *plci, API_PARSE *bp)
8423 pos = 0; 8423 pos = 0;
8424 else 8424 else
8425 { 8425 {
8426 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' '; 8426 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ' ';
8427 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' '; 8427 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ' ';
8428 len = (byte)b3_config_parms[2].length; 8428 len = (byte)b3_config_parms[2].length;
8429 if (len > 20) 8429 if (len > 20)
8430 len = 20; 8430 len = 20;
8431 if (CAPI_MAX_DATE_TIME_LENGTH + 2 + len + 2 + b3_config_parms[3].length <= CAPI_MAX_HEAD_LINE_SPACE) 8431 if (CAPI_MAX_DATE_TIME_LENGTH + 2 + len + 2 + b3_config_parms[3].length <= CAPI_MAX_HEAD_LINE_SPACE)
8432 { 8432 {
8433 for (i = 0; i < len; i++) 8433 for (i = 0; i < len; i++)
8434 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ((byte *)b3_config_parms[2].info)[1+i]; 8434 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ((byte *)b3_config_parms[2].info)[1+i];
8435 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' '; 8435 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ' ';
8436 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ' '; 8436 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ' ';
8437 } 8437 }
8438 } 8438 }
8439 } 8439 }
@@ -8444,9 +8444,8 @@ static word add_b23(PLCI *plci, API_PARSE *bp)
8444 ((T30_INFO *)&nlc[1])->head_line_len = (byte)(pos + len); 8444 ((T30_INFO *)&nlc[1])->head_line_len = (byte)(pos + len);
8445 nlc[0] += (byte)(pos + len); 8445 nlc[0] += (byte)(pos + len);
8446 for (i = 0; i < len; i++) 8446 for (i = 0; i < len; i++)
8447 ((T30_INFO *)&nlc[1])->station_id[20 + pos++] = ((byte *)b3_config_parms[3].info)[1+i]; 8447 nlc[1 + offsetof(T30_INFO, station_id) + 20 + pos++] = ((byte *)b3_config_parms[3].info)[1+i];
8448 } 8448 } else
8449 else
8450 ((T30_INFO *)&nlc[1])->head_line_len = 0; 8449 ((T30_INFO *)&nlc[1])->head_line_len = 0;
8451 8450
8452 plci->nsf_control_bits = 0; 8451 plci->nsf_control_bits = 0;