From nobody Tue Dec 2 02:20:21 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 D8F082BEC5E for ; Wed, 19 Nov 2025 10:15:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763547350; cv=none; b=HYnxmO6qQxH3+Syoaw1S70sMpPRbwFoAUBEnJzklVx4tzdijvNjtvlU+Pq3I557oTLvM0q0L6Vp/j+bxYUVCLl1mbG8xY4I/oADAQjKTNrvnIG9xiwLpeQ+S7pj88OR4z20+pBumos5pjz7YJfmH9RKTZI7rOx4Jp+Mwudk57ak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763547350; c=relaxed/simple; bh=NMoYGq1b5aH/K5Pc/pjAfQA579owKWyWVuLmcyqLrGA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=SXURCsx7g4VecpTNbPwC6YPWHFA06XAoUT1ayzFoXFU8YyQuXVHxMZj6/HfWE/wQZHMN8iyJ/Rha8FxLESsvqcnZsKl73a+XryeH/xZPgWAfdnHD7nuwVqcE+B3UWuz0LjjgWmzMGfF4oY1nBSPgGP5U9fr4BgtvEwq+xLt6o2A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=KyaRjLLu; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="KyaRjLLu" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-297dc3e299bso63707115ad.1 for ; Wed, 19 Nov 2025 02:15:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1763547347; x=1764152147; 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=ZdyT6/rKB2qN03Hq5c8aipzbp7XNcNbuAc/SKRTozQc=; b=KyaRjLLuHjhIXj48WlDvEWQkMquX/2m2SD/QujlYer7yAbnh2ifUvbUbzAXkoZ8Zo6 V/p6vU85h/8/j5Y1DssM+ny8OhUK/T91I7zDfjiVDqvJVn3F7ImppwZdPRoXKRLLDo5D TV3JVxnBxd/Ol17QpFyGg7OlpPTMA5ZroHyKCyskzZl4emsbGDN2gR+EiJtj7DiiKUPo H/dTJb2LKBmi5ctOWeUGqpvuek2EfTWswrESd821KyvPi90nFOYj2RmkoD2C6Hx6i6LV wWnS7pxGYywitOEMtfFJ/eq86bzhW+iRvwRifqBTZsuEl9tRVTnKtuDVrtd59Op4fhny /RBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763547347; x=1764152147; 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=ZdyT6/rKB2qN03Hq5c8aipzbp7XNcNbuAc/SKRTozQc=; b=AB57yop4ssZicuZTCtK5AHMfF/ZAbFDBzgFLZGa/PpZXIshhGYqbaVHv0zX25meEE0 zV8+b5EgYU2WyHm5E7HP9GqpPUQf2FJe+O7Tkmjgjz4l88oJDu45rU6WQDr/oQ4thU+A VBCVf27itdqWkNEuZc5pI6Pu1oWzKYXFU61dOY8/C4a1E7fwkEPHUPNGLwd4Y3khQSim 4y/Bxc9ZInPlOZoXq0FISNMzcyjyGKnKy6zdLSdLTXSqmyhdGnN058prtvS74MOVuoeB dUWBweTNsoWk2gKiOuk/yqOP6k4XRdV5VoMnw/0ic+yx6bbDsA93e2XZT5z63LpUpK+a HAOA== X-Forwarded-Encrypted: i=1; AJvYcCVfRViBAVkMywx4/DONoOfHaqH5yUSX0UpJMcx3u/yHkmqdWkUUfY77If2NIaHtX4bdKg2A3mUd4laalXc=@vger.kernel.org X-Gm-Message-State: AOJu0YwXGQK1OqDbK8i6B00iW1HzRxzCP5xqXI2BAAFNHU3yeVn6FTlG tvSqCkBYdEPb+oKS/GHiKtt7XEFU0kOgXv3K4R2f5rv6XoKuDQxlkwN6OSRCxZaFmc4= X-Gm-Gg: ASbGncuYP23BM3WFPrBRbTigl9nXFV7Az38CpQWcNj+3jBbsQWLjd5jVFx0Khmo4wjE 7aqZ8CNMkV7KJ5NWQx/FYlCeiPbk1NlTInWsXMydg3aOQMLF1kYyvGr8L44VEEODtfEtv40BdX9 hXvxaViZArBH5vUEeBYl47Sm67FE0bvYFwERlPIsGh8dXKuTaoiopBFbd0EU2PoqwSz4BnXnnh5 eLsX7uH5fQ+L1kTvdq7W1ERlxi64cNw2EHySK3kYAoCSTK+VDvlCT1W4RCkEbsvt4KOAAGaRQXI BDGVOz7LSNpvDYwC01NVKrz1Qd1NAwmAI1lgACxI8IQlwnnpmEMBipUcuCc6ejSWzHAl4E9lClF RmNEOPHJcRJ+0vdulDrjERF4e+95zNg2I+0l0mgMF63F6LRbUoNaDl3rEClsDl8hEnq+DE+6MWJ FiQKZsFmHZ4ShYpPjfhReQ9w8Zdw1/5xGTjyj5DDcDxTopYGIgb7urZLX13aA0UQ== X-Google-Smtp-Source: AGHT+IHneH5yKNCIry8NMGup+JTksCsAmE9O2nHYCl6rNwgc+1aYwdv0MZCYSzfxh6oOvuG4JJAN4g== X-Received: by 2002:a17:903:987:b0:268:cc5:5e4e with SMTP id d9443c01a7336-2986a6b5571mr257787345ad.1.1763547347143; Wed, 19 Nov 2025 02:15:47 -0800 (PST) Received: from gmail.com (ec2-13-52-8-11.us-west-1.compute.amazonaws.com. [13.52.8.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2985c245ecdsm201815475ad.32.2025.11.19.02.15.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Nov 2025 02:15:46 -0800 (PST) From: Zhangfei Gao To: Greg Kroah-Hartman , Alexander Viro , Christian Brauner , Wenkai Lin , Chenghai Huang Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Zhangfei Gao Subject: [PATCH] chardev: fix consistent error handling in cdev_device_add Date: Wed, 19 Nov 2025 10:15:40 +0000 Message-Id: <20251119101540.106441-1-zhangfei.gao@linaro.org> X-Mailer: git-send-email 2.25.1 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" Currently cdev_device_add has inconsistent error handling: - If device_add fails, it calls cdev_del(cdev) - If cdev_add fails, it only returns error without cleanup This creates a problem because cdev_set_parent(cdev, &dev->kobj) establishes a parent-child relationship. When callers use cdev_del(cdev) to clean up after cdev_add failure, it also decrements the dev's refcount due to the parent relationship, causing refcount mismatch. To unify error handling: - Set cdev->kobj.parent =3D NULL first to break the parent relationship - Then call cdev_del(cdev) for cleanup This ensures that in both error paths, the dev's refcount remains consistent and callers don't need special handling for different failure scenarios. Signed-off-by: Zhangfei Gao --- fs/char_dev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/char_dev.c b/fs/char_dev.c index c2ddb998f3c9..fef6ee1aba66 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c @@ -549,8 +549,11 @@ int cdev_device_add(struct cdev *cdev, struct device *= dev) cdev_set_parent(cdev, &dev->kobj); =20 rc =3D cdev_add(cdev, dev->devt, 1); - if (rc) + if (rc) { + cdev->kobj.parent =3D NULL; + cdev_del(cdev); return rc; + } } =20 rc =3D device_add(dev); --=20 2.25.1