From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 803E742F6E3 for ; Wed, 19 Aug 2026 09:28:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787131700; cv=none; b=ONY9bei5pZmsEGjRHnIy0nnIbnmKf9tGZIU8T/4liKix8iLmd/k/yP1XECC80qyS/Os5mIqshab0R+tcbpaSS+vewgnthu+/Y2/3bad+b6iJNcIRTXoZdmWwdolzKWEKPlShslyiRDP1pctMxNQkmYyu6xzkfIIB78mVVhyf0fA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787131700; c=relaxed/simple; bh=udiv7e1glRacJK1FJPTs/4tpTfifkvPttdPGoYF4WEk=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=Ptp1bq19YKSpogJByljtm8eLxcj+bQq6p5EvgR2oRNC4r1PT2SXEEUgXB8nNZgUC6vtFUpuC0tPkFp3j2xEUaJIXCL9+gCpyAckGxOOfGNKkMh7T0u2EYdHxnCUer5B4ThiPEV63hfDCOQkwswU9C3N+FbfHi4qofvBFW4lbubM= 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=ZDY/qQBj; arc=none smtp.client-ip=209.85.128.48 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="ZDY/qQBj" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4998e0916faso6249545e9.2 for ; Wed, 19 Aug 2026 02:28:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787131693; x=1787736493; darn=vger.kernel.org; h=content-disposition:content-type:mime-version:message-id:subject:cc :to:from:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kjJqO5Tkx7QkqQKX+O7z966c27TyW/hoTQBkhU3dCmM=; b=ZDY/qQBjSelLdEDfx/F22MP8SubcfDuCcQs5OUbkNS7GpBpVV2wLDfVBe4Tfbqp/na 3Uvp9sYwENtUomXl7nmDueFLhqofZtWehTd5J89CfPBPraCpqusqiQDVq6xlKwkrAaFi kDxo/oXGBp5gT0q0ZeE7TUAprDcaKZc8OKLWJClje9myvjpqZhvb94xvgzEpdTDnnBEe DT11OvdR4uFKlQjeD2WJlGFJCRHZzuiCryriXBxPepQ0+v2bNc1rdd00XOU5YEsvKSJy fywikDYXVRviE7UjgRQcVbQzJ+NjBDaBXfm3fs+xb4D5TOdHWxThitlz8XwTsJGsGYgm qmeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787131693; x=1787736493; h=content-disposition:content-type:mime-version:message-id:subject:cc :to:from:date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kjJqO5Tkx7QkqQKX+O7z966c27TyW/hoTQBkhU3dCmM=; b=UnZByHCFjANAfBbTW5KB5+Nx2StHOkKrkIJ953fjL5HBbCgdEXg+f5KNGDCee5quJx F8eB09X0mNtYSETDJzgqSU4fsh3XoE/4L7xGpb2SOuUxvKwIPbLzZLGlgE7+R7flf8Yn P0wIYrT+bmGrT168NHKaC2/IFTaidvsswJWOm8Ft9lhvQ/Lx2kMsaIaxLVwCynjdGPQP jq+EWf4JE151vFGhPGH4u4wnLgxsQDcwB970fSTzp0wF5ZCSf7cVNw4gsuH+6rrkqGwD Agm0tJTwdoaMJzK9qko5U0px2U2537JyO3ldnZjPHN4v0ogL+pvwNnFLQ0BTVsTK0i9f EwEA== X-Forwarded-Encrypted: i=1; AHgh+RqlXwq79MrabNkcFUGvH/gJb4FylQMRWbwbJsSk5XCUhUgxNtYLL7DP8rA1UO6+RgRKALEHH1LFkkxugZA=@vger.kernel.org X-Gm-Message-State: AOJu0YxcewQ3mZJBkZYLhQV3p4jz4hPo+Ht0PdPF5cLo7+GMIVtxqaso fxTpggfzaeklypjMpIVTE8uV3bDt4FiTww4d07ek5JPqK4mrL55cyJ3mBsi/yQ== X-Gm-Gg: AR+sD10pz6B3l3r0jxgrpEAPFZa1DG0Q18Ikz869x9Zaln3vKX/d/1DTEex0AnKhwWh Qmy3fRGk0I22MwfhRnHJgF/sVBSWJ6jPrm5L3DfKv5jWWW+ZMk0jao38FkNw9S36wOTjGVWYreM T7q5hbzb82ibH8hGeBQFoIrPNeKXAIVMih4L5wEEe6Q4ESBv5hBG7TjQ3dAinPMy1NmfD4zoOXm QhQoef+ncOeBjmf/OiWMABggXplKjS0P9Dyh2Z6C3zeu05Y1GEuQFaJSgNWmEO3YZ2c0Xn8fFAK LFO86qNxUlLb5NVsuuMsmCYI0JhxvIL+VU87dAtANZUCau7PNzKiHK+BKL2iK7dG1Huzg9cuvoN 7ncoeUbAjKI6luZ7f3sM5dzq5NUud534TPX1JT4ZVzxw9RjQSX3haxeE1lfiDYYb9EynHK2XHrZ qxW+Z+XdiLcxDotPJfD8s/2oV0Ujd60M5aJAoYwf4hi/WnqPOID3Hp5il5E+ByAQ4vig1FdT26k 39Y6OSkgH0binMci1tGL6nTsg== X-Received: by 2002:a05:600c:8b65:b0:499:a5fc:2087 with SMTP id 5b1f17b1804b1-499aa1722f5mr58865455e9.6.1787131693443; Wed, 19 Aug 2026 02:28:13 -0700 (PDT) Received: from michalis-linux (adsl-75.176.58.251.tellas.gr. [176.58.251.75]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499aa11fd3asm42234935e9.8.2026.08.19.02.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 02:28:13 -0700 (PDT) Date: Wed, 19 Aug 2026 12:28:12 +0300 From: Michail Tatas To: nicolas.dufresne@collabora.com, benjamin.gaignard@collabora.com, p.zabel@pengutronix.de, mchehab@kernel.org, heiko@sntech.de Cc: linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] media: verisilicon: rockchip: Fix leaks in init Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline if one of the dma_alloc_coherent in the init fucntion fails then the previously allocated ones leak. Fix by freeing them in the error path. Fixes: 727a400686a2 ("media: verisilicon: Add Rockchip AV1 decoder") Signed-off-by: Michail Tatas --- .../verisilicon/rockchip_vpu981_hw_av1_dec.c | 68 +++++++++++++++---- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c index e4e21ad37323..fa77fd402412 100644 --- a/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c +++ b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c @@ -369,6 +369,7 @@ void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx) int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) { + int ret = 0; struct hantro_dev *vpu = ctx->dev; struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; @@ -377,39 +378,54 @@ int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) av1_dec->global_model.cpu = dma_alloc_coherent(vpu->dev, GLOBAL_MODEL_SIZE, &av1_dec->global_model.dma, GFP_KERNEL); - if (!av1_dec->global_model.cpu) - return -ENOMEM; + if (!av1_dec->global_model.cpu) { + ret = -ENOMEM; + goto global_model_cpu_err; + } + av1_dec->global_model.size = GLOBAL_MODEL_SIZE; av1_dec->tile_info.cpu = dma_alloc_coherent(vpu->dev, AV1_TILE_INFO_SIZE, &av1_dec->tile_info.dma, GFP_KERNEL); - if (!av1_dec->tile_info.cpu) - return -ENOMEM; + if (!av1_dec->tile_info.cpu) { + ret = -ENOMEM; + goto tile_info_cpu_err; + } + av1_dec->tile_info.size = AV1_TILE_INFO_SIZE; av1_dec->film_grain.cpu = dma_alloc_coherent(vpu->dev, ALIGN(sizeof(struct rockchip_av1_film_grain), 2048), &av1_dec->film_grain.dma, GFP_KERNEL); - if (!av1_dec->film_grain.cpu) - return -ENOMEM; + if (!av1_dec->film_grain.cpu) { + ret = -ENOMEM; + goto film_grain_cpu_err; + } + av1_dec->film_grain.size = ALIGN(sizeof(struct rockchip_av1_film_grain), 2048); av1_dec->prob_tbl.cpu = dma_alloc_coherent(vpu->dev, ALIGN(sizeof(struct av1cdfs), 2048), &av1_dec->prob_tbl.dma, GFP_KERNEL); - if (!av1_dec->prob_tbl.cpu) - return -ENOMEM; + if (!av1_dec->prob_tbl.cpu) { + ret = -ENOMEM; + goto prob_tbl_cpu_err; + } + av1_dec->prob_tbl.size = ALIGN(sizeof(struct av1cdfs), 2048); av1_dec->prob_tbl_out.cpu = dma_alloc_coherent(vpu->dev, ALIGN(sizeof(struct av1cdfs), 2048), &av1_dec->prob_tbl_out.dma, GFP_KERNEL); - if (!av1_dec->prob_tbl_out.cpu) - return -ENOMEM; + if (!av1_dec->prob_tbl_out.cpu) { + ret = -ENOMEM; + goto prob_tbl_out_cpu_err; + } + av1_dec->prob_tbl_out.size = ALIGN(sizeof(struct av1cdfs), 2048); av1_dec->cdfs = &av1_dec->default_cdfs; av1_dec->cdfs_ndvc = &av1_dec->default_cdfs_ndvc; @@ -420,11 +436,37 @@ int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) AV1_TILE_SIZE, &av1_dec->tile_buf.dma, GFP_KERNEL); - if (!av1_dec->tile_buf.cpu) - return -ENOMEM; + if (!av1_dec->tile_buf.cpu) { + ret = -ENOMEM; + goto tile_buf_cpu_err; + } + av1_dec->tile_buf.size = AV1_TILE_SIZE; - return 0; + return ret; + +tile_buf_cpu_err: + dma_free_coherent(vpu->dev, av1_dec->prob_tbl_out.size, + av1_dec->prob_tbl_out.cpu, + av1_dec->prob_tbl_out.dma); +prob_tbl_out_cpu_err: + dma_free_coherent(vpu->dev, av1_dec->prob_tbl.size, + av1_dec->prob_tbl.cpu, + av1_dec->prob_tbl.dma); +prob_tbl_cpu_err: + dma_free_coherent(vpu->dev, av1_dec->film_grain.size, + av1_dec->film_grain.cpu, + av1_dec->film_grain.dma); +film_grain_cpu_err: + dma_free_coherent(vpu->dev, av1_dec->tile_info.size, + av1_dec->tile_info.cpu, + av1_dec->tile_info.dma); +tile_info_cpu_err: + dma_free_coherent(vpu->dev, av1_dec->global_model.size, + av1_dec->global_model.cpu, + av1_dec->global_model.dma); +global_model_cpu_err: + return ret; } static int rockchip_vpu981_av1_dec_prepare_run(struct hantro_ctx *ctx) -- 2.43.0