From nobody Mon Feb 9 01:21:06 2026 Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) (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 63DFE3242CA for ; Fri, 19 Dec 2025 17:03:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766163792; cv=none; b=P5+OAo6QaYmCP75zIeRnq5AsrXvuHPapN/QVH5N4wQ73fFT8sqn5Vhb51B8ASqW9aZOAFzK8o6J2twEZDdHiQJuce+RBTFYvRhzqf3WJL/Gii5IPyH4NrA05JqvTJz0sZ2KgbPWpWb25Tx5tDFRk7F18hgZrL2SbWX1K93BNe7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766163792; c=relaxed/simple; bh=egoZVQFjPWXGAtIOxW8GGJxkfc1zdWWNBbnwf9mSVYw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MFVXTnXIjjtbTX2j6h7tmdlIWGZmeeOxioQhC5WZy5hOLunvKC/s2PWjs5kZKhL2Ob07CmLqI+f2DtBLKZt61NoPAP/1aDMuPeoTovzWbERxwaUh9D76ilGi26lUoezAnb5oMr+1cPs1LDeA53zh+43ArL0R0k59l24Yw0mH7LU= 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=lkW8clCe; arc=none smtp.client-ip=209.85.167.52 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="lkW8clCe" Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-5943d20f352so2290182e87.0 for ; Fri, 19 Dec 2025 09:03:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766163788; x=1766768588; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ma36rwIjBKTPa9sms/UpO3LEYEw0JfjoZI+1B4sWIu8=; b=lkW8clCecQtiCA9bBuGNyAV22GNNKiOyDSdF7e/INllEh8Cd85PxlUtNG3xN/ZzQwz WZBnTdSlNH4zd+9QiZf1dljq57mxvXQDBzQHWD9Y8R4zkiFywMQCbMgGREZ85ZH1rg+Z wM35vQyjMPcAyowENVmFLrHf/LDQWuFTZODmVQ4TYygnVTZcCmzVDUyfdaksaR5wAFsC LF6JHeX1AyPhXHrlDu7JsDep0JsnoroPoxbP2Lzj8ENNs4fR9jXv4nruVHP1bhACjPBN 367d+Fii89tV8UNmPOg4wrMRCbmhosvUWgMtaug61HR6LeQwWPgkKHtM0HRyGAdZGprG g1ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766163788; x=1766768588; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ma36rwIjBKTPa9sms/UpO3LEYEw0JfjoZI+1B4sWIu8=; b=B84du6mqosm7r+9xJ3UyrhDcZfdIRFoynsJFlb5Trvr1g+HBNBtEEW1gYAXmsiTZu9 i5ePcCmD3Eq5v+0sb/v0SUBv6piO7Za2RCVSw2UAgWVTo73mj6Q1PdOwjJXko+DnOjw3 4vPGhPLemaxbPLeJ/gOf8viUsLJa6dnUltAeLU/grzItJUiQO4Di+ReasdLdL8T9mYgu Cnh1tVzJn4A55wY89RUzyHFCc6KDQ1mx4nAqbXfFwFFbzIYZhbkOltbPvmaKTtKRG3l4 Mo16zpVuWSMYJDMdCyQ2+UnJwP7Ih2CspqKo+0GFebGA1mxhrUYX9IyOjcg0bL+mcROH l65w== X-Forwarded-Encrypted: i=1; AJvYcCWvYOqYCK4c7tKnIz5bEuVa+1LvKkB836I+yU9lFXtoVdET258hT+Kt8hSyNxfuB202V9WwCoyhSHwI45g=@vger.kernel.org X-Gm-Message-State: AOJu0YyspN0ZT8QWkPFSMIV88c2RswyRzzjp55CyFqBuvHvx3OLnLGdW UINJVrJGP3No3deshV9UWmtI9ozCooBr47724tQHP2cGBe2uRA2cuV47 X-Gm-Gg: AY/fxX6AeZdcSt0XlpYNr7amImXF5u5REHFQjx3yP90giq7dwVt9ImuE/RWbTztGbGK LK0/Dl9SqG9bJ+o7npCxBG7Oki5oyyHPBCetZB8IPP267XmZwPtFuTx1VKezjAez3Az6ADSj7HU 9bQCFzkX4axwl5UK+zdlcgoZcrlmpL/4y8hydGVLMFW5QV7C19jYiQWCp/djetrM1HI6rSv30Xt iqaCFv1pjMb+ybvHhCunH4WEDHt9EcQnPyuT+Zba/y9g7/NLxLocohdkiCxzzqZ/9rMWSMG7c4H ZM84Mdzi0PrqnC7gDsElI95B61zp9ojoqTazUCuC2d5FzcIjcXcBZAB8DO/rgKX00fsiGplWegu hOrEov66HuaGT4lk5rP2YWx1HRODP6mUFU2V7AUeKU6MkW+yeZ6IxG7/OLI3TXhA9Gi/+edN4q/ j9/8JyztjZjvjNB0PGjA6JPjXpwBdPLkLORB5FrBKNNoU1uhJMkHs3euE+K2Z3dbJtiaGqVdXG5 n6XMQ== X-Google-Smtp-Source: AGHT+IHPLj4Rik2hLkTATs3YXSZ7zfCQNkBcE6S2phkIRux+ZDXsQmQ96eqxP9mRVz4A0fUxd1NEGA== X-Received: by 2002:a05:6512:3c8b:b0:595:81e1:2d00 with SMTP id 2adb3069b0e04-59a17d1c2d7mr1454976e87.0.1766163788384; Fri, 19 Dec 2025 09:03:08 -0800 (PST) Received: from LT-5CG5341NQ4.nordic.imtech.com (84-253-208-48.bb.dnainternet.fi. [84.253.208.48]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59a18618d6fsm828449e87.65.2025.12.19.09.03.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Dec 2025 09:03:07 -0800 (PST) From: Kari Argillander Date: Fri, 19 Dec 2025 19:02:51 +0200 Subject: [PATCH 1/2] rust: pwm: Fix potential memory leak on init error 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251219-pwm-rust-v1-1-46873e19679d@gmail.com> References: <20251219-pwm-rust-v1-0-46873e19679d@gmail.com> In-Reply-To: <20251219-pwm-rust-v1-0-46873e19679d@gmail.com> To: Michal Wilczynski , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich Cc: linux-pwm@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Kari Argillander X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766163785; l=1470; i=kari.argillander@gmail.com; s=20251219; h=from:subject:message-id; bh=egoZVQFjPWXGAtIOxW8GGJxkfc1zdWWNBbnwf9mSVYw=; b=0GKkMQPkd6eS4+0/cMSPxm7esjCifgCh9/TrrsM6cbCbcR9aV9MJTyvbp7Ndmbqd+z0nUJoll Hyk1uTz02AACSJin1ixFVu0sI/nIrry5tctiEiNE5zQzD2Ec7rdwuHU X-Developer-Key: i=kari.argillander@gmail.com; a=ed25519; pk=RwSxyhTpE3z4sywdDbIkC3q33ZQLNyhYWxT44iTY6r4= When initializing a PWM chip using pwmchip_alloc(), the allocated device owns an initial reference that must be released on all error paths. If __pinned_init() were to fail, the allocated pwm_chip would currently leak because the error path returned without calling pwmchip_put(). While __pinned_init() does not currently have any failure paths in code base, this change makes the ownership transfer explicit and keeps the code correct if failure paths are added in the future. Signed-off-by: Kari Argillander --- rust/kernel/pwm.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rust/kernel/pwm.rs b/rust/kernel/pwm.rs index 2dd72a39acb5..4b6a3b5ef929 100644 --- a/rust/kernel/pwm.rs +++ b/rust/kernel/pwm.rs @@ -607,7 +607,12 @@ pub fn new<'a>( let drvdata_ptr =3D unsafe { bindings::pwmchip_get_drvdata(c_chip_= ptr) }; =20 // SAFETY: We construct the `T` object in-place in the allocated p= rivate memory. - unsafe { data.__pinned_init(drvdata_ptr.cast())? }; + if let Err(e) =3D unsafe { data.__pinned_init(drvdata_ptr.cast()) = } { + // SAFETY: It is safe to call `pwmchip_put()` with a valid poi= nter + // obtained from `pwmchip_alloc()`. + unsafe { bindings::pwmchip_put(c_chip_ptr) }; + return Err(e); + } =20 // SAFETY: `c_chip_ptr` points to a valid chip. unsafe { --=20 2.43.0