From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) (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 A17FB3F6C25 for ; Wed, 27 May 2026 11:28:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.9 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779881296; cv=none; b=aFjrUrw1jrvrzhVsCcQ4m1uEKrYBOA5PqzLKwAvFDjxj3fUZIjB2buZOPEGoWP57kmi4mJdj0LyM6dUMEU9SDXYlwIiL8bEa0N6O5DbYBaUFjbdIK4KY6iJvGb/PFUOw3BtbEiu2i9+7Halt1lvYGkLEsusHPSxd6l8PpAurkUw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779881296; c=relaxed/simple; bh=k6p0xK704uGOe3/KyowiZtFfm7nEdmde+AjkTtVBzWE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=vBeg31Rac21E/BJ/2iQ6yYpNnI0yhjkIOhFiT23M7JhZXrXI96Jq9KewHmLYVxCqIGHfgnayjBI3NKkikz3f6l3nEQdT/NocgQp8gsr3WKqqCf4wYzxtsVf/B7S/34IWvgklOughcuwvR3/Nc2pnq1kagrX4NBsConHe9tYvQbw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=VAHDBtC1; arc=none smtp.client-ip=198.175.65.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="VAHDBtC1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1779881296; x=1811417296; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=k6p0xK704uGOe3/KyowiZtFfm7nEdmde+AjkTtVBzWE=; b=VAHDBtC1hox5BdA1zN2kvjXtAdl0/RhNL2La3OVy6zRdz5wOBU1rn42r UlRpvoVW+DBWISy1rHq6Q4/y4GyEBAYKh8bCaPxMS3SqlKhSoTTzudaOL aaYa1z2UUe4kZot31tWngdzK2YhBsLGCH7Ishu2KA14kOO1FDz4MnEeys UO7Mr7lXd2+D5LD/w72RM4xKLcO9nuK0hIN0y4U30oqo2vsGcs3he0mG8 gAR6CEcGDg4UiiLexugqzkNi7EGLWohYZgZdd0Yd+5RRO2QtIpV9uHiBK CIdI3LRAqkTvWdtSZD0zDhHFV6eJNHy5UI+34MWucelx/C7QCOdBOG4uw A==; X-CSE-ConnectionGUID: g2UvuE+KSI2/c8mD4yTEfA== X-CSE-MsgGUID: 2VUbIO7/Rn6zW7qsKhZAoA== X-IronPort-AV: E=McAfee;i="6800,10657,11798"; a="103381715" X-IronPort-AV: E=Sophos;i="6.24,171,1774335600"; d="scan'208";a="103381715" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 May 2026 04:28:15 -0700 X-CSE-ConnectionGUID: C/YsFEH1TeilFsWxfzLWcg== X-CSE-MsgGUID: 9IISkzPOSS6iIUmeALVCAQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,171,1774335600"; d="scan'208";a="246238613" Received: from smoticic-mobl1.ger.corp.intel.com (HELO ahunter6-desk) ([10.245.244.228]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 May 2026 04:28:14 -0700 From: Adrian Hunter To: alexandre.belloni@bootlin.com Cc: Frank.Li@nxp.com, linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/7] i3c: master: Prevent reuse of dynamic address on device add failure Date: Wed, 27 May 2026 14:27:54 +0300 Message-ID: <20260527112758.38530-4-adrian.hunter@intel.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260527112758.38530-1-adrian.hunter@intel.com> References: <20260527112758.38530-1-adrian.hunter@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: 8bit i3c_master_add_i3c_dev_locked() is called after a device has already been assigned a dynamic address. If the function fails, the address remains marked as free and may be reallocated to another device, leading to address conflicts on the bus. Mark the address as in use even on failure by updating the address slot state to prevent the address from being re-used. Emit an error message to inform of the failure. Signed-off-by: Adrian Hunter --- drivers/i3c/master.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index f87bf0099d3c..7820f58ab4aa 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -2345,12 +2345,9 @@ int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, bool enable_ibi = false; int ret; - if (!master) - return -EINVAL; - newdev = i3c_master_alloc_i3c_dev(master, &info); if (IS_ERR(newdev)) - return PTR_ERR(newdev); + goto err_prevent_addr_reuse; ret = i3c_master_attach_i3c_dev(master, newdev); if (ret) @@ -2472,6 +2469,14 @@ int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, err_free_dev: i3c_master_free_i3c_dev(newdev); +err_prevent_addr_reuse: + /* + * Although the device has not been added, the address has been + * assigned. Prevent the address from being used again. + */ + i3c_bus_set_addr_slot_status(&master->bus, addr, I3C_ADDR_SLOT_I3C_DEV); + dev_err(&master->dev, "Failed to add I3C device at address %u, error %d\n", addr, ret); + return ret; } EXPORT_SYMBOL_GPL(i3c_master_add_i3c_dev_locked); -- 2.51.0