From nobody Wed Jun 17 04:15:33 2026 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (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 BD63E279DC2 for ; Tue, 28 Apr 2026 07:07:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777360070; cv=none; b=OVySPAmxsrDHYUhcOvtqNa2G5W6xdZQsFYCdbyPkl3ESQ6MAf2QHr8JM36oGpYB2QcwLvJrrU6dpNBpFT1tdY+mVWbtgaqqdPNijHlJvPqPvJW0OqjvusOL1rxf+57RyTQs7ziALPLLwCBuOpAjr9UzwEWW6BLNkYlRZQFIVZIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777360070; c=relaxed/simple; bh=3qaWLRrK13lySvvQtDaRu4icofV0klbNEnYkK5PoagU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=dqEuk2Uxg198vZqh7RhXogK+rVyyL/vNdYNFLFemdzdksfjKfJQEJ9Qvg614vCP5TZmpPR9zgjykQA9DqiSOfsuAmkPHR6gvhgK/6s7yV7HnZ/Ygd/4AjuMxQsmKb3uJJyRcFh0yM+fE6sZ76whzfQHUyiTPkFwanIss3jfvKKk= 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=oEt5zSXA; arc=none smtp.client-ip=209.85.210.179 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="oEt5zSXA" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-82ce2e2880cso7661611b3a.0 for ; Tue, 28 Apr 2026 00:07:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777360068; x=1777964868; 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=2j/sRizJKN30TvT9iyb4DM4Q5nnqFSUzdz0sb2qVCcI=; b=oEt5zSXAuw6XeIaAAl/CS3nijwUhbPkVJAuKDAQpiXs5n9f7hNMRHzOxHetx7QvSxp Aq/sTsMiFM6WwHT4KuG4eF653i8zdHwgAi8ZkwRPzedYdHwSdWLXL9ayhkb3RChFw4zS evbv7vP07rkvFjn9SCAYE6Sa15/E6vyw7VXBqOSDf2karjWzjzJBAkUCyYP409nfD4AL 1odhpeTCba+vARLiuCAcM/RSJ3aDyDecuuQR+Ua5Id18NMEaD3TQxIOlrh9If1adwT7s 95DpE5orqgHnNcdlyec9Yu/TYk/f/1lvbl0eF8HJ7jtZpJjZo+VVuYST4ZSKUBXp8vev XFzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777360068; x=1777964868; 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=2j/sRizJKN30TvT9iyb4DM4Q5nnqFSUzdz0sb2qVCcI=; b=Z3WMaYDRV0pIwz6BHTA9nwMHQi2EG0oDyJrG6P0F8EGd/tVkRUwlsjXuRGCLraMq1I 01LNlkS9RDD3xBtlFERwTrJROx4fgBsT0dtdsJwh7YnKbhVHyhh04/a06eLdVYiyg9Rp tdv0/TP/VwoIwKpzwh1pZUaaNjuMNxqlylZmkAFZbzangri16EpaVUWZC27cd6UQVmCs EvizOm/lXMjWbAJG4hXSUptcWvPCTycb8v3UCYH2R59qT8Dmt2uGKfbeV0KmPJ9jCkBa PwABXwwzeTDkTu7EvjCCyCggbbyz51IZ1ilVUqW0RdBGkY+9Lm+GcNudgY9a8p80zxwS NGfA== X-Gm-Message-State: AOJu0YzSIIHtR/TqyQL5DLzR8xPJavB9l5Hjwqxr1t0TOxdVkiDXh6QR ia0QWjMG+OfaHBiJGquXYQjvh7hBa+SBKmK2ZAbm8dOdhO5U27k7HMY= X-Gm-Gg: AeBDietZl/1Ib30dz1/nIwCsaqfDGKK1A2TS101iLJYpgfqorovOU9DWc3HN/V5Lsau yfug+47Vqf8exL5Bll7vLjVM+rGVBG5iitd7WEWBjLi7niuBAHm2Zwycx9iymkftGy3T5TLGJnE T0Zv0L/9mSRyEPAabwrS36SWMsmTj0+HeE9Q6Zvg+cFf3cHWR3rezYKeO4gl8PWbNky6r5EZZpp imd9vJl6339A/9sgz8vFrkg895f9ByttL/0/urKmrE8HbaY2BNICPM5tVQHpS5wXH4kqzekDR8B TabVV0fBtr9lk7eUVMX5DaQcXcorXFAhOrYLLoZ4x9P/UX6GQUwACiDV+tMJZZkKCq9wfvGlzqY cEGQBLWV6X+lf9iByarTC2sGJMAL7r2vKHcje35zgPxc5x6AJRmY2bIgZX6mreBl0prv7Y0N/OX +0PI9VM1uuK0hXCI3JugNI5lDMWHt7vVAqv/Jhd5JiEqYNIiQMooKD5gjT3f64Uymu/XyAwAU9v 4QZ/CE2W8+NzV7rcnvj4uhyx00i8druE0YjM9Pl+JKR+wI70jlj6OyiVQ== X-Received: by 2002:a05:6a00:990:b0:82f:42bc:3386 with SMTP id d2e1a72fcca58-834ddb4a92emr1906959b3a.21.1777360068079; Tue, 28 Apr 2026 00:07:48 -0700 (PDT) Received: from localhost.localdomain ([1.226.165.54]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834dae2027bsm1745248b3a.16.2026.04.28.00.07.45 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 28 Apr 2026 00:07:47 -0700 (PDT) From: "=?UTF-8?q?=EB=B0=95=EB=AA=85=ED=9B=88?=" X-Google-Original-From: =?UTF-8?q?=EB=B0=95=EB=AA=85=ED=9B=88?= To: Greg Kroah-Hartman , Jiri Slaby Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Ijae Kim , Myeonghun Pak Subject: [PATCH] serial: max3100: unwind port allocation on add failure Date: Tue, 28 Apr 2026 16:07:27 +0900 Message-ID: <20260428070742.40072-1-pakmyeonghun@bagmyeonghun-ui-MacBookPro.local> X-Mailer: git-send-email 2.47.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" From: Myeonghun Pak max3100_probe() reports errors from uart_add_one_port(), but then continues initialization and returns success. The device is left with per-port state in max3100s[] even though serial core did not add the port. Return the uart_add_one_port() error instead. Free the per-port state and, when no other chips remain, unregister the UART driver that probe registered. Fixes: 7831d56b0a35 ("tty: MAX3100") Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- drivers/tty/serial/max3100.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c index 475b0a6efc..83a9db1819 100644 --- a/drivers/tty/serial/max3100.c +++ b/drivers/tty/serial/max3100.c @@ -732,13 +732,31 @@ static int max3100_probe(struct spi_device *spi) device_property_read_u32(dev, "clock-frequency", &max3100s[i]->port.uartc= lk); =20 retval =3D uart_add_one_port(&max3100_uart_driver, &max3100s[i]->port); - if (retval < 0) + if (retval < 0) { dev_err_probe(dev, retval, "uart_add_one_port failed for line %d\n", i); + goto err_free_port; + } =20 /* set shutdown mode to save power. Will be woken-up on open */ max3100_sr(max3100s[i], MAX3100_WC | MAX3100_SHDN, &rx); mutex_unlock(&max3100s_lock); return 0; + +err_free_port: + kfree(max3100s[i]); + max3100s[i] =3D NULL; + + for (i =3D 0; i < MAX_MAX3100; i++) + if (max3100s[i]) + break; + + if (i =3D=3D MAX_MAX3100) { + uart_unregister_driver(&max3100_uart_driver); + uart_driver_registered =3D 0; + } + + mutex_unlock(&max3100s_lock); + return retval; } =20 static void max3100_remove(struct spi_device *spi) --=20 2.50.1