From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 6969F399011 for ; Sat, 30 May 2026 09:44:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780134274; cv=none; b=W+5GnVw2fAGp6QBGUZBvNsD9sdVrAixn/d5tpNhFaHMDVWmG4m9OIU4IOkc6o0xfsAcbeCKgnFfXJy8UIcacoySMDwtWdjQ6BjC4IB5IE2s/lt5O4zWMzq3mygY0leq4yUKIsWY+3lgZo7C8Z0UEye6XzWjPgukSR3V8PbKKvpM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780134274; c=relaxed/simple; bh=+strja15rp5bfFyNtAbt1Pazm6s+foPib4qovmXYo1g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WZOa6qGNI5gRG3p5Btz+79g5iBDXqrH4PIc4Wd8u+6gZrGy62vaigaMUmNo1bAr/msia6RFFYInAMDJaYTHYxNsPn41msBLMvZnVkw9JOm+wNOF91dbS4OZAkY50jHC2g6Gw0TKZi0OG5aLMR6XQBn+L6OB7pNWxVWMdmnyubyM= 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=VUZMhJ94; arc=none smtp.client-ip=209.85.214.177 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="VUZMhJ94" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2ba4a1a0325so98838925ad.0 for ; Sat, 30 May 2026 02:44:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780134273; x=1780739073; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=VUZMhJ94J9m1XJ/sSeblbRPXqB5/rpgtZnckHcYvgr24C3/nkwgNKNjmceN3nuMp1z +zmm+dFacnAS9rgC35mZFPstWE6LJJTQ32TPGj0MsBUGH2CKt+pzCy9fYtGqDGimgknG dTRPBs3QxJ90s9sXIJVcm4CWWFR1eVgvZDwxtpSxR7kDg+nRMMLuUb3NUCYckaInpsRp rhL5KzAQm4Ks/zKlVcomDXWY6C7yQyudDDOo0RiwMTv+I7TLhnelZYElAQ7E0T+RB6kb scabywB13IFoBxXTA1pIsZmpnSu4T69ioGh4RZ5h6HC5pFUU2/tI0IQANFENSnGw8gjQ hKlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780134273; x=1780739073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=tUMSK9ocVWz6ZXuBHOTe2JDFqDwpEzR1dMESaBZdiYXAtcRlXq3N9CarVSmeGaReu6 W0FPeSzft+mGsbme15HQaZiHdiWdCAjG2nVB4/R1/KHgoZmD1krff+9zZE4qb8dhaYbr bIOb+jOg+ZMRJWoYbi8B1S/kQ80q88Z8aUvyjey4MCgwdqOTcnw1x0SGTL93E+gFe30q ZVjpUGvDP18ziFrR153cCxs3ufniYnjAT2SUGUfJ7qdebFO5bq+2vXkIjvNP9wWCfdUb mSlduOmfyvHEpsPfOj4PMeeBqZUnpJvHSXjLi63PO6W78sGPawqsf1+ZhfWplmH49yMv wkZA== X-Forwarded-Encrypted: i=1; AFNElJ+yzB8OYKJvCw725THjp6esrMjyNbKdo+thBDrCbrAuQ5CuUK2SNKd8oxZj7RP3n+xpX/EAqq3MwA6+WIfw@lists.linux.dev X-Gm-Message-State: AOJu0YwjMqvkV9tQaGEzwHbBvy8O3ULNVKLeGkOvu7QPbtexKuo1kRB0 If+6gAqaPQIt9Agw0MxpwEcsejfOuxy25LCQ/atByuzDf5oIZrvJcSR5 X-Gm-Gg: Acq92OG6FIRV0EF06OgwOOBf6HDa7GIc5R/tMmjdXnhxZEIEHNAjUgahhoez4Ed2jhX 60UQjS5t0HuMi4mSSHgARRspcyAmJbZVEpNVGjyUlPApjOcT1E/lENlyBTpsH82fxXQ4a3q8YkE 8OwqULVluMebd/xz0GKFSGQyBD1YeztL3jNCO6C+B8oLhDkdBhqZyAH4GJoFEP40xR9KIkTcxK7 i91BA5nOFB07eRz38o4B20ThyffPiU22PPg5W30cdScAg/9hA9eMPuWmlJiMGsYev3q3RRutkiw 18J+X/k+JeIxIuSqvpitNlG3Ck+f0eDZBUTzQ4+qSRCLyqhj7ykmJB3XiaOocLMZgDbecBGH/+F 1PdOccX4MRGQTJkc5PRFidZw8lxr5eDxl+0nN4QvWSg3BwUR8mP1PVjTYwIfV8SNkcZzZwj+kKA 9rdxbs+NqXEMblPdiu1klDbokyIkfJksk= X-Received: by 2002:a17:902:da8e:b0:2bf:356f:4e0c with SMTP id d9443c01a7336-2bf36793916mr38435335ad.1.1780134272635; Sat, 30 May 2026 02:44:32 -0700 (PDT) Received: from rockpi-5b ([45.112.0.191]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf239e700csm61529945ad.10.2026.05.30.02.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 02:44:31 -0700 (PDT) From: Anand Moon To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Mauro Carvalho Chehab , Greg Kroah-Hartman , Maxime Jourdan , Hans Verkuil , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-amlogic@lists.infradead.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-arm-kernel@lists.infradead.org (moderated list:ARM/Amlogic Meson SoC support), linux-kernel@vger.kernel.org (open list), linux-media@vger.kernel.org (open list:MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS), linux-staging@lists.linux.dev (open list:STAGING SUBSYSTEM) Cc: Anand Moon , Nicolas Dufresne , Sashiko Subject: [PATCH v6 3/8] media: meson: vdec: Handle kthread failure and free codec state Date: Sat, 30 May 2026 15:12:49 +0530 Message-ID: <20260530094326.11892-4-linux.amoon@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260530094326.11892-1-linux.amoon@gmail.com> References: <20260530094326.11892-1-linux.amoon@gmail.com> Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vdec_start_streaming() launches a recycle thread when required by the codec. If kthread_run() fails, the previous error path only powered off the hardware, leaving sess->priv and codec state allocated. This caused a permanent leak of the codec context and associated DMA buffers. Fix this by introducing a dedicated err_cleanup path: - Call codec_ops->stop() to release the codec context and clear sess->priv. - Power off the hardware before freeing buffers to avoid DMA faults. - Free canvas IDs explicitly and set sess->vififo_vaddr = NULL after dma_free_coherent() to guard against double‑free in fallback stop paths. - Reset core->cur_sess and sess->status to prevent stale references. Following change closes the memory leak on kthread_run() failure and ensures robust cleanup of codec resources in both error and stop paths. Cc: Nicolas Dufresne Reported-by: Sashiko Closes: https://lore.kernel.org/all/20260521090944.F35401F00A3D@smtp.kernel.org/ Fixes: 3e7f51bd9607 ("media: meson: add v4l2 m2m video decoder driver") Signed-off-by: Anand Moon --- drivers/staging/media/meson/vdec/vdec.c | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.c index 7233000e2232..8a5bf1a96830 100644 --- a/drivers/staging/media/meson/vdec/vdec.c +++ b/drivers/staging/media/meson/vdec/vdec.c @@ -32,6 +32,8 @@ struct dummy_buf { /* 16 MiB for parsed bitstream swap exchange */ #define SIZE_VIFIFO SZ_16M +static void vdec_free_canvas(struct amvdec_session *sess); + static u32 get_output_size(u32 width, u32 height) { return ALIGN(width * height, SZ_64K); @@ -352,16 +354,31 @@ static int vdec_start_streaming(struct vb2_queue *q, unsigned int count) sess->sequence_cap = 0; sess->sequence_out = 0; - if (vdec_codec_needs_recycle(sess)) + if (vdec_codec_needs_recycle(sess)) { sess->recycle_thread = kthread_run(vdec_recycle_thread, sess, "vdec_recycle"); + if (IS_ERR(sess->recycle_thread)) { + ret = PTR_ERR(sess->recycle_thread); + sess->recycle_thread = NULL; + goto err_cleanup; + } + } schedule_work(&sess->esparser_queue_work); return 0; +err_cleanup: + vdec_free_canvas(sess); + vdec_poweroff(sess); + if (codec_ops && codec_ops->stop && sess->priv) { + codec_ops->stop(sess); + kfree(sess->priv); + sess->priv = NULL; + } vififo_free: dma_free_coherent(sess->core->dev, sess->vififo_size, sess->vififo_vaddr, sess->vififo_paddr); + sess->vififo_vaddr = NULL; bufs_done: mutex_lock(&core->lock); if (core->cur_sess == sess) @@ -441,8 +458,11 @@ static void vdec_stop_streaming(struct vb2_queue *q) vdec_poweroff(sess); vdec_free_canvas(sess); - dma_free_coherent(sess->core->dev, sess->vififo_size, - sess->vififo_vaddr, sess->vififo_paddr); + if (sess->vififo_vaddr) { + dma_free_coherent(sess->core->dev, sess->vififo_size, + sess->vififo_vaddr, + sess->vififo_paddr); + } vdec_reset_timestamps(sess); vdec_reset_bufs_recycle(sess); kfree(sess->priv); -- 2.50.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 39291CD5BD0 for ; Sat, 30 May 2026 09:44:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=e+8ivhn2OGnXmUGVqgv4FW0+naJ2k4tjtPYN+SVvqbE=; b=hsyqIj9FbY22Ze rza7ZYGlmNlaO+RzsXIS7x7Te4hGWciJsmGNX2oaZI9/SYSdnkVIuOX94GD07wmnh4MmW8WwqkC2m S74B3gdPBUplcQHDL1FM1KQozYBgJlwCn4dxvdxxEG2T2bsyLewzZIw75qMJODd1gs2K3VMesVpyH OjyAgyhubBd36VcN9FgU2B0uECMBOQDxayl+pdUgFcq1Gx/fR3d2ZD/w3J1hT/ycf58l9yUvr6T1H fkKlKANEGrurYnYkqDQQ5N7UsVnDvtzK+WZJsFN1elJCAiWwPDXE4TCCtEvSFJkjumfYElT0P19nI xWw/Pw5aPKulnADVfgNg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wTGFB-00000008afc-2xRt; Sat, 30 May 2026 09:44:37 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wTGF7-00000008adV-2Se0 for linux-amlogic@lists.infradead.org; Sat, 30 May 2026 09:44:35 +0000 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-3664df32e91so16316470a91.3 for ; Sat, 30 May 2026 02:44:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780134273; x=1780739073; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=U6Q8w75qoCmIU9EedTdURKijSunC8ZM5g1tJ8lJo1F5NDPsww15SXhWzdqY2pk7Lge zQPiwx4nHXTS2DDf5Ktn2iCCC5TLOyEziKkgPxyMMihMrw/wE2+IjhlS1Bjowf9te/2D Wo17HCoBQvUFhbmZVF84Hu52tMz/HfThuf1MRqCw8draw6mgPTDF/HQb7j49BlqVfnrE zOzkVp5ORzOVZDFwW+/GvJD+rRSJyeiO/hs0kvaDs2gZQcAMs1Epw9Ecc+RxHnTW0zgs HvUH2CsQvOOMxmeWuHjEGasdpvo+B4tZatzCsym6EUOxk4CLVfxafGx4lXLzSPFgwi8K RD8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780134273; x=1780739073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=Cl0PqKWR/l3kGr6C/jiiU0ezdEnzmHd7CMPvYJN+W/ATvdVoSW0UBrgkm2i7zZ1gcp nwRiCO/4QBVh8Wc0s9uOKMBvYTfKfOxOY4Mnc9Tj/Ld4Ltaha+A5R4jJgFFGfqJIcNWL 4SU+tXlgF+4OYTqzoPslP7UZL7Cxm1ZjOwpnwgVW/bdYotov2yFkzBrfQnHfsmnewRql AwSTJLP1SXUJncsCzjKQwrO4ly17qKXuIkruoi28NRTFTqOfOszMK4EZGr8PWl+Oj4cO OMvDykbK0bYH4m42Ekt1cP2VTHFd8Lr52wmXhbSWY/8tJ7eBL7zzDs0mh1IBBRe1lNUv 3UJA== X-Forwarded-Encrypted: i=1; AFNElJ9mdpa2OAMezmV+lHRe6SHYdc1HSm+N4KzXxKll5URCqI20hsJGuXlhHKtfmxoRa2PZhuBsW/Ql+jlmc2Q9@lists.infradead.org X-Gm-Message-State: AOJu0Yw1fg6wXFXvJhhTpbGkhtN7MstK6Hy2La16qdLBL6RelkDmEVbW 0OCRpm0l7UKBaPNa8CexyTEyQSKm/a1lK2io5WVTrUlhRaWAyc+GCjqU X-Gm-Gg: Acq92OF95Y+3YP0sWM6uJJv5Ww4oFfWNg49qYxYsSFAjgI4frrM9rgfFoFbbkZqO+SW 40uR0qgH87oNLa8DAqXSkdSe+kyXmhfcEwjPeXHeZBOeaB+nUEwkd+w1CSsWYI49M9C4J4ko302 Avg/CaE/4BxZoNhL2KnTuYSaWZG9jt+g/M5kO2Sm9HvBvxs+W9sDOrO7gIR+5nrIyfcaiB4oHEd CCWMnfyXjRjiJ5jT9DLV5l8sgZ6j4+DL6BjXUTm9ICuVDxEIjoiUZkZK6tG/z2lDaMosUUXxrtk ja8IFLHv3Tu71qjqgQd3YKLstP6XM57rWzOCCe3hsju7luXTODR42DLBj0DcOsKNg95Cf2Z+PNW IBt1RuBmM1dtLUjwkf8XZc6tVfi8mPHxh197W2lKEQH9UJcnt6rNVoBrnBMU6h8ey/TJhyAWxzu XTUoiJzYj5nDucDbja/2u1IZ47uoVH5Q0= X-Received: by 2002:a17:902:da8e:b0:2bf:356f:4e0c with SMTP id d9443c01a7336-2bf36793916mr38435335ad.1.1780134272635; Sat, 30 May 2026 02:44:32 -0700 (PDT) Received: from rockpi-5b ([45.112.0.191]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf239e700csm61529945ad.10.2026.05.30.02.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 02:44:31 -0700 (PDT) From: Anand Moon To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Mauro Carvalho Chehab , Greg Kroah-Hartman , Maxime Jourdan , Hans Verkuil , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-amlogic@lists.infradead.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-arm-kernel@lists.infradead.org (moderated list:ARM/Amlogic Meson SoC support), linux-kernel@vger.kernel.org (open list), linux-media@vger.kernel.org (open list:MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS), linux-staging@lists.linux.dev (open list:STAGING SUBSYSTEM) Subject: [PATCH v6 3/8] media: meson: vdec: Handle kthread failure and free codec state Date: Sat, 30 May 2026 15:12:49 +0530 Message-ID: <20260530094326.11892-4-linux.amoon@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260530094326.11892-1-linux.amoon@gmail.com> References: <20260530094326.11892-1-linux.amoon@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260530_024433_632757_85DB3D38 X-CRM114-Status: GOOD ( 17.06 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sashiko , Nicolas Dufresne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org dmRlY19zdGFydF9zdHJlYW1pbmcoKSBsYXVuY2hlcyBhIHJlY3ljbGUgdGhyZWFkIHdoZW4gcmVx dWlyZWQgYnkgdGhlCmNvZGVjLiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzLCB0aGUgcHJldmlvdXMg ZXJyb3IgcGF0aCBvbmx5IHBvd2VyZWQgb2ZmCnRoZSBoYXJkd2FyZSwgbGVhdmluZyBzZXNzLT5w cml2IGFuZCBjb2RlYyBzdGF0ZSBhbGxvY2F0ZWQuIFRoaXMgY2F1c2VkCmEgcGVybWFuZW50IGxl YWsgb2YgdGhlIGNvZGVjIGNvbnRleHQgYW5kIGFzc29jaWF0ZWQgRE1BIGJ1ZmZlcnMuCgpGaXgg dGhpcyBieSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBlcnJfY2xlYW51cCBwYXRoOgoKLSBDYWxs IGNvZGVjX29wcy0+c3RvcCgpIHRvIHJlbGVhc2UgdGhlIGNvZGVjIGNvbnRleHQgYW5kIGNsZWFy IHNlc3MtPnByaXYuCi0gUG93ZXIgb2ZmIHRoZSBoYXJkd2FyZSBiZWZvcmUgZnJlZWluZyBidWZm ZXJzIHRvIGF2b2lkIERNQSBmYXVsdHMuCi0gRnJlZSBjYW52YXMgSURzIGV4cGxpY2l0bHkgYW5k IHNldCBzZXNzLT52aWZpZm9fdmFkZHIgPSBOVUxMIGFmdGVyCiAgZG1hX2ZyZWVfY29oZXJlbnQo KSB0byBndWFyZCBhZ2FpbnN0IGRvdWJsZeKAkWZyZWUgaW4gZmFsbGJhY2sgc3RvcCBwYXRocy4K LSBSZXNldCBjb3JlLT5jdXJfc2VzcyBhbmQgc2Vzcy0+c3RhdHVzIHRvIHByZXZlbnQgc3RhbGUg cmVmZXJlbmNlcy4KCkZvbGxvd2luZyBjaGFuZ2UgY2xvc2VzIHRoZSBtZW1vcnkgbGVhayBvbiBr dGhyZWFkX3J1bigpIGZhaWx1cmUgYW5kIGVuc3VyZXMKcm9idXN0IGNsZWFudXAgb2YgY29kZWMg cmVzb3VyY2VzIGluIGJvdGggZXJyb3IgYW5kIHN0b3AgcGF0aHMuCgpDYzogTmljb2xhcyBEdWZy ZXNuZSA8bmljb2xhc0BuZHVmcmVzbmUuY2E+ClJlcG9ydGVkLWJ5OiBTYXNoaWtvIDxzYXNoaWtv LWJvdEBrZXJuZWwub3JnPgpDbG9zZXM6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8yMDI2 MDUyMTA5MDk0NC5GMzU0MDFGMDBBM0RAc210cC5rZXJuZWwub3JnLwpGaXhlczogM2U3ZjUxYmQ5 NjA3ICgibWVkaWE6IG1lc29uOiBhZGQgdjRsMiBtMm0gdmlkZW8gZGVjb2RlciBkcml2ZXIiKQpT aWduZWQtb2ZmLWJ5OiBBbmFuZCBNb29uIDxsaW51eC5hbW9vbkBnbWFpbC5jb20+Ci0tLQogZHJp dmVycy9zdGFnaW5nL21lZGlhL21lc29uL3ZkZWMvdmRlYy5jIHwgMjYgKysrKysrKysrKysrKysr KysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL21lc29uL3ZkZWMvdmRlYy5j IGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL21lc29uL3ZkZWMvdmRlYy5jCmluZGV4IDcyMzMwMDBl MjIzMi4uOGE1YmYxYTk2ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbWVz b24vdmRlYy92ZGVjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL21lc29uL3ZkZWMvdmRl Yy5jCkBAIC0zMiw2ICszMiw4IEBAIHN0cnVjdCBkdW1teV9idWYgewogLyogMTYgTWlCIGZvciBw YXJzZWQgYml0c3RyZWFtIHN3YXAgZXhjaGFuZ2UgKi8KICNkZWZpbmUgU0laRV9WSUZJRk8gU1pf MTZNCiAKK3N0YXRpYyB2b2lkIHZkZWNfZnJlZV9jYW52YXMoc3RydWN0IGFtdmRlY19zZXNzaW9u ICpzZXNzKTsKKwogc3RhdGljIHUzMiBnZXRfb3V0cHV0X3NpemUodTMyIHdpZHRoLCB1MzIgaGVp Z2h0KQogewogCXJldHVybiBBTElHTih3aWR0aCAqIGhlaWdodCwgU1pfNjRLKTsKQEAgLTM1Miwx NiArMzU0LDMxIEBAIHN0YXRpYyBpbnQgdmRlY19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9x dWV1ZSAqcSwgdW5zaWduZWQgaW50IGNvdW50KQogCiAJc2Vzcy0+c2VxdWVuY2VfY2FwID0gMDsK IAlzZXNzLT5zZXF1ZW5jZV9vdXQgPSAwOwotCWlmICh2ZGVjX2NvZGVjX25lZWRzX3JlY3ljbGUo c2VzcykpCisJaWYgKHZkZWNfY29kZWNfbmVlZHNfcmVjeWNsZShzZXNzKSkgewogCQlzZXNzLT5y ZWN5Y2xlX3RocmVhZCA9IGt0aHJlYWRfcnVuKHZkZWNfcmVjeWNsZV90aHJlYWQsIHNlc3MsCiAJ CQkJCQkgICAidmRlY19yZWN5Y2xlIik7CisJCWlmIChJU19FUlIoc2Vzcy0+cmVjeWNsZV90aHJl YWQpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHNlc3MtPnJlY3ljbGVfdGhyZWFkKTsKKwkJCXNlc3Mt PnJlY3ljbGVfdGhyZWFkID0gTlVMTDsKKwkJCWdvdG8gZXJyX2NsZWFudXA7CisJCX0KKwl9CiAK IAlzY2hlZHVsZV93b3JrKCZzZXNzLT5lc3BhcnNlcl9xdWV1ZV93b3JrKTsKIAlyZXR1cm4gMDsK IAorZXJyX2NsZWFudXA6CisJdmRlY19mcmVlX2NhbnZhcyhzZXNzKTsKKwl2ZGVjX3Bvd2Vyb2Zm KHNlc3MpOworCWlmIChjb2RlY19vcHMgJiYgY29kZWNfb3BzLT5zdG9wICYmIHNlc3MtPnByaXYp IHsKKwkJY29kZWNfb3BzLT5zdG9wKHNlc3MpOworCQlrZnJlZShzZXNzLT5wcml2KTsKKwkJc2Vz cy0+cHJpdiA9IE5VTEw7CisJfQogdmlmaWZvX2ZyZWU6CiAJZG1hX2ZyZWVfY29oZXJlbnQoc2Vz cy0+Y29yZS0+ZGV2LCBzZXNzLT52aWZpZm9fc2l6ZSwKIAkJCSAgc2Vzcy0+dmlmaWZvX3ZhZGRy LCBzZXNzLT52aWZpZm9fcGFkZHIpOworCXNlc3MtPnZpZmlmb192YWRkciA9IE5VTEw7CiBidWZz X2RvbmU6CiAJbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7CiAJaWYgKGNvcmUtPmN1cl9zZXNzID09 IHNlc3MpCkBAIC00NDEsOCArNDU4LDExIEBAIHN0YXRpYyB2b2lkIHZkZWNfc3RvcF9zdHJlYW1p bmcoc3RydWN0IHZiMl9xdWV1ZSAqcSkKIAogCQl2ZGVjX3Bvd2Vyb2ZmKHNlc3MpOwogCQl2ZGVj X2ZyZWVfY2FudmFzKHNlc3MpOwotCQlkbWFfZnJlZV9jb2hlcmVudChzZXNzLT5jb3JlLT5kZXYs IHNlc3MtPnZpZmlmb19zaXplLAotCQkJCSAgc2Vzcy0+dmlmaWZvX3ZhZGRyLCBzZXNzLT52aWZp Zm9fcGFkZHIpOworCQlpZiAoc2Vzcy0+dmlmaWZvX3ZhZGRyKSB7CisJCQlkbWFfZnJlZV9jb2hl cmVudChzZXNzLT5jb3JlLT5kZXYsIHNlc3MtPnZpZmlmb19zaXplLAorCQkJCQkgIHNlc3MtPnZp Zmlmb192YWRkciwKKwkJCQkJICBzZXNzLT52aWZpZm9fcGFkZHIpOworCQl9CiAJCXZkZWNfcmVz ZXRfdGltZXN0YW1wcyhzZXNzKTsKIAkJdmRlY19yZXNldF9idWZzX3JlY3ljbGUoc2Vzcyk7CiAJ CWtmcmVlKHNlc3MtPnByaXYpOwotLSAKMi41MC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgt YW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 647AACD6E4A for ; Sat, 30 May 2026 09:44:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=DgASKVSkqjmUbd lyqvlkgEqxgwmceIIcKzCFjAjegrmubBWTNE8OMfkoEZuzTXZYX2KNNzv3Tl6JFyw19737PQI60GW dTFpa1IOjncc4/pQvOOGuee35ggI6F/eCF64dEylR9PyxsI741LYq6xtQuGbM3yMIlfLp7If3kqEh 1gjgaECNs6HhdMyxX1bKKjHm6AyFaAVjRtn1piiUdkL81P3aVne0CQ0XLSfc7a7tMvTRsDKNg0CWk hosa0iTosHFfrV8Ur+reWoj6481aJde+qh1uTyPkugllePz25xgcu8WXAcvlrzqaJPvEhd3/Du9GO MEBvUsvU9wzBSEC8l6kw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wTGFB-00000008afj-3DRg; Sat, 30 May 2026 09:44:37 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wTGF7-00000008adW-2Sgg for linux-arm-kernel@lists.infradead.org; Sat, 30 May 2026 09:44:35 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2bd9c3b550aso100548495ad.2 for ; Sat, 30 May 2026 02:44:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780134273; x=1780739073; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=U6Q8w75qoCmIU9EedTdURKijSunC8ZM5g1tJ8lJo1F5NDPsww15SXhWzdqY2pk7Lge zQPiwx4nHXTS2DDf5Ktn2iCCC5TLOyEziKkgPxyMMihMrw/wE2+IjhlS1Bjowf9te/2D Wo17HCoBQvUFhbmZVF84Hu52tMz/HfThuf1MRqCw8draw6mgPTDF/HQb7j49BlqVfnrE zOzkVp5ORzOVZDFwW+/GvJD+rRSJyeiO/hs0kvaDs2gZQcAMs1Epw9Ecc+RxHnTW0zgs HvUH2CsQvOOMxmeWuHjEGasdpvo+B4tZatzCsym6EUOxk4CLVfxafGx4lXLzSPFgwi8K RD8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780134273; x=1780739073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BrXJFZmxeXg5CYXAWJIPwYaWF/wPAlGFj3atI5I4qIQ=; b=JEdMqdFxOOY9AbkwGpDxQOq010XB8ZxEJslgbwr4XUnxg8FnV+f7hirmkUvo+2pICq p5nPtFAdKLUbmtY0xx0wCu2NDGVuJbaRcvCcZEWbAoOc174MDztKRNhL7+5puQ+i2CMl L1bWouHv9AVeiY2Vl05Yir8PH0yvUA6fzFnw7QNPEvfK2E5XOnK46hCuZqSvJakWmRr3 2x7/4dAlkrISVzWKZJkHwjhxTxYUIWTi0/LBeOU5h5wiju2I2srPwxTG3G/veA05J2/x aR6tj++G9ZRRbHatnR2gqBH2/SGsdVcf6cAoHT+kxmf3jDdUD1V0t/LpQFS3WfzkWKI4 pobg== X-Forwarded-Encrypted: i=1; AFNElJ/9oYsVloh1HAugiE+nPzQakeOH4yWinvCHlLcri+epNrtnq7fvwl0QW+ANYPmE5W5ikV/1FJBz1/yyJDkN6YCe@lists.infradead.org X-Gm-Message-State: AOJu0YzmSQYttuuztzdQPDrARgdCW+2tdfnAksbAh5B50DIDHMdLysmP HWkJgvXoNHBt10Ggbwjfhvf6U9EwcnybYBwpDYbPF3TAkcn856dYt5lu X-Gm-Gg: Acq92OHO6x3r/9eNkE0SWpxIDaswt/2jC3/4Oxw3ai9Hhy/T6w0MZKkWE4fWDgCJaDY sZTDTjKK1lpVuPFUjobSvx3R9pJiC09TaFCg/ZQPikeTdoUKmKPuLmRxkhE++gXHyJVrD816cp8 63ySEMmSS6NtUZ9eVNzqtt3hQDfx/H13WBsoipXRC7YsdQKNeT30NXB9lnvGoXlSCvl6RwzYa1S YcyHA14V3yo6OXo/FVhKj6l1bEFljV2zIWLu1P/lyCqqozxMm+oxiaEfagP0Qczqf24JB69hcK/ IC3QdN8nNPesriov2toWO+r5PZ92D8ABZUoU3GEAxHVtSWJWtnqXgaRWFokTdjXJPkRdMnCiD1Z ucJfaxhWeL479DVXuthjac5MoFWko8ICZuz7aQ35gobeA9EeNZC0XFMz6k5rXpQRSe2NiXOOcXz 9Mlm84DXr+Mv5nKyITwBsPwhhrrD+o5Ts= X-Received: by 2002:a17:902:da8e:b0:2bf:356f:4e0c with SMTP id d9443c01a7336-2bf36793916mr38435335ad.1.1780134272635; Sat, 30 May 2026 02:44:32 -0700 (PDT) Received: from rockpi-5b ([45.112.0.191]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bf239e700csm61529945ad.10.2026.05.30.02.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 May 2026 02:44:31 -0700 (PDT) From: Anand Moon To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Mauro Carvalho Chehab , Greg Kroah-Hartman , Maxime Jourdan , Hans Verkuil , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-amlogic@lists.infradead.org (open list:DRM DRIVERS FOR AMLOGIC SOCS), linux-arm-kernel@lists.infradead.org (moderated list:ARM/Amlogic Meson SoC support), linux-kernel@vger.kernel.org (open list), linux-media@vger.kernel.org (open list:MESON VIDEO DECODER DRIVER FOR AMLOGIC SOCS), linux-staging@lists.linux.dev (open list:STAGING SUBSYSTEM) Subject: [PATCH v6 3/8] media: meson: vdec: Handle kthread failure and free codec state Date: Sat, 30 May 2026 15:12:49 +0530 Message-ID: <20260530094326.11892-4-linux.amoon@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260530094326.11892-1-linux.amoon@gmail.com> References: <20260530094326.11892-1-linux.amoon@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260530_024433_643463_3C3FAF71 X-CRM114-Status: GOOD ( 18.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sashiko , Nicolas Dufresne Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org vdec_start_streaming() launches a recycle thread when required by the codec. If kthread_run() fails, the previous error path only powered off the hardware, leaving sess->priv and codec state allocated. This caused a permanent leak of the codec context and associated DMA buffers. Fix this by introducing a dedicated err_cleanup path: - Call codec_ops->stop() to release the codec context and clear sess->priv. - Power off the hardware before freeing buffers to avoid DMA faults. - Free canvas IDs explicitly and set sess->vififo_vaddr = NULL after dma_free_coherent() to guard against double‑free in fallback stop paths. - Reset core->cur_sess and sess->status to prevent stale references. Following change closes the memory leak on kthread_run() failure and ensures robust cleanup of codec resources in both error and stop paths. Cc: Nicolas Dufresne Reported-by: Sashiko Closes: https://lore.kernel.org/all/20260521090944.F35401F00A3D@smtp.kernel.org/ Fixes: 3e7f51bd9607 ("media: meson: add v4l2 m2m video decoder driver") Signed-off-by: Anand Moon --- drivers/staging/media/meson/vdec/vdec.c | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.c index 7233000e2232..8a5bf1a96830 100644 --- a/drivers/staging/media/meson/vdec/vdec.c +++ b/drivers/staging/media/meson/vdec/vdec.c @@ -32,6 +32,8 @@ struct dummy_buf { /* 16 MiB for parsed bitstream swap exchange */ #define SIZE_VIFIFO SZ_16M +static void vdec_free_canvas(struct amvdec_session *sess); + static u32 get_output_size(u32 width, u32 height) { return ALIGN(width * height, SZ_64K); @@ -352,16 +354,31 @@ static int vdec_start_streaming(struct vb2_queue *q, unsigned int count) sess->sequence_cap = 0; sess->sequence_out = 0; - if (vdec_codec_needs_recycle(sess)) + if (vdec_codec_needs_recycle(sess)) { sess->recycle_thread = kthread_run(vdec_recycle_thread, sess, "vdec_recycle"); + if (IS_ERR(sess->recycle_thread)) { + ret = PTR_ERR(sess->recycle_thread); + sess->recycle_thread = NULL; + goto err_cleanup; + } + } schedule_work(&sess->esparser_queue_work); return 0; +err_cleanup: + vdec_free_canvas(sess); + vdec_poweroff(sess); + if (codec_ops && codec_ops->stop && sess->priv) { + codec_ops->stop(sess); + kfree(sess->priv); + sess->priv = NULL; + } vififo_free: dma_free_coherent(sess->core->dev, sess->vififo_size, sess->vififo_vaddr, sess->vififo_paddr); + sess->vififo_vaddr = NULL; bufs_done: mutex_lock(&core->lock); if (core->cur_sess == sess) @@ -441,8 +458,11 @@ static void vdec_stop_streaming(struct vb2_queue *q) vdec_poweroff(sess); vdec_free_canvas(sess); - dma_free_coherent(sess->core->dev, sess->vififo_size, - sess->vififo_vaddr, sess->vififo_paddr); + if (sess->vififo_vaddr) { + dma_free_coherent(sess->core->dev, sess->vififo_size, + sess->vififo_vaddr, + sess->vififo_paddr); + } vdec_reset_timestamps(sess); vdec_reset_bufs_recycle(sess); kfree(sess->priv); -- 2.50.1