From nobody Tue Sep 29 08:23:02 2026 Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (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 B9834428849 for ; Mon, 10 Aug 2026 16:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379695; cv=none; b=m4WQi4bWCkMzUefazdHrIQgnkrqKN3jly0xxARuCNhBVeutyq7IQAIAQaaOkrV0jkO6deA89V1dda3wmCtUPDs9UOHlCH1b47FVSy33BYaqzVBVSzaPAYHa0jBYVYJj22g58M34nE3/McuE5UlK4BYCexho0OBCaQBiDtPnwCtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379695; c=relaxed/simple; bh=JtQlqs+VnfmqAU2g0ICeTfBNi0n5zYXAtKGUEtwOXP4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BGlfGiXTvBXEhHjk5uUrY1OkI5xdfxc7e0pZ/Ltf8z5X8YEcEqizNjgwORyHLMBjdGBZSIWauQu2Hr6TgHTjEq4epqsHGra0tN/3gHkWGeTsxrT3M20ObW7uYvPyk+UvOzKsnG0I5HcsQT/GrLi8h1Gv49SfcFfISh5QzNoDdIA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JYinrBaY; arc=none smtp.client-ip=209.85.208.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JYinrBaY" Received: by mail-ed1-f69.google.com with SMTP id 4fb4d7f45d1cf-69848bef5c7so1563137a12.2 for ; Mon, 10 Aug 2026 09:34:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786379692; x=1786984492; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=M1E8OcPKQa3EfyTN7DtxgAyhHDdwMTH4+JtgNWA55MM=; b=JYinrBaY1NB0Lhz763FwPtZW/HpsLU71zs638UL7M+UfX7qqwfNnZjSW0Ad7xlg+6S 0bbd7n5jo8aRJLcsp482X8ElVkkUTpHrTOEsFeWHBMNBsZdpqnBbahoyUbpKS9uHfDJR uQXCc1gfolkSRn4o2xe+DbVWxW/jXuT20G8BDhLGgWjKkuSQr7I0PPGPvrmIJycKJ/YN Tt8imrX4tU478u0s1z3yqIQtiHgUAXvucVFtqRk7xOu5eIWEHLy4igO57XPin1x2gmPf wpXCtrvZMKUOXRunI0xBusO7zhF7/MYa7nVLJVb5ugLNX7npaZ3SHstIHQsrmBW7xc2W U1Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786379692; x=1786984492; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=M1E8OcPKQa3EfyTN7DtxgAyhHDdwMTH4+JtgNWA55MM=; b=Qhz0Z+x+w27WWZ2L48fkSsPbayMwcKwJxNEQPsMWHdkKQDpCCuLY1Y8LrdUQbxvV+q /EMFow7nqi+coZTFKpyVexAg+Rq8fS4ewSn7bjmGPPs0CU7XFnYcMSJONaQO8XXEtXOi Q0BqKuuM4Ru9FuDIchmTicwREwndKMNKfmHCQUQUf7RwQy+aopaEZPnGSDj0SCJsgnny th1pv40RD/Qjklxz+nxINrBVaX9erB3wg+ibVPD+Al231r5Sx1WexBBg8T0sf/SJKPQ8 4RQ/K/lONyEgqwfiyK64B9U2Wq+ahLhsK0JxZTAIK6RRa//uSzt9PAPJEnK+TY189xa8 FQSA== X-Forwarded-Encrypted: i=1; AHgh+Rp/pbJGBb7AWjINy1eUU1tsJj66aE+uDTvkCKkzVjQSU016TElQ+2w6GovUTQ2FwNFLZxwuJP5e9O0FKJk=@vger.kernel.org X-Gm-Message-State: AOJu0YwH2XmRcYs54HT8CT/crayozes0eU48C5DFO33fUP4VUquSNeSc EAYOK/EaXJjvpHMhFQiQTOk3JwVbFEcRCaHiAj5HZ5ELDXT/1cYt4+Ip0IHoIU6x71nNlJ22hcR +Hap3qXbHQ1ry+0nGog== X-Received: from edzh5.prod.google.com ([2002:a05:6402:945:b0:6a1:c0a:e022]) (user=tarunsahu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:2110:b0:698:6620:d988 with SMTP id 4fb4d7f45d1cf-6a355e1332amr1811578a12.15.1786379691640; Mon, 10 Aug 2026 09:34:51 -0700 (PDT) Date: Mon, 10 Aug 2026 16:28:11 +0000 In-Reply-To: <20260810162814.1398016-1-tarunsahu@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260810162814.1398016-1-tarunsahu@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260810162814.1398016-2-tarunsahu@google.com> Subject: [PATCH 1/4] ARM: locomo: use put_device() on device_register() failure From: Tarun Sahu To: Greg Kroah-Hartman , Geoff Levand , "Christophe Leroy (CS GROUP)" , Nicholas Piggin , Michael Ellerman , dmatlack@google.com, Borislav Petkov , Madhavan Srinivasan , Shubhrajyoti Datta , djeffery@redhat.com, Tony Luck , skhawaja@google.com, Russell King , stuart.w.hayes@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-edac@vger.kernel.org, Tarun Sahu Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When device_register() fails, calling kfree(dev) directly bypasses the device_release() callback (locomo_dev_release) and leaks internal driver core structures allocated during device initialization. Fix this by replacing direct kfree(dev) with put_device(&dev->dev) when device_register() returns an error, ensuring proper refcount decrement and cleanup via locomo_dev_release(). Signed-off-by: Tarun Sahu --- arch/arm/common/locomo.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c index 55e360452828..0f6689d343b0 100644 --- a/arch/arm/common/locomo.c +++ b/arch/arm/common/locomo.c @@ -223,10 +223,8 @@ locomo_init_one_child(struct locomo *lchip, struct loc= omo_dev_info *info) int ret; =20 dev =3D kzalloc_obj(struct locomo_dev); - if (!dev) { - ret =3D -ENOMEM; - goto out; - } + if (!dev) + return -ENOMEM; =20 /* * If the parent device has a DMA mask associated with it, @@ -255,10 +253,11 @@ locomo_init_one_child(struct locomo *lchip, struct lo= como_dev_info *info) =20 ret =3D device_register(&dev->dev); if (ret) { - out: - kfree(dev); + put_device(&dev->dev); + return ret; } - return ret; + + return 0; } =20 #ifdef CONFIG_PM --=20 2.55.0.679.g6767b8d81c-goog From nobody Tue Sep 29 08:23:02 2026 Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) (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 E6A4E429038 for ; Mon, 10 Aug 2026 16:34:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379696; cv=none; b=FPrlKnSi8T/Kk+f+5HtOV0gM43wPZk+pFbZ27XLMCofJrYKpBnO5uSe6RZfqEZkv+UlXjZ1cg2O5fpG56PLn3LaiSyAt7GD/hKED9Da9aMthGldvOBDhd3zPwVFByiX/NDqMSnzJB0AWAYrXjIlK5MDAt1F7DvSs7wqAzbEH9cE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379696; c=relaxed/simple; bh=GC+CJo5FlA/SE2/QVcHL36Xcw5XC5Gyu8Y+sDTlvf54=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XEhIEpZD46U6/0bTr03zRXExlU1IVksPpp++hpIkF/Y4Kkc/2oSHY33sge32n9ph2747HHPHU6xUtQdO9eUndw6b/OClhQf7x/dKvCIHz1+9hXUAJ8GQqoJAhM6VXe7CuWZr712U4tFHLvqeZ+iht1sp74PYZOyt46jyBRjg87Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dXnoSpk1; arc=none smtp.client-ip=209.85.208.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dXnoSpk1" Received: by mail-ed1-f72.google.com with SMTP id 4fb4d7f45d1cf-69eae8773d6so2389818a12.2 for ; Mon, 10 Aug 2026 09:34:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786379693; x=1786984493; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2W9GjrX12XMdTPANAxHOJwxcvmu8lBZVUg7itISKfu8=; b=dXnoSpk1GvFIs/7MzjDDLVPtl0XkokwJi5OyqSbbOIEzmz75l5HDPlLNFvu1KPTfDf jyaFdRmH4POvkAhbdMOy9KFU6osfFDdpuMtlTvHuW4XOW+QM5NeY2dWjrg6e/0xRPa8w 0t8Cy5NlPkgDaiDifX/nnv0ya8U3O8oi+6Ijb4RWPzoSwdbrLvO9bhpCzqr/7+VFqsK3 hfuroVjBwa8zVx7+TV7RYSbLkgqtOSuc72XT6tuTmdkojby1US14V3/iDrBdZ/3CYvu5 XdEjwKXsTpO3+vNyDL6erJRfRkHams8KFk6+ay3c4Mhlh8ulqaMA6EvUz8axjArtkQGc ya+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786379693; x=1786984493; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2W9GjrX12XMdTPANAxHOJwxcvmu8lBZVUg7itISKfu8=; b=d0vnJWc+xTwA2gaB//bQ/cSIvXqNmJfJw89XI5PFU7h4Ool+ZesQbiOJz7WQ8aYzXk 2N1dSJXnG3W9MmSuFyP++TDBNTh5i7VkrSCPsrN6x5J/kp6M+JCLBoWiW+hJABMYkL5y 4Vfb4xup71JlB1gyofuHI38yb9VwK93kH9HntBR2CF4XIXZQGoA1CEJt3brDwnJXMeFF +3Vix3gGPPh3ZDoSOLIGeI08g8IU+fS5/esWLsBdgec4mOGDoW8HS0tj2wIC6KHm4LlK s1LRM73fATA+lB3nwn8lBgwFGMILhYKGHkBBznWULXx4II8KzJ0VIMaIZ4HWfARvBN0L tOww== X-Forwarded-Encrypted: i=1; AHgh+Rr//uKOhEG8YUW6M7uSq0+wSA3uqc5aZAtgRcYKFXuexZyqA24EFhA+SM9SR6jIqOvwz31PptX/bwICbCo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2APcV3fs5WAJrSb8lEjThM8utS5Yvw/FPqtuKaxD5yOXlLzkl HlaMUSZYMuit7qHyoit8km1DoELu4/uZ2nP1kP0SuwXFjXFcSHUldeNg4eAxxIsu2qLSTHCP+fA UTz47KMSI+JYU4IlewA== X-Received: from edbay18.prod.google.com ([2002:a05:6402:2032:b0:6a0:a508:c896]) (user=tarunsahu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:454b:b0:6a1:c908:1701 with SMTP id 4fb4d7f45d1cf-6a355e2d32amr1548538a12.13.1786379692937; Mon, 10 Aug 2026 09:34:52 -0700 (PDT) Date: Mon, 10 Aug 2026 16:28:12 +0000 In-Reply-To: <20260810162814.1398016-1-tarunsahu@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260810162814.1398016-1-tarunsahu@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260810162814.1398016-3-tarunsahu@google.com> Subject: [PATCH 2/4] firmware/edd: use kobject_put() on edd_device_register() failure From: Tarun Sahu To: Greg Kroah-Hartman , Geoff Levand , "Christophe Leroy (CS GROUP)" , Nicholas Piggin , Michael Ellerman , dmatlack@google.com, Borislav Petkov , Madhavan Srinivasan , Shubhrajyoti Datta , djeffery@redhat.com, Tony Luck , skhawaja@google.com, Russell King , stuart.w.hayes@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-edac@vger.kernel.org, Tarun Sahu Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When edd_device_register() fails after initializing the kobject with kobject_init_and_add(), calling kfree(edev) directly bypasses the kobject release callback (edd_release) and leaks the allocated kobject resources. Fix this by replacing direct kfree(edev) with kobject_put(&edev->kobj) on registration failure. Signed-off-by: Tarun Sahu --- drivers/firmware/edd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c index f980c5b56858..763e7b16d517 100644 --- a/drivers/firmware/edd.c +++ b/drivers/firmware/edd.c @@ -748,7 +748,7 @@ edd_init(void) =20 rc =3D edd_device_register(edev, i); if (rc) { - kfree(edev); + kobject_put(&edev->kobj); goto out; } edd_devices[i] =3D edev; --=20 2.55.0.679.g6767b8d81c-goog From nobody Tue Sep 29 08:23:02 2026 Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (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 D96F3429825 for ; Mon, 10 Aug 2026 16:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379697; cv=none; b=B6NtTx3UgmnT+Q8m67PPJBwYZXr6O4aD047EM6g6z2H1rv8kHf8m2xlBdby23+wC9wuR6/U6wxfxgbyQiMKaOAtqx9gtEonHWFd5v4RaJmUJHpoQjb6Wzv0AtkZJZtye1AjoAj1Ituefc5Sy3Jz+dnOz9BIEEONdonEG8jCytP8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379697; c=relaxed/simple; bh=AZylGUQN3FOyOExthuRk7+ALVyRlRDv5nRJSPRc+2G8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EthkRnqJbnJiKMLdx8wqWjzDRgCYcMMDEkta1jsN5zTycc7XJOLnaaoRWc8CtBemv1Og+slORJWR4Lhw2UQvr/aQHhOxgf1Iv+k8/cGasMWHRPvQOG1o/qW23Dwb9WXMFe2LQGV11MeBQ+m+jhwVCGHfqbYJuJux6AUOdZH7CSY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=UlBKicDX; arc=none smtp.client-ip=209.85.208.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="UlBKicDX" Received: by mail-ed1-f70.google.com with SMTP id 4fb4d7f45d1cf-6a17c83732fso2020704a12.2 for ; Mon, 10 Aug 2026 09:34:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786379694; x=1786984494; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=L84OjIpSeCWFBArdFIo9a7688YTN2+iL7sp2DP0ZJfM=; b=UlBKicDXMikMZVeQyO72KakI/tsJ6wKXYzFsLuPL1asf5rWsA4gKCEYoR3Wt8rqjHx maJIOyYEvSldosLadPRCtnv0VKi0PxlY8doPERnl34LeQOgr8UzWj9msLNs8cd9IWvS/ CuENHgkIUZ8Wn+/Us1unmtHTlr5KYA0uL0oTW4mpuRsRBMD9CjmF7ryzZhBRdPQfEmhc blix23+Wlz4hGVOJwP2TYSyqiuG+11Cv1JeBF9ZKiagXdqvCaqv4SI69KOLfFFs8tdRh iTxkEckI9J/b8rQ1PJYBhiqPfJdVhC7bbTfQvan1q2oHNK1ujulWUuM8VIe9RgEn3SKg IUkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786379694; x=1786984494; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=L84OjIpSeCWFBArdFIo9a7688YTN2+iL7sp2DP0ZJfM=; b=Kzcf8lXv0UuOTHUeYarZSAwDRldwWwk2I5EC2lQQNQlM9WHd28GZk08B51pSbI7fED HYf5HT/mN9mae/H75OmaJWU6OAK0eTBwelxIqI57PubvYZhZrep1j51Vbhj11xaNfMXl 3Hcow/SKsPRFHABXhcFgKzZYkhhseQjNO23UHG8K25o/MP4S+rZmbmsv8c/6peZCXypp MUSZx6k7ST2yGZW+4+rpF5VAXyXX+7EUceJLm+j4D2gTVbrhZlFdrNi8faZntU8cF4ra cN5iw42HQy6TCoOtoqnXTjwgFyG+oVrAcX/7eWAOt04DqW5jrKwM5zmhsNksPgCiH0dM W2gA== X-Forwarded-Encrypted: i=1; AHgh+RoK1I+M1ag4tJXbvrF+JFHcM1M2Ck6GS2vuvK4YI7iROmP8D3CeaJFIzQZ+zeSMXthdZGaYG1EC1X0sePE=@vger.kernel.org X-Gm-Message-State: AOJu0YzGNbkzVzuBPoIQwxdcYWaN+XWSHTVvfp7srPQu65ADiCEQbg20 tt9sWhAjAtrmq5yzTwt7pJVtjUSajJrhnYne9lo2wqvLZ/JN2uRoBBK2XN0P2ogYbgh3Nh4rfov X3mP6HQv+rWPyg/WKGw== X-Received: from edgj25-n1.prod.google.com ([2002:a05:6402:a5d9:10b0:6a1:fe68:3f56]) (user=tarunsahu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:278f:b0:698:af31:5a9b with SMTP id 4fb4d7f45d1cf-6a14f0b8fa8mr21454308a12.9.1786379693823; Mon, 10 Aug 2026 09:34:53 -0700 (PDT) Date: Mon, 10 Aug 2026 16:28:13 +0000 In-Reply-To: <20260810162814.1398016-1-tarunsahu@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260810162814.1398016-1-tarunsahu@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260810162814.1398016-4-tarunsahu@google.com> Subject: [PATCH 3/4] EDAC/versalnet: use put_device() on device_register() failure From: Tarun Sahu To: Greg Kroah-Hartman , Geoff Levand , "Christophe Leroy (CS GROUP)" , Nicholas Piggin , Michael Ellerman , dmatlack@google.com, Borislav Petkov , Madhavan Srinivasan , Shubhrajyoti Datta , djeffery@redhat.com, Tony Luck , skhawaja@google.com, Russell King , stuart.w.hayes@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-edac@vger.kernel.org, Tarun Sahu Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When device_register() fails, calling kfree(dev) directly bypasses the device_release() callback (versal_edac_release) and leaks the allocated driver core structures. Fix this by calling put_device(dev) when device_register() returns an error, ensuring proper refcount decrement and release cleanup. Signed-off-by: Tarun Sahu --- drivers/edac/versalnet_edac.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/edac/versalnet_edac.c b/drivers/edac/versalnet_edac.c index 97ec05d68bbb..2912b3658915 100644 --- a/drivers/edac/versalnet_edac.c +++ b/drivers/edac/versalnet_edac.c @@ -829,8 +829,10 @@ static int init_one_mc(struct mc_priv *priv, struct pl= atform_device *pdev, int i dev->release =3D versal_edac_release; =20 rc =3D device_register(dev); - if (rc) + if (rc) { + put_device(dev); goto err_mc_free; + } =20 mci->pdev =3D dev; mc_init(mci, dev); @@ -852,9 +854,9 @@ static int init_one_mc(struct mc_priv *priv, struct pla= tform_device *pdev, int i device_unregister(mci->pdev); err_mc_free: edac_mc_free(mci); + return rc; err_dev_free: kfree(dev); - return rc; } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Tue Sep 29 08:23:02 2026 Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) (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 0EA2642A14C for ; Mon, 10 Aug 2026 16:34:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379699; cv=none; b=U3HcZZcNjFI/fL9BUHYo3GsMn5QD7D5OaHv+AbRiDOnM/IZkLMJeqK6/77fFbGTTGmNYMIEMqyRxsWu+Ng5molLlpQ3AjGtdvJ5Y7RGMD2SGFDr1CASlHxPjLhv0qMuGYZ0sJvr4+9VH53C/fbu7PXSdf3z0YoOG3XtR3hLLF60= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786379699; c=relaxed/simple; bh=nxkZ6oQqlT9yBLiO79VuPmYrhj5vHUHesPfcXuPzYAc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=A4AmdPV3AHtU0FRG57ttsAX1EGH622wv0svtGlw3YsYyhKBQXw0LrU+ylsiHEuCoJHgYasT92FOY1MU0WF00fOdiKE8KY4f9njZfK1B0u9hlV1ZnzEDVKGbVCuFiDCABUtMzLFW71B7v8nEHqO4Gxvbv4K6M5x9z7iIrcIh8AXc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=hnOrRe7w; arc=none smtp.client-ip=209.85.218.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tarunsahu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="hnOrRe7w" Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-c20262b5e10so235135966b.1 for ; Mon, 10 Aug 2026 09:34:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1786379695; x=1786984495; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GD8i7EiY62NttVrLxOz1ueFjHSn35LIMgqveexLCttY=; b=hnOrRe7w7XDNGdm2HhXPhcW6EZmANOKWp1B49oqb97W7Q9G7M9gBw+TSa8GSvSm8f8 jE1xGBLBJew3iQB+7feVsl/h21TW29N8Kg+CuIB+osr8cgOWyVXuivISdubzgBJhyyZq o7ipLgCiZhDaQVPm/5xJHiM8YTy6gcOzmdj/gYrS01+9XFsSkUMuFSSsBE/yFTJ+8Hxu R5wvRkp/mqxvWn7s5Zwe+/CWZ1c7TM/X6w7Dt7DZzHt03S5PZJ3WxoUtMZfHMcvdUPJS 8ehlCYFIpDpu54nxNAg4NzV/tkJdvqKjpvXAADa3sZvOpKitumeMTYhliXAKla7HfRE0 Huyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786379695; x=1786984495; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GD8i7EiY62NttVrLxOz1ueFjHSn35LIMgqveexLCttY=; b=bJRD/RVE0miAkRdATsfo/Wxi7itkYknhgLn165Lp2QbavdWN/uzytrkFUxc9+fb+eM HVV4xAKiragArQ7nTmeVuufmB0xpwki/0kges9ZyZW24wm+iZboxIXlnLS+QN9R5WzN/ pyTho8VAjtgBIkl+wSNJ86mtZU3NnNgP4RQ3M2fG/WdFJq5RSS6eejkhCSCuHhMgBKIY Az2gFL/0BKBixNLcmM8X4PvIVfM0kASsO1ZisvkhctKvd/WwoE6HsOJ/AikchU17H0HS T9mVA76Wr8FDnluYH9nD5uzc90YyR2M1qW1qFWn2roDxi/EaDJfcQTqVQGQfLQQFb6le ihcA== X-Forwarded-Encrypted: i=1; AHgh+RqYpm+8UZJd4UlTvdKDaCSm09atgVIzkm7nehjcA7FxUxzLb7Y7ZiIiOZC3w61pGM1KaKL6VNS8nbUXYr4=@vger.kernel.org X-Gm-Message-State: AOJu0YzJDDW1To/uK0xZQHr7nhHVN2+Tdwf1Cbps3+lGNuHR218068Xj 5kuCXCeWf651uR48AMbBkkJIhejP1aVAC6iXZy3F20ddC7vP+FrkGLynqsQUEAeeFSt8I8N82nD E83X5guS9I+eS8vw5QA== X-Received: from edqn11.prod.google.com ([2002:aa7:c68b:0:b0:69c:d99c:ff0f]) (user=tarunsahu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:22e6:b0:6a1:8ec4:65f5 with SMTP id 4fb4d7f45d1cf-6a18ec46810mr12302806a12.21.1786379694823; Mon, 10 Aug 2026 09:34:54 -0700 (PDT) Date: Mon, 10 Aug 2026 16:28:14 +0000 In-Reply-To: <20260810162814.1398016-1-tarunsahu@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260810162814.1398016-1-tarunsahu@google.com> X-Mailer: git-send-email 2.55.0.679.g6767b8d81c-goog Message-ID: <20260810162814.1398016-5-tarunsahu@google.com> Subject: [PATCH 4/4] powerpc/ps3: use put_device() on device_register() failure in ps3_system_bus_device_register From: Tarun Sahu To: Greg Kroah-Hartman , Geoff Levand , "Christophe Leroy (CS GROUP)" , Nicholas Piggin , Michael Ellerman , dmatlack@google.com, Borislav Petkov , Madhavan Srinivasan , Shubhrajyoti Datta , djeffery@redhat.com, Tony Luck , skhawaja@google.com, Russell King , stuart.w.hayes@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-edac@vger.kernel.org, Tarun Sahu Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When device_register() fails, calling put_device() ensures that the device reference count drops to 0, which invokes the release callback ps3_system_bus_release_device() to cleanly free the device and its associated driver core resources. Signed-off-by: Tarun Sahu --- arch/powerpc/platforms/ps3/device-init.c | 83 ++++++++++++++---------- arch/powerpc/platforms/ps3/system-bus.c | 2 + 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platfo= rms/ps3/device-init.c index 9109c218a060..8d0c77db1764 100644 --- a/arch/powerpc/platforms/ps3/device-init.c +++ b/arch/powerpc/platforms/ps3/device-init.c @@ -90,14 +90,12 @@ static int __init ps3_register_lpm_devices(void) if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_register; + return result; } =20 pr_debug(" <- %s:%d\n", __func__, __LINE__); return 0; =20 - -fail_register: fail_rights: fail_read_repo: kfree(dev); @@ -121,6 +119,12 @@ static int __init ps3_setup_gelic_device( struct ps3_dma_region d_region; } *p; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d\n", __func__, __LINE__); =20 BUG_ON(repo->bus_type !=3D PS3_BUS_TYPE_SB); @@ -164,13 +168,12 @@ static int __init ps3_setup_gelic_device( if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } =20 pr_debug(" <- %s:%d\n", __func__, __LINE__); return result; =20 -fail_device_register: fail_dma_init: fail_find_interrupt: kfree(p); @@ -192,6 +195,12 @@ static int __init ps3_setup_uhc_device( u64 bus_addr; u64 len; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d\n", __func__, __LINE__); =20 BUG_ON(repo->bus_type !=3D PS3_BUS_TYPE_SB); @@ -252,13 +261,12 @@ static int __init ps3_setup_uhc_device( if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } =20 pr_debug(" <- %s:%d\n", __func__, __LINE__); return result; =20 -fail_device_register: fail_mmio_init: fail_dma_init: fail_find_reg: @@ -291,6 +299,12 @@ static int __init ps3_setup_vuart_device(enum ps3_matc= h_id match_id, struct ps3_system_bus_device dev; } *p; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d: match_id %u, port %u\n", __func__, __LINE__, match_id, port_number); =20 @@ -308,15 +322,10 @@ static int __init ps3_setup_vuart_device(enum ps3_mat= ch_id match_id, if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } pr_debug(" <- %s:%d\n", __func__, __LINE__); return 0; - -fail_device_register: - kfree(p); - pr_debug(" <- %s:%d fail\n", __func__, __LINE__); - return result; } =20 static int ps3_setup_storage_dev(const struct ps3_repository_device *repo, @@ -327,6 +336,12 @@ static int ps3_setup_storage_dev(const struct ps3_repo= sitory_device *repo, u64 port, blk_size, num_blocks; unsigned int num_regions, i; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->sbd). + * sbd must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct ps3_storage_device, sbd) !=3D 0); + pr_debug(" -> %s:%u: match_id %u\n", __func__, __LINE__, match_id); =20 result =3D ps3_repository_read_stor_dev_info(repo->bus_index, @@ -395,13 +410,12 @@ static int ps3_setup_storage_dev(const struct ps3_rep= ository_device *repo, if (result) { pr_debug("%s:%u ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } =20 pr_debug(" <- %s:%u\n", __func__, __LINE__); return 0; =20 -fail_device_register: fail_read_region: fail_find_interrupt: kfree(p); @@ -445,6 +459,12 @@ static int __init ps3_register_sound_devices(void) struct ps3_mmio_region m_region; } *p; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d\n", __func__, __LINE__); =20 p =3D kzalloc_obj(*p); @@ -461,15 +481,10 @@ static int __init ps3_register_sound_devices(void) if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } pr_debug(" <- %s:%d\n", __func__, __LINE__); return 0; - -fail_device_register: - kfree(p); - pr_debug(" <- %s:%d failed\n", __func__, __LINE__); - return result; } =20 static int __init ps3_register_graphics_devices(void) @@ -479,6 +494,12 @@ static int __init ps3_register_graphics_devices(void) struct ps3_system_bus_device dev; } *p; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d\n", __func__, __LINE__); =20 p =3D kzalloc_obj(struct layout); @@ -495,16 +516,11 @@ static int __init ps3_register_graphics_devices(void) if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } =20 pr_debug(" <- %s:%d\n", __func__, __LINE__); return 0; - -fail_device_register: - kfree(p); - pr_debug(" <- %s:%d failed\n", __func__, __LINE__); - return result; } =20 static int __init ps3_register_ramdisk_device(void) @@ -514,6 +530,12 @@ static int __init ps3_register_ramdisk_device(void) struct ps3_system_bus_device dev; } *p; =20 + /* + * ps3_system_bus_release_device() calls kfree(&p->dev). + * dev must be at offset 0 so kfree() frees outer p. + */ + BUILD_BUG_ON(offsetof(struct layout, dev) !=3D 0); + pr_debug(" -> %s:%d\n", __func__, __LINE__); =20 p =3D kzalloc_obj(struct layout); @@ -530,16 +552,11 @@ static int __init ps3_register_ramdisk_device(void) if (result) { pr_debug("%s:%d ps3_system_bus_device_register failed\n", __func__, __LINE__); - goto fail_device_register; + return result; } =20 pr_debug(" <- %s:%d\n", __func__, __LINE__); return 0; - -fail_device_register: - kfree(p); - pr_debug(" <- %s:%d failed\n", __func__, __LINE__); - return result; } =20 /** diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platfor= ms/ps3/system-bus.c index 0537a678a32f..0918c74d3e19 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c @@ -774,6 +774,8 @@ int ps3_system_bus_device_register(struct ps3_system_bu= s_device *dev) pr_debug("%s:%d add %s\n", __func__, __LINE__, dev_name(&dev->core)); =20 result =3D device_register(&dev->core); + if (result) + put_device(&dev->core); return result; } =20 --=20 2.55.0.679.g6767b8d81c-goog