From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (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 2D5443D6497 for ; Tue, 9 Jun 2026 08:45:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780994738; cv=none; b=BgN+EVg/SXBMuXO3J8MNc7QZCQDLImXADN9gsKa7VAXaJjnZaECViJGT3qH1E6VxzhXZOhMVBeE5jmJAbl7ybgFJTIJFx1wzhQNov6TKOHm07ANzFdSAb/PH9KNri4VL7eSpK/YVQ4n86XfkrKLacl/XixVzWXErP8dD80lIuPU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780994738; c=relaxed/simple; bh=nqXLEk6Rb2TNsf/WwovB1x5mfWIHQ0SFbCOZRW3avUU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QGwwyKpBIWTm5ABBvbozgLA+LsaIvr/l4SaOC7M73irs/Cs/OdSKwWikBWfmTFEMmB8YV/hiiXn6gWp0/Tqzwnh1IgTgrWEaiDT6a5NrEY5aWsRjiDvUFYZNFhEvDE/piYq9kT1OwpEaam19oeLiHpeJB9cn+yAUnj38aOhG5No= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=H6BV755B; arc=none smtp.client-ip=209.85.215.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H6BV755B" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-c86307c4e6bso670756a12.0 for ; Tue, 09 Jun 2026 01:45:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780994736; x=1781599536; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c61z23tDhGwGTfT6EkieyR0JW4w6MV+Sv05qJWF5n1s=; b=H6BV755BbR2cSn1Xq3XSUAXqLMFmeL+EczCsdCnXcUvsiqpTx3TqPeQVW1WBE/vX4I vTztWojnVyZR3ljLc7XeqgD7CqKVK3+OC3i9PrBdfymjz9Ho7G9kbB8/XzLjJSPNkj8B O6UfTmv/sYuLyq+axlMMOPz+EvrkVjqottnTPR7Wbdlk335KTIOeGIjeMm99XlkzUah6 lCLW/Rq6sQQmAGhB7MppX9iKsOSb5SS5bV4+2MDexgVXL1SR6jYLUCqC4mqv2lUTKt5I 5G3c33oS6/W/36eg/10jOZUfZ3I7/PXFXV2oZu5u7EYqTNNMd3W2xK35RYRIGoPbIosU YTJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780994736; x=1781599536; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=c61z23tDhGwGTfT6EkieyR0JW4w6MV+Sv05qJWF5n1s=; b=m4J/MwYeYc+kXbvXuxOHFjrBpwrOHMiq6SVGJCxSsgkPo4hXFIXe8J/+SToJQc1c3S fX1q6mmixANVjiLUgReHuKipl0P1Yld73h4abnYYa0NEWVCtBgsX6lRSyJQJ5m9n9NQH LCJ87Lii/6dcYM3DL9F7KN+mRtDd7sNfU8RSuQBHQENO5lqk6dJzSLBPFCORb1x8Xy5X oiA9mvNknLWyRWpbG3WcqMbiA4ezSYIbRGPRqaWlLrpQbQF7xfM+c69BAB4oGqUVmT4S n/YNNv2NIEZIElHtKzwpt9rnILkdQZhz0hhL7Czn74RNEnuhJIsK9HyXbWZPZzAWYbvR ng8w== X-Forwarded-Encrypted: i=1; AFNElJ+ZYjjFk9/YlJTthgZnIht4dI9zNzHhrjLGVkEU8ngbcXNNtv0+hBKLhMICr64/Yt5zFm9Pa4/Ea8ogstI=@vger.kernel.org X-Gm-Message-State: AOJu0YwjEQ/fe/GvQVyN1zE0+uZX7/hXwqABREQIcLaAPT14+1sDpLdW PVIYlxQU0hhQKkodu5I3Kw38F3sQp/gyXWW/aEu+raURmooueU6TDuVX X-Gm-Gg: Acq92OEJPPO9I7Sm9IE4Dx+G9nx9IYJlDUOnXo69T0M7JL6EEkyzjHkzWO1SQvM/wyL mBNl3yUo4lKJdflm0O3nE4f7rYT/ld2Rusriecbpzw4drAVccOtKWJZyhQ5hXuaVCEOmtj2F5h8 uuu1u23Ql+dJiMGIp2BKuoZ4FGqEhRiT9VdTU6vjmWZK8ENGEga1XuYKM7zVDq8rT5weLJSn8Uh oqyiOdxGXzZAxU0/kan2FUaeHgrzhnhuh1YPxbgRf2t4DKxWj3hKw9jnDV850c9A2sOntI4uY+e xKfElZu0jgkwAjRs0KDjb+tAd0LenNtDeQYcRqhJ19dsMgNI16/Cle7HJ3yGSg8/bzE9EBISv0m lh3iJC/PA5O7SbtGaCWeyCgolNlA1xl/MP4mWTvennGlBDur3YnLck87WXB5II7CnMhKi+Blqe1 OjDfoXh0efv6/I4ghwIQxLV9DU6V/+3+iMmacze/rp/d7Hmc/5TbQB5w== X-Received: by 2002:a05:6a21:1b8a:b0:3b4:669c:ee32 with SMTP id adf61e73a8af0-3b53beb5c12mr2707477637.37.1780994736430; Tue, 09 Jun 2026 01:45:36 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:37c9:44fa:729b:6aaa]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c85deeb2bdesm17608599a12.0.2026.06.09.01.45.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 01:45:36 -0700 (PDT) From: Ruoyu Wang To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Ruoyu Wang , stable@vger.kernel.org Subject: [PATCH v2 1/2] mtd: slram: remove failed entries from the device list Date: Tue, 9 Jun 2026 16:45:27 +0800 Message-ID: <20260609084528.5-2-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260609084528.5-1-ruoyuw560@gmail.com> References: <20260609084528.5-1-ruoyuw560@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit register_device() links a new slram_mtdlist entry before allocating all of the state needed by the entry. If a later allocation, memremap(), or mtd_device_register() fails, the partially initialized entry remains on the global list. A later cleanup can then dereference or free invalid state from that failed entry. Unwind the partially initialized entry and clear the list tail on each failure path after the entry has been linked. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org Signed-off-by: Ruoyu Wang --- drivers/mtd/devices/slram.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c index 69cb63d99f573..48c2bc6b65eec 100644 --- a/drivers/mtd/devices/slram.c +++ b/drivers/mtd/devices/slram.c @@ -129,6 +129,7 @@ static int slram_write(struct mtd_info *mtd, loff_t to, size_t len, static int register_device(char *name, unsigned long start, unsigned long length) { slram_mtd_list_t **curmtd; + int ret = -ENOMEM; curmtd = &slram_mtdlist; while (*curmtd) { @@ -155,14 +156,15 @@ static int register_device(char *name, unsigned long start, unsigned long length if (!(*curmtd)->mtdinfo) { E("slram: Cannot allocate new MTD device.\n"); - return(-ENOMEM); + goto err_free_list; } if (!(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start = memremap(start, length, MEMREMAP_WB | MEMREMAP_WT | MEMREMAP_WC))) { E("slram: memremap failed\n"); - return -EIO; + ret = -EIO; + goto err_free_priv; } ((slram_priv_t *)(*curmtd)->mtdinfo->priv)->end = ((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start + length; @@ -183,10 +185,8 @@ static int register_device(char *name, unsigned long start, unsigned long length if (mtd_device_register((*curmtd)->mtdinfo, NULL, 0)) { E("slram: Failed to register new device\n"); - memunmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start); - kfree((*curmtd)->mtdinfo->priv); - kfree((*curmtd)->mtdinfo); - return(-EAGAIN); + ret = -EAGAIN; + goto err_unmap; } T("slram: Registered device %s from %luKiB to %luKiB\n", name, (start / 1024), ((start + length) / 1024)); @@ -194,6 +194,16 @@ static int register_device(char *name, unsigned long start, unsigned long length ((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start, ((slram_priv_t *)(*curmtd)->mtdinfo->priv)->end); return(0); + +err_unmap: + memunmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start); +err_free_priv: + kfree((*curmtd)->mtdinfo->priv); +err_free_list: + kfree((*curmtd)->mtdinfo); + kfree(*curmtd); + *curmtd = NULL; + return ret; } static void unregister_devices(void) -- 2.51.0