@@ -181,7 +181,7 @@ static int lcd_extern_power_cmd_dynamic_size(unsigned char *init_table,
181
181
182
182
switch (ext_config -> type ) {
183
183
case LCD_EXTERN_I2C :
184
- while (i <= max_len ) {
184
+ while (( i + 2 ) < max_len ) {
185
185
type = init_table [i ];
186
186
if (type == LCD_EXTERN_INIT_END )
187
187
break ;
@@ -191,6 +191,9 @@ static int lcd_extern_power_cmd_dynamic_size(unsigned char *init_table,
191
191
init_table [i ], init_table [i + 1 ]);
192
192
}
193
193
cmd_size = init_table [i + 1 ];
194
+ if ((i + 2 + cmd_size ) > max_len )
195
+ break ;
196
+
194
197
if (type == LCD_EXTERN_INIT_NONE ) {
195
198
if (cmd_size < 1 ) {
196
199
EXTERR ("step %d: invalid cmd_size %d\n" ,
@@ -238,7 +241,7 @@ static int lcd_extern_power_cmd_dynamic_size(unsigned char *init_table,
238
241
}
239
242
break ;
240
243
case LCD_EXTERN_SPI :
241
- while (i <= max_len ) {
244
+ while (( i + 2 ) < max_len ) {
242
245
type = init_table [i ];
243
246
if (type == LCD_EXTERN_INIT_END )
244
247
break ;
@@ -248,6 +251,9 @@ static int lcd_extern_power_cmd_dynamic_size(unsigned char *init_table,
248
251
init_table [i ], init_table [i + 1 ]);
249
252
}
250
253
cmd_size = init_table [i + 1 ];
254
+ if ((i + 2 + cmd_size ) > max_len )
255
+ break ;
256
+
251
257
if (type == LCD_EXTERN_INIT_NONE ) {
252
258
if (cmd_size < 1 ) {
253
259
EXTERR ("step %d: invalid cmd_size %d\n" ,
@@ -311,7 +317,7 @@ static int lcd_extern_power_cmd_fixed_size(unsigned char *init_table, int flag)
311
317
cmd_size = ext_config -> cmd_size ;
312
318
switch (ext_config -> type ) {
313
319
case LCD_EXTERN_I2C :
314
- while (i <= max_len ) {
320
+ while (( i + cmd_size ) <= max_len ) {
315
321
type = init_table [i ];
316
322
if (type == LCD_EXTERN_INIT_END )
317
323
break ;
@@ -346,7 +352,7 @@ static int lcd_extern_power_cmd_fixed_size(unsigned char *init_table, int flag)
346
352
}
347
353
break ;
348
354
case LCD_EXTERN_SPI :
349
- while (i <= max_len ) {
355
+ while (( i + cmd_size ) <= max_len ) {
350
356
type = init_table [i ];
351
357
if (type == LCD_EXTERN_INIT_END )
352
358
break ;
@@ -494,10 +500,12 @@ static int aml_default_i2c_probe(struct i2c_client *client,
494
500
const struct i2c_device_id * id )
495
501
{
496
502
497
- if (!i2c_check_functionality (client -> adapter , I2C_FUNC_I2C ))
503
+ if (!i2c_check_functionality (client -> adapter , I2C_FUNC_I2C )) {
498
504
EXTERR ("%s: functionality check failed\n" , __func__ );
499
- else
500
- aml_default_i2c_client = client ;
505
+ return - ENODEV ;
506
+ }
507
+
508
+ aml_default_i2c_client = client ;
501
509
502
510
EXTPR ("%s OK\n" , __func__ );
503
511
return 0 ;
@@ -546,6 +554,7 @@ int aml_lcd_extern_default_probe(struct aml_lcd_extern_driver_s *ext_drv)
546
554
}
547
555
548
556
strncpy (i2c_info .type , ext_drv -> config .name , I2C_NAME_SIZE );
557
+ i2c_info .type [I2C_NAME_SIZE - 1 ] = '\0' ;
549
558
i2c_info .addr = ext_drv -> config .i2c_addr ;
550
559
i2c_info .platform_data = & ext_drv -> config ;
551
560
i2c_info .flags = 0 ;
@@ -558,11 +567,11 @@ int aml_lcd_extern_default_probe(struct aml_lcd_extern_driver_s *ext_drv)
558
567
if (!i2c_client ) {
559
568
EXTERR ("%s failed to new i2c device\n" ,
560
569
ext_drv -> config .name );
561
- } else {
562
- if ( lcd_debug_print_flag ) {
563
- EXTPR ( "%s new i2c device succeed\n" ,
564
- ext_drv -> config . name );
565
- }
570
+ return -1 ;
571
+ }
572
+ if ( lcd_debug_print_flag ) {
573
+ EXTPR ( "%s new i2c device succeed\n" ,
574
+ ext_drv -> config . name );
566
575
}
567
576
568
577
if (!aml_default_i2c_client ) {
0 commit comments