From patchwork Thu Aug 29 21:14:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13783902 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11013059.outbound.protection.outlook.com [52.101.67.59]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10DE21BA286 for ; Thu, 29 Aug 2024 21:15:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.67.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724966129; cv=fail; b=nh5WIeakMe2YXK+5u6cKHduLawf3WLHEs/JxZd2bI1bycXY6wEngZQn5HwRn6NvmviOWRlYts6Ea7pawuKwRAeF/tUYRBmD4bAQtMz5+tulB4HAOqsQCvNrSFsJ32iJ+aFlrB/v8/VUyY3GsN3Ii56pDKO1AJTNPYrkpp6xLFrE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724966129; c=relaxed/simple; bh=AHcqgly/vmoU+jJ+4HNr0fpgvCz9aPVFw5NId2LgYsM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pivVC29zJDKl4b65FAhrXf/ZHIhgzMCSUh9ZMD9/uRpVQVL7rUJF3FLlMiDsXSOJ5qiY8tVr3N4bBuNYara3nPWFcLhhamYbXhhdX2sNuqiNAtuvaIgvWhaMatroXDS5nBscHBN9mEQLz4uGcPTvs5pAsA1HVrQYFsZxDP0a0+0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Eyn0RUq5; arc=fail smtp.client-ip=52.101.67.59 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Eyn0RUq5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZwxaHeP3MN9BaWjLwO61fPQMynQEQKOlRf8rRmHosmxtWF2oudyvDE+WcOEbjjDpQ7PGi4AZrDiGrAxiC0PZc2vwDkdolFhR09f0KbcUBSNIuih8yK4f4x2ssarA0w9v57oHM3SPZLDIcEvr56apXMyW3OwUOcxFLGHpQ2j7fWQUl4IA9sQ7ux4DOtDhbk5lXabMOMV35Tk7nvOE6Z21pia0WFbZy8hF9Vh8Y2wWi4Tqzsr+B5EsVBjMsZ4GhnN6Cc4Mq43BiEHql5AhA6iHDByFbb6QOAkM48vzqUiqtpXRpFQs4hyIFbr4lTx4IHAKC2rmIEAqh3W81hKx24jDtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=l+wM5XFFRbRdoH83tWAzH9EHEDGwXzNFWdNBvKh93EY=; b=sAxTnOIR0/Tc0Abp/IDfQI4nYm4eVEZl+oHhkQAUCB5xQ2BFBuI0osMScw90ppBigPtDb0doav1bYchbsxO2KI90zTn5RgPEdVhrtMAX9K0SN9czlGJiDESSc7zby7kBb34Ojhb6XszdQZbGsZdxupdGvwWAfdr3wYDZmSkG5ye8L5+4fzux9e8P1XvXqYVlOFt7Wnzw/i/2+QzHCzD48FdlJ2hT4gUUEjWq2gOtESio68NIJqX7IC9K293D88UyS4Qo9mg5EzixDWbjxsiOzusEuJGsBXOwovJyAPtU1pCNOc8EHjYxbqlHbg14qO4Tnjf2VGmO1hHk2j0ZWdHc9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=l+wM5XFFRbRdoH83tWAzH9EHEDGwXzNFWdNBvKh93EY=; b=Eyn0RUq59+ydzykMiopNsweBdpst1oMq5T/MQKL46/pDnEcfx7w2MR0I/9NHu+bhkDc0iruNTwRyZZ5+QGq8qcVh19fRqxfA84Sjq7jxdyD7JPkD/eLrIJvTWuKPjvEicy+dy3KlEbJ+1AtJ0OULS7dTbzLtWhHpRVI6pBdITrHsMDGqc2eIADfDpmRHNMgDC1S7lA6JaZ9eCCUUBZqxOD48le7B8u20i09cu7EZCLLFerpGBZM+CYdMBmP95GY/Qr+Ff4x9cHtJDmvcClA9UCBHlzBKWBxrmgRCA2prWM6W1tmFnoUXOOzVkmNwqcHKdfEvTxcJ6CkK0bJFfGTw0Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by AM9PR04MB8971.eurprd04.prod.outlook.com (2603:10a6:20b:40a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.20; Thu, 29 Aug 2024 21:15:21 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%4]) with mapi id 15.20.7897.027; Thu, 29 Aug 2024 21:15:21 +0000 From: Frank Li Date: Thu, 29 Aug 2024 17:14:08 -0400 Subject: [PATCH v4 11/11] i3c: master: svc: fix possible assignment of the same address to two devices Message-Id: <20240829-i3c_fix-v4-11-ebcbd5efceba@nxp.com> References: <20240829-i3c_fix-v4-0-ebcbd5efceba@nxp.com> In-Reply-To: <20240829-i3c_fix-v4-0-ebcbd5efceba@nxp.com> To: Alexandre Belloni , Boris Brezillon , Parshuram Thombare , Greg Kroah-Hartman , Boris Brezillon , Arnd Bergmann , Miquel Raynal , Conor Culhane Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, Frank Li , stable@kernel.org X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1724966083; l=3184; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=AHcqgly/vmoU+jJ+4HNr0fpgvCz9aPVFw5NId2LgYsM=; b=0VnkJGxAJrsl06sm4Q7m0MJStVDIHL9X8VwXMfWEyiHZdMs19KXgj9cBZzvu/mZoO7o/agbna XxpkRjLB24PBzgJjoLbfBoLT7OIc77CR44IMpbqnnM3g7Vectva8HmV X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0219.namprd13.prod.outlook.com (2603:10b6:a03:2c1::14) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM9PR04MB8971:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a6b77b2-82e0-44f9-a876-08dcc86fb119 X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|7416014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?CzncPul0yZP67tcmXqiDSkGZ4q4HPRY?= =?utf-8?q?mEwtYTFt9+J1krLHsSKQpQXs3GnvTmBaC+kkAGWXAiYWPXUZaNCsj76u3pKEKbJ3Z?= =?utf-8?q?3aLo4nhvJh/2zUU5TA145Lu1ffeBGhpgUzT67ewhOLD5npcbYP5vIKHN4ObCaw9Oo?= =?utf-8?q?AUkv6CdUVQGvhypjyza6bjdQgMMH0fOOW2zMfVL271hpOdDlgRoA5tR2yp1NhZ85j?= =?utf-8?q?LyXYBFfc1bb3SKDZuvvx5Ly+ODujidI7mlhiWj7KznjBt5xVZqYhQqV3YJGAvNo+4?= =?utf-8?q?NDLo8d4FFzU2aK3HSsHvevC1zILix3US1BYvy1knsbcszeZQLdQx7kVFIqmhFw5NQ?= =?utf-8?q?GvXX0pBS1KoNRxRtO6KylvZyTMDhoalDfRchZ+KwDorZ7i792DX8rXLJi7AaLVFXU?= =?utf-8?q?Ww5xT5oorrU84H0Ar9fkCLmnRxjg7Fd93jeOTdU9hhoFUTv1ISG8s8x/R0egScONl?= =?utf-8?q?cNKhMgD4WnxLPrcxjvcwtmTxwGMNEKbiueEDdQfLGD/po5BGLoQIzvLeoNVGMTMYL?= =?utf-8?q?YqtSsnW1EetRKHnHMNYzI0vJAgrLtvD5/+Tb6FFSmJ7MA0+wKThZGMdj5tdYWMtgG?= =?utf-8?q?Hgsi2/bcaYmFNy8+F2bm16mJ+kqfGL9TF8lfeOiMn+n/NwU/O3C/V6r2znmiFfCcz?= =?utf-8?q?ODNEHrjYeypm/1daiozCKh/RPNduW76K5pHuQ97C+QFFnw8FB67KQhWWeIgkPZiE+?= =?utf-8?q?JBfBRsNCtNNyYmQ9+6dvpVj9ffLn660/GhNqD3OQEeiIzOUsO2x+Bz3+D3UQ0jm4s?= =?utf-8?q?O0znm0pLfUHeyr92VNCWEkG7sV94La2NZyg/msY+fZN7HeyA8XgTRLtrb490ydxai?= =?utf-8?q?EA/uic3RTxXc7IdgG6MBZ84XELsQyXXu71uLiF9dQfPIhWohVpeU2UIvWzc1qKPzC?= =?utf-8?q?VGJF5UZUqdbfvQiJJl9UHpb0YuqoJ0CgsOO5MDzoqJX2tx6BOKPhexquw1X4YJS40?= =?utf-8?q?mzg28MScne2H9QBHVgxrmTZfHmGhEpNlSs3j8k6OjD4bSp5FI1UvyD6CHatGPw8o5?= =?utf-8?q?Rr2sdS0KOyM4S+FVLRKbWLifAtLpwglNrDBvb/NF7CpD0rIsYzVTlZsAqmQgWO1KZ?= =?utf-8?q?TISe44NgrDF+OixPy67yLAd41A9YNUR5bPykJUR9xT4/yOYSCfVWMEfWGxQ17Hnuw?= =?utf-8?q?gsHSyr0nrT76r5fnzkwF1cAihv5Jcoymp6YSdoyYREF47QRzU7/x4NE17CNtsFm25?= =?utf-8?q?f5I8aoUV7Dtst1fr+xMukk0WGtevdN1n3IY3c4etnXq6WqlwcDwZPx8zXOIc40QYK?= =?utf-8?q?rtlHK/hAhRrXGE3T4k4eefk78gVYIuG1dGsBYoATQmTp0QZj0X+7lTwmDVjyxiTGE?= =?utf-8?q?I/xyFttxIYscDbFSwdGw0VTRBH7O6tsKeg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(52116014)(7416014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?e5Mi46ZuIVgbF8bywXyqyKavdtrx?= =?utf-8?q?A83cNA2F2Z4ETRzoAUyX8Tp3fOYoWLo/wlFBmD+SBSxkUfiRU8cIeNkYS8CLEZMrX?= =?utf-8?q?DJOKgdTAN2aInGTy7OLv4q5qY7eajs/28opS2SMPiGOzc7sw4dgfVQelYV2CCH9SP?= =?utf-8?q?6KQq5ghboWF9TUGcTzYgkyeiuAOkCA+a/BpGoVnaem3TCa6t4jGq2CoeSvJ+U13bk?= =?utf-8?q?g/vjv8HgqDqnPrGDzArEmbaesMh/26PBcqWsZ6ELukEOVOzu4IK8UrQWRqoUx5gss?= =?utf-8?q?Z64cZXHTiIp6kyqX7TyWDc6VVxt9hRSDRhlIKV/TS1Np9wQNIynJ0fAaNTNa8fLre?= =?utf-8?q?Gv7eVi2jmombb4bArm9JXugtAbYZQrn2mOSx7JBqV3YUzQuVtRV7i//EHtg+o6K+d?= =?utf-8?q?N+Sk6AqUQ8n5YIkrWYfqOOWgptE08pG2wcUxDaE9iTw7PCeXGYzU0umROj1Nfjp4e?= =?utf-8?q?W5KN2FthQYZ2Nc0pxSpCO4fWeaQ6UFpRRp/cXopd+r61RKohFR9TtT45CGQIV7X5A?= =?utf-8?q?qG9pF6TTH7PP7f7WIFqxeielQTiLeAhMyyeZu2rzod48vCoKyukMDOpAOMjhJw+bh?= =?utf-8?q?Y+Cr5XtnArQ6Bjk7IGUE1Nt6IzaHaHLxLFt+7gPjecRQ3cK5uQGVnHuF2oOBHiMpr?= =?utf-8?q?d+2BfZNnm+Q3+z1v4YBWO4whAFyVTczc64TpWdfamUwLXPykcQy6GqOcBcQY0eDaD?= =?utf-8?q?Lajc1J8B8kvJqbgLWAKhUN8/F3GW/X+ucNGhw3fpVUtw/mL29IwnYQjaG5HykYWG/?= =?utf-8?q?ciuLiqi1XM7ridfjeGvXtp9/gnTgkd+I4NNGinZ5knOWJ92bWiWl+D65p1NOMzZzV?= =?utf-8?q?zrKYq2MLyBrEgQxqzFjrmS7pFRGUa6bAnJcICAb8kknjV4c9LoNVI/sBRYpgRW2YQ?= =?utf-8?q?07ig5bg5ZEC8jbXz7sg+TlknHshBitV6aAXR2XE5IUBRleun1MJ6fF+d0cX62i9Qx?= =?utf-8?q?9JS3kP3JpK/g7wiwadOFYzeehbyVTqmDmOdpbcTjtxJBvcLlC/UKhy10NKLZx7b2p?= =?utf-8?q?vgsQ5qMYNM1nGLLq6Em1jiYSDXPyhdXgzs0xt729l2yJ6/NT593Gpe6JKY0f4Siim?= =?utf-8?q?oxESaSlbX/mv/OU/Q75rG84NFI81B+7Jh7xKnz9WUX5HL2auixSn2JAemFEYRiP0y?= =?utf-8?q?PlVfYrNo//i2n45j4jOrPeHyud3LK4ksB0YfYiCdXNbm9UuSkGnUlBm75QbhQAZAC?= =?utf-8?q?mk2cfFCRkurTkZ4shzrPtybnS8McNkqTee4k+rVD3+zZOfzS6/IRfDwmSdbaXXydj?= =?utf-8?q?yQfUMwZBOZ69jB9YmuLDfITFN/FbK+zbzYjovT3Dvat3E8tbH+40k2ZQuUec5i6Q7?= =?utf-8?q?7HhJPIyZBIs4a767z2/yOeJRtMJlkTUHTxtBMQynWdeXFRcac6nIelftsA7N/cxZ9?= =?utf-8?q?iEQG//XrGcZV1LyoybYHIGHHsZ7dGpZvmoL1Gimhb3NYBIu/czvw4uZRD9YAxlEsK?= =?utf-8?q?6yNKI3IbgXLgRvoSybk6chKgTRseEgoD/czce69rd8pwlx3qSB5/a50oUXWiriox5?= =?utf-8?q?AQStUOhCk1OY?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a6b77b2-82e0-44f9-a876-08dcc86fb119 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Aug 2024 21:15:21.9011 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dQk4Ej28I1weAx7kZza93Ulc0FGfZTaPPfh+f2m/0wC64762D/vT5la70piuHZ9hNO/hcsJSet30MpGBDitU6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8971 svc_i3c_master_do_daa() { ... for (i = 0; i < dev_nb; i++) { ret = i3c_master_add_i3c_dev_locked(m, addrs[i]); if (ret) goto rpm_out; } } If two devices (A and B) are detected in DAA and address 0xa is assigned to device A and 0xb to device B, a failure in i3c_master_add_i3c_dev_locked() for device A (addr: 0xa) could prevent device B (addr: 0xb) from being registered on the bus. The I3C stack might still consider 0xb a free address. If a subsequent Hotjoin occurs, 0xb might be assigned to Device A, causing both devices A and B to use the same address 0xb, violating the I3C specification. The return value for i3c_master_add_i3c_dev_locked() should not be checked because subsequent steps will scan the entire I3C bus, independent of whether i3c_master_add_i3c_dev_locked() returns success. If device A registration fails, there is still a chance to register device B. i3c_master_add_i3c_dev_locked() can reset DAA if a failure occurs while retrieving device information. Cc: stable@kernel.org Fixes: 317bacf960a4 ("i3c: master: add enable(disable) hot join in sys entry") Reviewed-by: Miquel Raynal Signed-off-by: Frank Li --- change from v3 to v4 - add comments about not check return value - add miquel's review tag --- drivers/i3c/master/svc-i3c-master.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 83b2943074866..a520f5482b592 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -1039,12 +1039,27 @@ static int svc_i3c_master_do_daa(struct i3c_master_controller *m) if (ret) goto rpm_out; - /* Register all devices who participated to the core */ - for (i = 0; i < dev_nb; i++) { - ret = i3c_master_add_i3c_dev_locked(m, addrs[i]); - if (ret) - goto rpm_out; - } + /* + * Register all devices who participated to the core + * + * If two devices (A and B) are detected in DAA and address 0xa is assigned to + * device A and 0xb to device B, a failure in i3c_master_add_i3c_dev_locked() + * for device A (addr: 0xa) could prevent device B (addr: 0xb) from being + * registered on the bus. The I3C stack might still consider 0xb a free + * address. If a subsequent Hotjoin occurs, 0xb might be assigned to Device A, + * causing both devices A and B to use the same address 0xb, violating the I3C + * specification. + * + * The return value for i3c_master_add_i3c_dev_locked() should not be checked + * because subsequent steps will scan the entire I3C bus, independent of + * whether i3c_master_add_i3c_dev_locked() returns success. + * + * If device A registration fails, there is still a chance to register device + * B. i3c_master_add_i3c_dev_locked() can reset DAA if a failure occurs while + * retrieving device information. + */ + for (i = 0; i < dev_nb; i++) + i3c_master_add_i3c_dev_locked(m, addrs[i]); /* Configure IBI auto-rules */ ret = svc_i3c_update_ibirules(master);