@@ -162,7 +162,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
162
162
struct file * filp = NULL ;
163
163
loff_t pos = 0 ;
164
164
void * buf = NULL ;
165
- int i = 0 ;
165
+ loff_t i = 0 ;
166
166
unsigned int canvas_real_size = devp -> canvas_h * devp -> canvas_w ;
167
167
mm_segment_t old_fs = get_fs ();
168
168
@@ -174,7 +174,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
174
174
return ;
175
175
}
176
176
if ((devp -> cma_config_flag == 1 ) &&
177
- (devp -> cma_mem_alloc [ devp -> index ] == 0 )) {
177
+ (devp -> cma_mem_alloc == 0 )) {
178
178
pr_info ("%s:no cma alloc mem!!!\n" , __func__ );
179
179
return ;
180
180
}
@@ -188,7 +188,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
188
188
buf = phys_to_virt (devp -> mem_start +
189
189
devp -> canvas_max_size * i );
190
190
vfs_write (filp , buf , canvas_real_size , & pos );
191
- pr_info ("write buffer %2d of %2u to %s.\n" ,
191
+ pr_info ("write buffer %lld of %2u to %s.\n" ,
192
192
i , devp -> canvas_max_num , path );
193
193
}
194
194
vfs_fsync (filp , 0 );
@@ -427,11 +427,15 @@ static ssize_t vdin_attr_store(struct device *dev,
427
427
/* start = simple_strtol(parm[2], NULL, 16); */
428
428
/* offset = simple_strtol(parm[3], NULL, 16); */
429
429
430
- if (kstrtol (parm [2 ], 16 , & val ) < 0 )
430
+ if (kstrtol (parm [2 ], 16 , & val ) < 0 ) {
431
+ kfree (buf_orig );
431
432
return - EINVAL ;
433
+ }
432
434
start = val ;
433
- if (kstrtol (parm [3 ], 16 , & val ) < 0 )
435
+ if (kstrtol (parm [3 ], 16 , & val ) < 0 ) {
436
+ kfree (buf_orig );
434
437
return - EINVAL ;
438
+ }
435
439
offset = val ;
436
440
dump_other_mem (parm [1 ], start , offset );
437
441
} else if (parm [1 ] != NULL ) {
@@ -480,8 +484,10 @@ static ssize_t vdin_attr_store(struct device *dev,
480
484
break ;
481
485
}
482
486
/* fmt = simple_strtol(parm[2], NULL, 16); */
483
- if (kstrtol (parm [2 ], 16 , & val ) < 0 )
487
+ if (kstrtol (parm [2 ], 16 , & val ) < 0 ) {
488
+ kfree (buf_orig );
484
489
return - EINVAL ;
490
+ }
485
491
fmt = val ;
486
492
487
493
/* devp->flags |= VDIN_FLAG_FS_OPENED; */
@@ -563,6 +569,7 @@ static ssize_t vdin_attr_store(struct device *dev,
563
569
pr_err ("fps cfmt > /sys/class/vdin/vdinx/attr.\n" );
564
570
pr_err ("port mybe bt656 or viuin," );
565
571
pr_err ("fps the frame rate of input.\n" );
572
+ kfree (buf_orig );
566
573
return len ;
567
574
}
568
575
memset (& param , 0 , sizeof (struct vdin_parm_s ));
@@ -584,14 +591,20 @@ static ssize_t vdin_attr_store(struct device *dev,
584
591
/* param.h_active = simple_strtol(parm[2], NULL, 10); */
585
592
/* param.v_active = simple_strtol(parm[3], NULL, 10); */
586
593
/* param.frame_rate = simple_strtol(parm[4], NULL, 10); */
587
- if (kstrtol (parm [2 ], 10 , & val ) < 0 )
594
+ if (kstrtol (parm [2 ], 10 , & val ) < 0 ) {
595
+ kfree (buf_orig );
588
596
return - EINVAL ;
597
+ }
589
598
param .h_active = val ;
590
- if (kstrtol (parm [3 ], 10 , & val ) < 0 )
599
+ if (kstrtol (parm [3 ], 10 , & val ) < 0 ) {
600
+ kfree (buf_orig );
591
601
return - EINVAL ;
602
+ }
592
603
param .v_active = val ;
593
- if (kstrtol (parm [4 ], 10 , & val ) < 0 )
604
+ if (kstrtol (parm [4 ], 10 , & val ) < 0 ) {
605
+ kfree (buf_orig );
594
606
return - EINVAL ;
607
+ }
595
608
param .frame_rate = val ;
596
609
pr_info (" hactive:%d,vactive:%d, rate:%d\n" ,
597
610
param .h_active ,
@@ -601,17 +614,21 @@ static ssize_t vdin_attr_store(struct device *dev,
601
614
param .cfmt = TVIN_YUV422 ;
602
615
else {
603
616
/* param.cfmt = simple_strtol(parm[5], NULL, 10); */
604
- if (kstrtol (parm [5 ], 10 , & val ) < 0 )
617
+ if (kstrtol (parm [5 ], 10 , & val ) < 0 ) {
618
+ kfree (buf_orig );
605
619
return - EINVAL ;
620
+ }
606
621
param .cfmt = val ;
607
622
}
608
623
pr_info (" cfmt:%d\n" , param .cfmt );
609
624
if (!parm [6 ])
610
625
param .dfmt = TVIN_YUV422 ;
611
626
else {
612
627
/* param.dfmt = simple_strtol(parm[6], NULL, 10); */
613
- if (kstrtol (parm [6 ], 10 , & val ) < 0 )
628
+ if (kstrtol (parm [6 ], 10 , & val ) < 0 ) {
629
+ kfree (buf_orig );
614
630
return - EINVAL ;
631
+ }
615
632
param .dfmt = val ;
616
633
}
617
634
pr_info (" dfmt:%d\n" , param .dfmt );
@@ -621,8 +638,10 @@ static ssize_t vdin_attr_store(struct device *dev,
621
638
/* param.scan_mode =
622
639
* simple_strtol(parm[7], NULL, 10);
623
640
*/
624
- if (kstrtol (parm [7 ], 10 , & val ) < 0 )
641
+ if (kstrtol (parm [7 ], 10 , & val ) < 0 ) {
642
+ kfree (buf_orig );
625
643
return - EINVAL ;
644
+ }
626
645
param .scan_mode = val ;
627
646
}
628
647
pr_info (" scan_mode:%d\n" , param .scan_mode );
@@ -634,16 +653,20 @@ static ssize_t vdin_attr_store(struct device *dev,
634
653
} else if (!strcmp (parm [0 ], "disablesm" ))
635
654
del_timer_sync (& devp -> timer );
636
655
else if (!strcmp (parm [0 ], "freeze" )) {
637
- if (!(devp -> flags & VDIN_FLAG_DEC_STARTED ))
656
+ if (!(devp -> flags & VDIN_FLAG_DEC_STARTED )) {
657
+ kfree (buf_orig );
638
658
return len ;
659
+ }
639
660
if (devp -> fmt_info_p -> scan_mode == TVIN_SCAN_MODE_PROGRESSIVE )
640
661
vdin_vf_freeze (devp -> vfp , 1 );
641
662
else
642
663
vdin_vf_freeze (devp -> vfp , 2 );
643
664
644
665
} else if (!strcmp (parm [0 ], "unfreeze" )) {
645
- if (!(devp -> flags & VDIN_FLAG_DEC_STARTED ))
666
+ if (!(devp -> flags & VDIN_FLAG_DEC_STARTED )) {
667
+ kfree (buf_orig );
646
668
return len ;
669
+ }
647
670
vdin_vf_unfreeze (devp -> vfp );
648
671
} else if (!strcmp (parm [0 ], "conversion" )) {
649
672
if (parm [1 ] &&
@@ -655,14 +678,20 @@ static ssize_t vdin_attr_store(struct device *dev,
655
678
/* simple_strtoul(parm[2], NULL, 10); */
656
679
/* devp->debug.dest_cfmt = */
657
680
/* simple_strtoul(parm[3], NULL, 10); */
658
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
681
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
682
+ kfree (buf_orig );
659
683
return - EINVAL ;
684
+ }
660
685
devp -> debug .scaler4w = val ;
661
- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
686
+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
687
+ kfree (buf_orig );
662
688
return - EINVAL ;
689
+ }
663
690
devp -> debug .scaler4h = val ;
664
- if (kstrtoul (parm [3 ], 10 , & val ) < 0 )
691
+ if (kstrtoul (parm [3 ], 10 , & val ) < 0 ) {
692
+ kfree (buf_orig );
665
693
return - EINVAL ;
694
+ }
666
695
devp -> debug .dest_cfmt = val ;
667
696
668
697
devp -> flags |= VDIN_FLAG_MANUAL_CONVERSION ;
@@ -715,11 +744,15 @@ static ssize_t vdin_attr_store(struct device *dev,
715
744
} else if (!strcmp (parm [0 ], "rgb_xy ")) {
716
745
unsigned int x , y ;
717
746
718
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
747
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
748
+ kfree (buf_orig );
719
749
return - EINVAL ;
750
+ }
720
751
x = val ;
721
- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
752
+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
753
+ kfree (buf_orig );
722
754
return - EINVAL ;
755
+ }
723
756
y = val ;
724
757
vdin_set_prob_xy (devp -> addr_offset , x , y , devp );
725
758
} else if (!strcmp (parm [0 ], "rgb_info ")) {
@@ -728,11 +761,15 @@ static ssize_t vdin_attr_store(struct device *dev,
728
761
vdin_get_prob_rgb (devp -> addr_offset , & r , & g , & b );
729
762
pr_info ("rgb_info-->r:%d,g:%d,b:%d\n" , r , g , b );
730
763
} else if (!strcmp (parm [0 ], "mpeg2vdin ")) {
731
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
764
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
765
+ kfree (buf_orig );
732
766
return - EINVAL ;
767
+ }
733
768
devp -> h_active = val ;
734
- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
769
+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
770
+ kfree (buf_orig );
735
771
return - EINVAL ;
772
+ }
736
773
devp -> v_active = val ;
737
774
vdin_set_mpegin (devp );
738
775
pr_info ("mpeg2vdin:h_active:%d,v_active:%d\n" ,
@@ -747,19 +784,24 @@ static ssize_t vdin_attr_store(struct device *dev,
747
784
} else if (!strcmp (parm [0 ], "mat0_xy ")) {
748
785
unsigned int x , y ;
749
786
750
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
787
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
788
+ kfree (buf_orig );
751
789
return - EINVAL ;
790
+ }
752
791
x = val ;
753
- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
792
+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
793
+ kfree (buf_orig );
754
794
return - EINVAL ;
795
+ }
755
796
y = val ;
756
797
pr_info ("pos x :%d, pos y :%d\n" , x , y );
757
798
vdin_set_prob_matrix0_xy (devp -> addr_offset , x , y , devp );
758
799
} else if (!strcmp (parm [0 ], "mat0_set ")) {
759
800
unsigned int x ;
760
-
761
- if ( kstrtoul ( parm [ 1 ], 10 , & val ) < 0 )
801
+ if ( kstrtoul ( parm [ 1 ], 10 , & val ) < 0 ) {
802
+ kfree ( buf_orig );
762
803
return - EINVAL ;
804
+ }
763
805
x = val ;
764
806
pr_info ("matrix set : %d\n" , x );
765
807
vdin_set_before_after_mat0 (devp -> addr_offset , x , devp );
@@ -862,14 +904,18 @@ static ssize_t vdin_attr_store(struct device *dev,
862
904
vdin_resume_dec (devp );
863
905
pr_info ("resume_dec(%d) ok\n\n" , devp -> index );
864
906
} else if (!strcmp (parm [0 ], "color_depth ")) {
865
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
907
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
908
+ kfree (buf_orig );
866
909
return - EINVAL ;
910
+ }
867
911
devp -> color_depth_config = val ;
868
912
pr_info ("color_depth(%d):%d\n\n" , devp -> index ,
869
913
devp -> color_depth_config );
870
914
} else if (!strcmp (parm [0 ], "color_depth_mode ")) {
871
- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
915
+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
916
+ kfree (buf_orig );
872
917
return - EINVAL ;
918
+ }
873
919
devp -> color_depth_mode = val ;
874
920
pr_info ("color_depth_mode(%d):%d\n\n" , devp -> index ,
875
921
devp -> color_depth_mode );
@@ -1033,21 +1079,29 @@ struct device_attribute *attr, const char *buf, size_t count)
1033
1079
/* crop->vs = simple_strtol(parm[2], NULL, 10); */
1034
1080
/* crop->ve = simple_strtol(parm[3], NULL, 10); */
1035
1081
1036
- if (kstrtol (parm [0 ], 10 , & val ) < 0 )
1082
+ if (kstrtol (parm [0 ], 10 , & val ) < 0 ) {
1083
+ kfree (buf_orig );
1037
1084
return - EINVAL ;
1085
+ }
1038
1086
crop -> hs = val ;
1039
- if (kstrtol (parm [1 ], 10 , & val ) < 0 )
1087
+ if (kstrtol (parm [1 ], 10 , & val ) < 0 ) {
1088
+ kfree (buf_orig );
1040
1089
return - EINVAL ;
1090
+ }
1041
1091
crop -> he = val ;
1042
- if (kstrtol (parm [2 ], 10 , & val ) < 0 )
1092
+ if (kstrtol (parm [2 ], 10 , & val ) < 0 ) {
1093
+ kfree (buf_orig );
1043
1094
return - EINVAL ;
1095
+ }
1044
1096
crop -> vs = val ;
1045
- if (kstrtol (parm [3 ], 10 , & val ) < 0 )
1097
+ if (kstrtol (parm [3 ], 10 , & val ) < 0 ) {
1098
+ kfree (buf_orig );
1046
1099
return - EINVAL ;
1100
+ }
1047
1101
crop -> ve = val ;
1048
-
1049
1102
pr_info ("hs_offset %u, he_offset %u, vs_offset %u, ve_offset %u.\n" ,
1050
1103
crop -> hs , crop -> he , crop -> vs , crop -> ve );
1104
+ kfree (buf_orig );
1051
1105
return count ;
1052
1106
}
1053
1107
@@ -1111,7 +1165,11 @@ static ssize_t vdin_cm2_store(struct device *dev,
1111
1165
continue ;
1112
1166
parm [n ++ ] = token ;
1113
1167
}
1114
-
1168
+ if (n == 0 ) {
1169
+ pr_info ("parm[] not initialized.\n" );
1170
+ kfree (buf_orig );
1171
+ return count ;
1172
+ }
1115
1173
if ((parm [0 ][0 ] == 'w' ) && parm [0 ][1 ] == 'm' ) {
1116
1174
if (n != 7 ) {
1117
1175
pr_info ("read : invalid parameter\n" );
@@ -1120,29 +1178,41 @@ static ssize_t vdin_cm2_store(struct device *dev,
1120
1178
return count ;
1121
1179
}
1122
1180
/* addr = simple_strtol(parm[1], NULL, 16); */
1123
- if (kstrtol (parm [1 ], 16 , & val ) < 0 )
1181
+ if (kstrtol (parm [1 ], 16 , & val ) < 0 ) {
1182
+ kfree (buf_orig );
1124
1183
return - EINVAL ;
1184
+ }
1125
1185
addr = val ;
1126
1186
addr = addr - addr %8 ;
1127
1187
/* data[0] = simple_strtol(parm[2], NULL, 16); */
1128
1188
/* data[1] = simple_strtol(parm[3], NULL, 16); */
1129
1189
/* data[2] = simple_strtol(parm[4], NULL, 16); */
1130
1190
/* data[3] = simple_strtol(parm[5], NULL, 16); */
1131
1191
/* data[4] = simple_strtol(parm[6], NULL, 16); */
1132
- if (kstrtol (parm [2 ], 16 , & val ) < 0 )
1192
+ if (kstrtol (parm [2 ], 16 , & val ) < 0 ) {
1193
+ kfree (buf_orig );
1133
1194
return - EINVAL ;
1195
+ }
1134
1196
data [0 ] = val ;
1135
- if (kstrtol (parm [3 ], 16 , & val ) < 0 )
1197
+ if (kstrtol (parm [3 ], 16 , & val ) < 0 ) {
1198
+ kfree (buf_orig );
1136
1199
return - EINVAL ;
1200
+ }
1137
1201
data [1 ] = val ;
1138
- if (kstrtol (parm [4 ], 16 , & val ) < 0 )
1202
+ if (kstrtol (parm [4 ], 16 , & val ) < 0 ) {
1203
+ kfree (buf_orig );
1139
1204
return - EINVAL ;
1205
+ }
1140
1206
data [2 ] = val ;
1141
- if (kstrtol (parm [5 ], 16 , & val ) < 0 )
1207
+ if (kstrtol (parm [5 ], 16 , & val ) < 0 ) {
1208
+ kfree (buf_orig );
1142
1209
return - EINVAL ;
1210
+ }
1143
1211
data [3 ] = val ;
1144
- if (kstrtol (parm [6 ], 16 , & val ) < 0 )
1212
+ if (kstrtol (parm [6 ], 16 , & val ) < 0 ) {
1213
+ kfree (buf_orig );
1145
1214
return - EINVAL ;
1215
+ }
1146
1216
data [4 ] = val ;
1147
1217
aml_write_vcbus (addr_port , addr );
1148
1218
aml_write_vcbus (data_port , data [0 ]);
@@ -1164,8 +1234,10 @@ static ssize_t vdin_cm2_store(struct device *dev,
1164
1234
return count ;
1165
1235
}
1166
1236
/* addr = simple_strtol(parm[1], NULL, 16); */
1167
- if (kstrtol (parm [1 ], 16 , & val ) < 0 )
1237
+ if (kstrtol (parm [1 ], 16 , & val ) < 0 ) {
1238
+ kfree (buf_orig );
1168
1239
return - EINVAL ;
1240
+ }
1169
1241
addr = val ;
1170
1242
addr = addr - addr %8 ;
1171
1243
aml_write_vcbus (addr_port , addr );
0 commit comments