{"id":2233017,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2233017/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/patch/20260505142547.795054-6-johan@kernel.org/","project":{"id":35,"url":"http://patchwork.ozlabs.org/api/1.2/projects/35/?format=json","name":"Linux I2C development","link_name":"linux-i2c","list_id":"linux-i2c.vger.kernel.org","list_email":"linux-i2c@vger.kernel.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260505142547.795054-6-johan@kernel.org>","list_archive_url":null,"date":"2026-05-05T14:25:44","name":"[5/8] i2c: core: fix adapter registration race","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"1625fbac4bac49dd4a1dcc3e24aa068e4f02fbac","submitter":{"id":64666,"url":"http://patchwork.ozlabs.org/api/1.2/people/64666/?format=json","name":"Johan Hovold","email":"johan@kernel.org"},"delegate":{"id":9049,"url":"http://patchwork.ozlabs.org/api/1.2/users/9049/?format=json","username":"wsa","first_name":"Wolfram","last_name":"Sang","email":"wolfram@the-dreams.de"},"mbox":"http://patchwork.ozlabs.org/project/linux-i2c/patch/20260505142547.795054-6-johan@kernel.org/mbox/","series":[{"id":502847,"url":"http://patchwork.ozlabs.org/api/1.2/series/502847/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-i2c/list/?series=502847","date":"2026-05-05T14:25:43","name":"i2c: core: adapter registration fixes","version":1,"mbox":"http://patchwork.ozlabs.org/series/502847/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2233017/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2233017/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-i2c+bounces-17258-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-i2c@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Y6GeaPf/;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-i2c+bounces-17258-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"Y6GeaPf/\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g91H700FHz1yJx\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 06 May 2026 00:34:10 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 10D5A30C943E\n\tfor <incoming@patchwork.ozlabs.org>; Tue,  5 May 2026 14:28:48 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 8357D480DC0;\n\tTue,  5 May 2026 14:28:35 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id CAFA9480354;\n\tTue,  5 May 2026 14:28:34 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 72C9EC2BCFC;\n\tTue,  5 May 2026 14:28:34 +0000 (UTC)","from johan by xi.lan with local (Exim 4.98.2)\n\t(envelope-from <johan@kernel.org>)\n\tid 1wKGlE-00000003Kt0-0ZGF;\n\tTue, 05 May 2026 16:28:32 +0200"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777991314; cv=none;\n b=LE6cur4MAa6R3WSfvLh8gVths/Q0LzTiEJ2m4FaKrllp/F3lJ7FyOsxwC/6kknfMDQl9/y7H7TIDxCONWfC9hyoGD+ocAm1sKH+DLEv6+ao1YIbfqvE2NLCX+pSAlUX86+kZpT0P+qF7T+8nRNCIMokidCoIob77W1RCoawjoro=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777991314; c=relaxed/simple;\n\tbh=3CYu/nGSgQGBuqnz2Dwr8lbzgdlgelmyYppWDzvi27M=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=aWgh6ZYk6UiL8LHlUO/44tc8LiMkBMouVBVEWPAZobYBuQd85CkGrjd9oBmSE6AeicrUcLigJU+Tqyh0BicJrtJUs6zLcsoPZh1N4LAeRgMmoYQh0xEiBew09sUgN8O2wn7D2xZKUGhwBgMXRxgqV5glQURDq0GNAwjeVtOWTAw=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=Y6GeaPf/; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777991314;\n\tbh=3CYu/nGSgQGBuqnz2Dwr8lbzgdlgelmyYppWDzvi27M=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Y6GeaPf/2D48V/BEH07sJpA+gXuQuG/EwI8R1FF4MpH6+Tz5H3lYJN/rVhyHwbQuN\n\t 6cux5ndo+tIbQ+0zfjq6m/8nU7uZ0wEMoc0mlaf5epx/wB9rHXN9xvrdNL1B4UsU5g\n\t uY787lgyhPTYCziEY2TDiJe+VhNpYCdmuVEogJ0S+BZZvfyE4z0IuN+pgvGnUw7X7y\n\t dQ/Km0yEri/1muADWoOVeQWTBAqQmhzvfwzNyDcQKDgcflmiAbLFKgd0sZoFABLrJq\n\t jD357fUkiGff7gS2YuiR17yt0UmxjJPD+ac3QVsHrv097tDi/H3OswwmGaT+CuiZwr\n\t yYXKSeK5eTJIg==","From":"Johan Hovold <johan@kernel.org>","To":"Wolfram Sang <wsa+renesas@sang-engineering.com>","Cc":"Andi Shyti <andi.shyti@kernel.org>,\n\tlinux-i2c@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tJohan Hovold <johan@kernel.org>,\n\tstable@vger.kernel.org","Subject":"[PATCH 5/8] i2c: core: fix adapter registration race","Date":"Tue,  5 May 2026 16:25:44 +0200","Message-ID":"<20260505142547.795054-6-johan@kernel.org>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260505142547.795054-1-johan@kernel.org>","References":"<20260505142547.795054-1-johan@kernel.org>","Precedence":"bulk","X-Mailing-List":"linux-i2c@vger.kernel.org","List-Id":"<linux-i2c.vger.kernel.org>","List-Subscribe":"<mailto:linux-i2c+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-i2c+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit"},"content":"Adapters can be looked up based on their id using i2c_get_adapter()\nwhich takes a reference to the embedded struct device.\n\nMake sure that the adapter (including its struct device) has been\ninitialised before adding it to the IDR to avoid accessing uninitialised\ndata which could, for example, lead to NULL-pointer dereferences or\nuse-after-free.\n\nFixes: 6e13e6418418 (\"i2c: Add i2c_add_numbered_adapter()\")\nCc: stable@vger.kernel.org\t# 2.6.22\nSigned-off-by: Johan Hovold <johan@kernel.org>\n---\n drivers/i2c/i2c-core-base.c | 8 ++++++--\n 1 file changed, 6 insertions(+), 2 deletions(-)","diff":"diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c\nindex 31f7d43e4ab5..be909d6bc776 100644\n--- a/drivers/i2c/i2c-core-base.c\n+++ b/drivers/i2c/i2c-core-base.c\n@@ -1587,6 +1587,10 @@ static int i2c_register_adapter(struct i2c_adapter *adap)\n \tif (res)\n \t\tgoto out_reg;\n \n+\tmutex_lock(&core_lock);\n+\tidr_replace(&i2c_adapter_idr, adap, adap->nr);\n+\tmutex_unlock(&core_lock);\n+\n \tdev_dbg(&adap->dev, \"adapter [%s] registered\\n\", adap->name);\n \n \t/* create pre-declared device nodes */\n@@ -1633,7 +1637,7 @@ static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)\n \tint id;\n \n \tmutex_lock(&core_lock);\n-\tid = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL);\n+\tid = idr_alloc(&i2c_adapter_idr, NULL, adap->nr, adap->nr + 1, GFP_KERNEL);\n \tmutex_unlock(&core_lock);\n \tif (WARN(id < 0, \"couldn't get idr\"))\n \t\treturn id == -ENOSPC ? -EBUSY : id;\n@@ -1667,7 +1671,7 @@ int i2c_add_adapter(struct i2c_adapter *adapter)\n \t}\n \n \tmutex_lock(&core_lock);\n-\tid = idr_alloc(&i2c_adapter_idr, adapter,\n+\tid = idr_alloc(&i2c_adapter_idr, NULL,\n \t\t       __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);\n \tmutex_unlock(&core_lock);\n \tif (WARN(id < 0, \"couldn't get idr\"))\n","prefixes":["5/8"]}