[lvc-project] [PATCH v2 1/1] media: atomisp: Avoid memory leaks in ia_css_pipe_create_cas_scaler_desc_single_output()
    Fedor Pchelkin 
    pchelkin at ispras.ru
       
    Fri Sep 26 20:45:27 MSK 2025
    
    
  
On Wed, 17. Sep 03:42, Ivan Abramov wrote:
> Fix this by freeing memory at the end of the function in case of an
> non-NULL err.
Судя по всему использование этой функции направлено на «внешнюю» очистку
ресурсов.  В местах вызова ia_css_pipe_create_cas_scaler_desc_single_output()
на дальнейших error-путях функция зачитски памяти не вызывается, хотя
тоже должна бы.  Лучше наверно снаружи в местах вызова функции организовать
обработку через goto.
К примеру, ниже на остальных error-путях функция зачистки также не
вызывается:
load_video_binaries() {
...
		struct ia_css_cas_binary_descr cas_scaler_descr = { };
		/* NV12 is the common format that is supported by both */
		/* yuv_scaler and the video_xx_isp2_min binaries. */
		video_bin_out_info.format = IA_CSS_FRAME_FORMAT_NV12;
		err = ia_css_pipe_create_cas_scaler_desc_single_output(
			  &video_bin_out_info,
			  pipe_out_info,
			  NULL,
			  &cas_scaler_descr);
		if (err)
			return err;
		mycs->num_yuv_scaler = cas_scaler_descr.num_stage;
		mycs->yuv_scaler_binary = kcalloc(cas_scaler_descr.num_stage,
						  sizeof(struct ia_css_binary),
						  GFP_KERNEL);
		if (!mycs->yuv_scaler_binary) {
			mycs->num_yuv_scaler = 0;
			err = -ENOMEM;
			return err;
		}
		mycs->is_output_stage = kcalloc(cas_scaler_descr.num_stage,
						sizeof(bool), GFP_KERNEL);
		if (!mycs->is_output_stage) {
			err = -ENOMEM;
			return err;
		}
		for (i = 0; i < cas_scaler_descr.num_stage; i++) {
			struct ia_css_binary_descr yuv_scaler_descr;
			mycs->is_output_stage[i] = cas_scaler_descr.is_output_stage[i];
			ia_css_pipe_get_yuvscaler_binarydesc(pipe,
							     &yuv_scaler_descr, &cas_scaler_descr.in_info[i],
							     &cas_scaler_descr.out_info[i],
							     &cas_scaler_descr.internal_out_info[i],
							     &cas_scaler_descr.vf_info[i]);
			err = ia_css_binary_find(&yuv_scaler_descr,
						 &mycs->yuv_scaler_binary[i]);
			if (err) {
				kfree(mycs->is_output_stage);
				mycs->is_output_stage = NULL;
				return err;
			}
		}
		ia_css_pipe_destroy_cas_scaler_desc(&cas_scaler_descr);
}
    
    
More information about the lvc-project
mailing list