@@ -162,7 +162,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
162162 struct file * filp = NULL ;
163163 loff_t pos = 0 ;
164164 void * buf = NULL ;
165- int i = 0 ;
165+ loff_t i = 0 ;
166166 unsigned int canvas_real_size = devp -> canvas_h * devp -> canvas_w ;
167167 mm_segment_t old_fs = get_fs ();
168168
@@ -174,7 +174,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
174174 return ;
175175 }
176176 if ((devp -> cma_config_flag == 1 ) &&
177- (devp -> cma_mem_alloc [ devp -> index ] == 0 )) {
177+ (devp -> cma_mem_alloc == 0 )) {
178178 pr_info ("%s:no cma alloc mem!!!\n" , __func__ );
179179 return ;
180180 }
@@ -188,7 +188,7 @@ static void vdin_dump_mem(char *path, struct vdin_dev_s *devp)
188188 buf = phys_to_virt (devp -> mem_start +
189189 devp -> canvas_max_size * i );
190190 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" ,
192192 i , devp -> canvas_max_num , path );
193193 }
194194 vfs_fsync (filp , 0 );
@@ -427,11 +427,15 @@ static ssize_t vdin_attr_store(struct device *dev,
427427 /* start = simple_strtol(parm[2], NULL, 16); */
428428 /* offset = simple_strtol(parm[3], NULL, 16); */
429429
430- if (kstrtol (parm [2 ], 16 , & val ) < 0 )
430+ if (kstrtol (parm [2 ], 16 , & val ) < 0 ) {
431+ kfree (buf_orig );
431432 return - EINVAL ;
433+ }
432434 start = val ;
433- if (kstrtol (parm [3 ], 16 , & val ) < 0 )
435+ if (kstrtol (parm [3 ], 16 , & val ) < 0 ) {
436+ kfree (buf_orig );
434437 return - EINVAL ;
438+ }
435439 offset = val ;
436440 dump_other_mem (parm [1 ], start , offset );
437441 } else if (parm [1 ] != NULL ) {
@@ -480,8 +484,10 @@ static ssize_t vdin_attr_store(struct device *dev,
480484 break ;
481485 }
482486 /* 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 );
484489 return - EINVAL ;
490+ }
485491 fmt = val ;
486492
487493 /* devp->flags |= VDIN_FLAG_FS_OPENED; */
@@ -563,6 +569,7 @@ static ssize_t vdin_attr_store(struct device *dev,
563569 pr_err ("fps cfmt > /sys/class/vdin/vdinx/attr.\n" );
564570 pr_err ("port mybe bt656 or viuin," );
565571 pr_err ("fps the frame rate of input.\n" );
572+ kfree (buf_orig );
566573 return len ;
567574 }
568575 memset (& param , 0 , sizeof (struct vdin_parm_s ));
@@ -584,14 +591,20 @@ static ssize_t vdin_attr_store(struct device *dev,
584591 /* param.h_active = simple_strtol(parm[2], NULL, 10); */
585592 /* param.v_active = simple_strtol(parm[3], NULL, 10); */
586593 /* 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 );
588596 return - EINVAL ;
597+ }
589598 param .h_active = val ;
590- if (kstrtol (parm [3 ], 10 , & val ) < 0 )
599+ if (kstrtol (parm [3 ], 10 , & val ) < 0 ) {
600+ kfree (buf_orig );
591601 return - EINVAL ;
602+ }
592603 param .v_active = val ;
593- if (kstrtol (parm [4 ], 10 , & val ) < 0 )
604+ if (kstrtol (parm [4 ], 10 , & val ) < 0 ) {
605+ kfree (buf_orig );
594606 return - EINVAL ;
607+ }
595608 param .frame_rate = val ;
596609 pr_info (" hactive:%d,vactive:%d, rate:%d\n" ,
597610 param .h_active ,
@@ -601,17 +614,21 @@ static ssize_t vdin_attr_store(struct device *dev,
601614 param .cfmt = TVIN_YUV422 ;
602615 else {
603616 /* 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 );
605619 return - EINVAL ;
620+ }
606621 param .cfmt = val ;
607622 }
608623 pr_info (" cfmt:%d\n" , param .cfmt );
609624 if (!parm [6 ])
610625 param .dfmt = TVIN_YUV422 ;
611626 else {
612627 /* 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 );
614630 return - EINVAL ;
631+ }
615632 param .dfmt = val ;
616633 }
617634 pr_info (" dfmt:%d\n" , param .dfmt );
@@ -621,8 +638,10 @@ static ssize_t vdin_attr_store(struct device *dev,
621638 /* param.scan_mode =
622639 * simple_strtol(parm[7], NULL, 10);
623640 */
624- if (kstrtol (parm [7 ], 10 , & val ) < 0 )
641+ if (kstrtol (parm [7 ], 10 , & val ) < 0 ) {
642+ kfree (buf_orig );
625643 return - EINVAL ;
644+ }
626645 param .scan_mode = val ;
627646 }
628647 pr_info (" scan_mode:%d\n" , param .scan_mode );
@@ -634,16 +653,20 @@ static ssize_t vdin_attr_store(struct device *dev,
634653 } else if (!strcmp (parm [0 ], "disablesm" ))
635654 del_timer_sync (& devp -> timer );
636655 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 );
638658 return len ;
659+ }
639660 if (devp -> fmt_info_p -> scan_mode == TVIN_SCAN_MODE_PROGRESSIVE )
640661 vdin_vf_freeze (devp -> vfp , 1 );
641662 else
642663 vdin_vf_freeze (devp -> vfp , 2 );
643664
644665 } 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 );
646668 return len ;
669+ }
647670 vdin_vf_unfreeze (devp -> vfp );
648671 } else if (!strcmp (parm [0 ], "conversion" )) {
649672 if (parm [1 ] &&
@@ -655,14 +678,20 @@ static ssize_t vdin_attr_store(struct device *dev,
655678 /* simple_strtoul(parm[2], NULL, 10); */
656679 /* devp->debug.dest_cfmt = */
657680 /* 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 );
659683 return - EINVAL ;
684+ }
660685 devp -> debug .scaler4w = val ;
661- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
686+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
687+ kfree (buf_orig );
662688 return - EINVAL ;
689+ }
663690 devp -> debug .scaler4h = val ;
664- if (kstrtoul (parm [3 ], 10 , & val ) < 0 )
691+ if (kstrtoul (parm [3 ], 10 , & val ) < 0 ) {
692+ kfree (buf_orig );
665693 return - EINVAL ;
694+ }
666695 devp -> debug .dest_cfmt = val ;
667696
668697 devp -> flags |= VDIN_FLAG_MANUAL_CONVERSION ;
@@ -715,11 +744,15 @@ static ssize_t vdin_attr_store(struct device *dev,
715744 } else if (!strcmp (parm [0 ], "rgb_xy ")) {
716745 unsigned int x , y ;
717746
718- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
747+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
748+ kfree (buf_orig );
719749 return - EINVAL ;
750+ }
720751 x = val ;
721- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
752+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
753+ kfree (buf_orig );
722754 return - EINVAL ;
755+ }
723756 y = val ;
724757 vdin_set_prob_xy (devp -> addr_offset , x , y , devp );
725758 } else if (!strcmp (parm [0 ], "rgb_info ")) {
@@ -728,11 +761,15 @@ static ssize_t vdin_attr_store(struct device *dev,
728761 vdin_get_prob_rgb (devp -> addr_offset , & r , & g , & b );
729762 pr_info ("rgb_info-->r:%d,g:%d,b:%d\n" , r , g , b );
730763 } 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 );
732766 return - EINVAL ;
767+ }
733768 devp -> h_active = val ;
734- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
769+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
770+ kfree (buf_orig );
735771 return - EINVAL ;
772+ }
736773 devp -> v_active = val ;
737774 vdin_set_mpegin (devp );
738775 pr_info ("mpeg2vdin:h_active:%d,v_active:%d\n" ,
@@ -747,19 +784,24 @@ static ssize_t vdin_attr_store(struct device *dev,
747784 } else if (!strcmp (parm [0 ], "mat0_xy ")) {
748785 unsigned int x , y ;
749786
750- if (kstrtoul (parm [1 ], 10 , & val ) < 0 )
787+ if (kstrtoul (parm [1 ], 10 , & val ) < 0 ) {
788+ kfree (buf_orig );
751789 return - EINVAL ;
790+ }
752791 x = val ;
753- if (kstrtoul (parm [2 ], 10 , & val ) < 0 )
792+ if (kstrtoul (parm [2 ], 10 , & val ) < 0 ) {
793+ kfree (buf_orig );
754794 return - EINVAL ;
795+ }
755796 y = val ;
756797 pr_info ("pos x :%d, pos y :%d\n" , x , y );
757798 vdin_set_prob_matrix0_xy (devp -> addr_offset , x , y , devp );
758799 } else if (!strcmp (parm [0 ], "mat0_set ")) {
759800 unsigned int x ;
760-
761- if ( kstrtoul ( parm [ 1 ], 10 , & val ) < 0 )
801+ if ( kstrtoul ( parm [ 1 ], 10 , & val ) < 0 ) {
802+ kfree ( buf_orig );
762803 return - EINVAL ;
804+ }
763805 x = val ;
764806 pr_info ("matrix set : %d\n" , x );
765807 vdin_set_before_after_mat0 (devp -> addr_offset , x , devp );
@@ -862,14 +904,18 @@ static ssize_t vdin_attr_store(struct device *dev,
862904 vdin_resume_dec (devp );
863905 pr_info ("resume_dec(%d) ok\n\n" , devp -> index );
864906 } 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 );
866909 return - EINVAL ;
910+ }
867911 devp -> color_depth_config = val ;
868912 pr_info ("color_depth(%d):%d\n\n" , devp -> index ,
869913 devp -> color_depth_config );
870914 } 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 );
872917 return - EINVAL ;
918+ }
873919 devp -> color_depth_mode = val ;
874920 pr_info ("color_depth_mode(%d):%d\n\n" , devp -> index ,
875921 devp -> color_depth_mode );
@@ -1033,21 +1079,29 @@ struct device_attribute *attr, const char *buf, size_t count)
10331079 /* crop->vs = simple_strtol(parm[2], NULL, 10); */
10341080 /* crop->ve = simple_strtol(parm[3], NULL, 10); */
10351081
1036- if (kstrtol (parm [0 ], 10 , & val ) < 0 )
1082+ if (kstrtol (parm [0 ], 10 , & val ) < 0 ) {
1083+ kfree (buf_orig );
10371084 return - EINVAL ;
1085+ }
10381086 crop -> hs = val ;
1039- if (kstrtol (parm [1 ], 10 , & val ) < 0 )
1087+ if (kstrtol (parm [1 ], 10 , & val ) < 0 ) {
1088+ kfree (buf_orig );
10401089 return - EINVAL ;
1090+ }
10411091 crop -> he = val ;
1042- if (kstrtol (parm [2 ], 10 , & val ) < 0 )
1092+ if (kstrtol (parm [2 ], 10 , & val ) < 0 ) {
1093+ kfree (buf_orig );
10431094 return - EINVAL ;
1095+ }
10441096 crop -> vs = val ;
1045- if (kstrtol (parm [3 ], 10 , & val ) < 0 )
1097+ if (kstrtol (parm [3 ], 10 , & val ) < 0 ) {
1098+ kfree (buf_orig );
10461099 return - EINVAL ;
1100+ }
10471101 crop -> ve = val ;
1048-
10491102 pr_info ("hs_offset %u, he_offset %u, vs_offset %u, ve_offset %u.\n" ,
10501103 crop -> hs , crop -> he , crop -> vs , crop -> ve );
1104+ kfree (buf_orig );
10511105 return count ;
10521106}
10531107
@@ -1111,7 +1165,11 @@ static ssize_t vdin_cm2_store(struct device *dev,
11111165 continue ;
11121166 parm [n ++ ] = token ;
11131167 }
1114-
1168+ if (n == 0 ) {
1169+ pr_info ("parm[] not initialized.\n" );
1170+ kfree (buf_orig );
1171+ return count ;
1172+ }
11151173 if ((parm [0 ][0 ] == 'w' ) && parm [0 ][1 ] == 'm' ) {
11161174 if (n != 7 ) {
11171175 pr_info ("read : invalid parameter\n" );
@@ -1120,29 +1178,41 @@ static ssize_t vdin_cm2_store(struct device *dev,
11201178 return count ;
11211179 }
11221180 /* 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 );
11241183 return - EINVAL ;
1184+ }
11251185 addr = val ;
11261186 addr = addr - addr %8 ;
11271187 /* data[0] = simple_strtol(parm[2], NULL, 16); */
11281188 /* data[1] = simple_strtol(parm[3], NULL, 16); */
11291189 /* data[2] = simple_strtol(parm[4], NULL, 16); */
11301190 /* data[3] = simple_strtol(parm[5], NULL, 16); */
11311191 /* 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 );
11331194 return - EINVAL ;
1195+ }
11341196 data [0 ] = val ;
1135- if (kstrtol (parm [3 ], 16 , & val ) < 0 )
1197+ if (kstrtol (parm [3 ], 16 , & val ) < 0 ) {
1198+ kfree (buf_orig );
11361199 return - EINVAL ;
1200+ }
11371201 data [1 ] = val ;
1138- if (kstrtol (parm [4 ], 16 , & val ) < 0 )
1202+ if (kstrtol (parm [4 ], 16 , & val ) < 0 ) {
1203+ kfree (buf_orig );
11391204 return - EINVAL ;
1205+ }
11401206 data [2 ] = val ;
1141- if (kstrtol (parm [5 ], 16 , & val ) < 0 )
1207+ if (kstrtol (parm [5 ], 16 , & val ) < 0 ) {
1208+ kfree (buf_orig );
11421209 return - EINVAL ;
1210+ }
11431211 data [3 ] = val ;
1144- if (kstrtol (parm [6 ], 16 , & val ) < 0 )
1212+ if (kstrtol (parm [6 ], 16 , & val ) < 0 ) {
1213+ kfree (buf_orig );
11451214 return - EINVAL ;
1215+ }
11461216 data [4 ] = val ;
11471217 aml_write_vcbus (addr_port , addr );
11481218 aml_write_vcbus (data_port , data [0 ]);
@@ -1164,8 +1234,10 @@ static ssize_t vdin_cm2_store(struct device *dev,
11641234 return count ;
11651235 }
11661236 /* 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 );
11681239 return - EINVAL ;
1240+ }
11691241 addr = val ;
11701242 addr = addr - addr %8 ;
11711243 aml_write_vcbus (addr_port , addr );
0 commit comments