From nobody Fri Dec 19 10:10:09 2025 Received: from mail-lf1-f66.google.com (mail-lf1-f66.google.com [209.85.167.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 506D523D7EE for ; Mon, 8 Dec 2025 11:16:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765192612; cv=none; b=R1IpVU8FDVA3K4YdH9+J1H8nltCxK/xlaUtxwxdfAVXJUtJui9/1T4pP2G8cjzTT4Vaeqsarjx6rYT8pilP4ndEbhDcwTidtsw4t4ua9qBErGFvBHsY/vq2of3Q3Lwqct5YydEyDcQoNYBpsxtNOd9MuvoKmJ+CyCllldG/m62w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765192612; c=relaxed/simple; bh=SOUqlzQpcjCK0fTaxI1RTsijxJFfgOEwIrAYv7Vz+lk=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=rPghwegg0JrP22MrCKjYR1Z9WOepJCG9Icz+v6Ih21ol/OzOHYXyE5qWKLA6wSOlq2+WYmZzISLDj77N0dGw0hFya2904wMHNJnJt8eUh6/sEyMKpHFWBFHFYD/BAlIgbz4AAS2odYCNEK0zu2YWbVdhdEQizh5m5mRSLbZONCI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VqEErDaK; arc=none smtp.client-ip=209.85.167.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VqEErDaK" Received: by mail-lf1-f66.google.com with SMTP id 2adb3069b0e04-5943b62c47dso4260656e87.1 for ; Mon, 08 Dec 2025 03:16:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765192608; x=1765797408; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=k1FcJaTt57JlbJy66zrOJwhugl21WOuVNYEAfr8aZYo=; b=VqEErDaKPyr6weReXIM1+Q3kai+gMtGc0a8mbfJs73zF0NUg5WkfEurwUkjTIg0Zuj 3gOsHk0514wQkhc5btjSHOGO2G0xCLjg3EXD1YRFlsWgKQIS9KlAuAnxI+iduZr01Lg5 KfHP+SAnw8NhD6tx2Bw2SCqV5eUf1NQ0HpHacR+aNsmGm/N/DyncnAo547yhR0ACuZUX /gUy9yAHDjGOe7nZvxxxQxuyyx5G2+OauF0ZmJnWNo0Bkl/iq/B8tZ6tjV7aL2uY106P Jkh0hKnJaI/O8xEFcSTBbiRkm0KbfQMC+8ceRqT5QmjNSMxzWCWpJNTEXKL3qBXnX6aD 1r3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765192608; x=1765797408; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=k1FcJaTt57JlbJy66zrOJwhugl21WOuVNYEAfr8aZYo=; b=e6Cwf+XRWtugbgn7+kmlIArvBgG/nIt+za6e8Vyx5vMgnYDjGbjG4wzBgvRc4f2oRq 3z+SntpJi+WfJMGEYneRfxKWp4GE4OyWQMZwaidBcAOSqb6feQt6N/IiL/5y8CnXecEp yRO7mrjVY7tzh7xw5CvKSAcIQ6ed1pUP0xCUnh14yxg/LyLUhQPJuL143NCeUWveQd8w MnXrh7ULOdtCA2Nbb1RUjQbkm+oDRqIBMHRxBpQ0KqKcf//WZD2jXdPS48EZOFxIB4sz AyZBTY8x+lp8gmJYgwHb/4g0w5y7fQhH8FZsCsmX0iI8Lf7R/YjyI1gUa2AVKwXf602w omlg== X-Forwarded-Encrypted: i=1; AJvYcCVvj3DzldzYr7mLLcA/EBuEAZcpqNiUmj+l74mCafjB3q1OTlkgEAPrpP9RK/8WQ9IMtaz5VmkRd5xZSdQ=@vger.kernel.org X-Gm-Message-State: AOJu0YykA2A5sfbnhL5nNzBOJHYEfVzTRGop6V5FzSqMRfQGnMhdD+Z+ WUZj0DgODdA3MvhjMp0AXlK9B4Q43Wz3u6pnu5jpM/UsM1EnJhO2knK6 X-Gm-Gg: ASbGncuVHJykTETMVjtcD6UCjWYeADd5+5+v6JwtwWJXQm3sRpeQoxLkRKgQ7ummV9P ZqVmA486W70159jwIHH93P2Q+eajkcq0x6RLoptbxBFx9NjSnTOvS0g/9BwfozGub+DZ5UzPU5q jXmujJ+iaQeZiwWnEEnGohdKk765P9DEEjgkab5BsagjIYBdjsp6LTIvwKmDnSbQr374LDWWH6o usstUhq0QeuA/OAjMiemMxCfGxWlrN94PrY1yEbKZbkThIvZlZvLf39ccsJE+iIh80563QS+7S+ 1AvoRz9rWQySty6v1CNxOsuauYDVfKJuzmw6MmENnNeuPfDJ4TCC8NdnDJuuww09rMES1JTMs+8 2HKwy7wvNtRwkTqDvL6qw7HmtRZwx52KFkqqn0WDNoIeGc5boYF6W/uMof0dFLSjoBYLn++XfdO ZbT4gMEzLwiqPn6KzdffkTcXOFMIimnN4Lt5WYWfpftbJN6cUD7hSX9IW7Ag== X-Google-Smtp-Source: AGHT+IFU4R3moE77eHxDxOCHEP0tsIAxCKnS+8bBbj0g/HYxCv24Zem1PsGdmmHLOWneqk3oWD3pdA== X-Received: by 2002:a05:6512:234b:b0:594:5545:b743 with SMTP id 2adb3069b0e04-5987f918492mr2689851e87.27.1765192608021; Mon, 08 Dec 2025 03:16:48 -0800 (PST) Received: from rbta-msk-lt-302690.astralinux.ru.astracloud.ru ([89.107.11.60]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-597d7c1e405sm3975815e87.49.2025.12.08.03.16.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 03:16:47 -0800 (PST) From: Alexandra Diupina To: Hans de Goede Cc: Alexandra Diupina , Mauro Carvalho Chehab , Sakari Ailus , Andy Shevchenko , Greg Kroah-Hartman , Alan Cox , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev, lvc-project@linuxtesting.org Subject: [PATCH v2] media: atomisp: avoid memory leak in ia_css_pipe_create_cas_scaler_desc_single_output() Date: Mon, 8 Dec 2025 14:16:17 +0300 Message-Id: <20251208111617.21966-1-dyupina99999@gmail.com> X-Mailer: git-send-email 2.30.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ia_css_pipe_create_cas_scaler_desc_single_output() may fail, so add cleanup by ia_css_pipe_destroy_cas_scaler_desc() rather than simply exiting the function. Also add error handling for kcalloc() in load_video_binaries() and load_primary_binaries(). Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: a49d25364dfb ("staging/atomisp: Add support for the Intel IPU v2") Signed-off-by: Alexandra Diupina --- v2: add kcalloc() error handling drivers/staging/media/atomisp/pci/sh_css.c | 41 ++++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/sh_css.c b/drivers/staging/m= edia/atomisp/pci/sh_css.c index 73bd87f43a8c..c1239e910fdc 100644 --- a/drivers/staging/media/atomisp/pci/sh_css.c +++ b/drivers/staging/media/atomisp/pci/sh_css.c @@ -4528,21 +4528,20 @@ static int load_video_binaries(struct ia_css_pipe *= pipe) NULL, &cas_scaler_descr); if (err) - return err; + goto ERR; mycs->num_yuv_scaler =3D cas_scaler_descr.num_stage; mycs->yuv_scaler_binary =3D kcalloc(cas_scaler_descr.num_stage, sizeof(struct ia_css_binary), GFP_KERNEL); if (!mycs->yuv_scaler_binary) { - mycs->num_yuv_scaler =3D 0; err =3D -ENOMEM; - return err; + goto ERR; } mycs->is_output_stage =3D kcalloc(cas_scaler_descr.num_stage, sizeof(bool), GFP_KERNEL); if (!mycs->is_output_stage) { err =3D -ENOMEM; - return err; + goto ERR; } for (i =3D 0; i < cas_scaler_descr.num_stage; i++) { struct ia_css_binary_descr yuv_scaler_descr; @@ -4556,12 +4555,19 @@ static int load_video_binaries(struct ia_css_pipe *= pipe) err =3D ia_css_binary_find(&yuv_scaler_descr, &mycs->yuv_scaler_binary[i]); if (err) { - kfree(mycs->is_output_stage); - mycs->is_output_stage =3D NULL; - return err; + goto ERR; } } +ERR: ia_css_pipe_destroy_cas_scaler_desc(&cas_scaler_descr); + if (err) { + mycs->num_yuv_scaler =3D 0; + kfree(mycs->yuv_scaler_binary); + mycs->yuv_scaler_binary =3D NULL; + kfree(mycs->is_output_stage); + mycs->is_output_stage =3D NULL; + return err; + } } =20 { @@ -5106,8 +5112,7 @@ static int load_primary_binaries( NULL, &cas_scaler_descr); if (err) { - IA_CSS_LEAVE_ERR_PRIVATE(err); - return err; + goto ERR; } mycs->num_yuv_scaler =3D cas_scaler_descr.num_stage; mycs->yuv_scaler_binary =3D kcalloc(cas_scaler_descr.num_stage, @@ -5115,15 +5120,13 @@ static int load_primary_binaries( GFP_KERNEL); if (!mycs->yuv_scaler_binary) { err =3D -ENOMEM; - IA_CSS_LEAVE_ERR_PRIVATE(err); - return err; + goto ERR; } mycs->is_output_stage =3D kcalloc(cas_scaler_descr.num_stage, sizeof(bool), GFP_KERNEL); if (!mycs->is_output_stage) { err =3D -ENOMEM; - IA_CSS_LEAVE_ERR_PRIVATE(err); - return err; + goto ERR; } for (i =3D 0; i < cas_scaler_descr.num_stage; i++) { struct ia_css_binary_descr yuv_scaler_descr; @@ -5137,11 +5140,19 @@ static int load_primary_binaries( err =3D ia_css_binary_find(&yuv_scaler_descr, &mycs->yuv_scaler_binary[i]); if (err) { - IA_CSS_LEAVE_ERR_PRIVATE(err); - return err; + goto ERR; } } +ERR: ia_css_pipe_destroy_cas_scaler_desc(&cas_scaler_descr); + if (err) { + kfree(mycs->yuv_scaler_binary); + mycs->yuv_scaler_binary =3D NULL; + kfree(mycs->is_output_stage); + mycs->is_output_stage =3D NULL; + IA_CSS_LEAVE_ERR_PRIVATE(err); + return err; + } =20 } else { capt_pp_out_info =3D pipe->output_info[0]; --=20 2.30.2