[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 6/7] xen/serial: harden serial_tx_buffer checks
- To: xen-devel@xxxxxxxxxxxxxxxxxxxx
- From: dmukhin@xxxxxxxx
- Date: Mon, 27 Jul 2026 23:50:48 -0700
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 148.163.138.245) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=ford.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ford.com; dkim=pass (signature was verified) header.d=saarlouis.ford.com; dkim=pass (signature was verified) header.d=ford.com; arc=none (0)
- 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=oOT85RKKWjGhkhbuQtaAN75IZgB45d1wpAc2pCHqaKk=; b=LB7EPdQMb1U9WZxmjYFsOe4cvvnEVj/cB/XXi9ZXDoe+O1vy4Vy3Mo6g4pUtPQNad5ZTJ2cyWubZF/8rtWIT1oq6/PmIKX6VcerQsCaYHOLqt9Y21NUyFYdmjOnBryBmzlOjT9sNL7PHN/Ey1TL8Jzxt4AMBwxgEy9sMvQbU6ttwtRgfGhZPt5zYyARuZtHcAitXusmYTQQzp+cXtItdX82Pck32wCa9x09G6lwZTwH8uV8B/ni8MYlx8g4P6fRlbSl1U/uYnFtvLt7V/ptRb465KkIWuQwaPPFGcc0CgmVfhFOgL8bgwHro4VN8jnxO+V5Qr+ql2AFKj+DSc2UIbA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KxJjirFVZqA2udzz/dsgxCV72Mph1aCsz8aCKLe3LnlfyHpYNSPavfrDcRHGP8QcdV3ji8K45SSjlWoBqR2GQu9wG78BaJ7V3omMECAT1/xK4ydIfN9C4BBOL3eK6eqwhisrKIqiDXy8nOKpqAQbeLUdtEqlhsivbpaLnRGrr2WIt5ktsh0icmRMH7C5ExtyH/f5cCln+dIAtaDf/iZqq5ZVuMK1Vs0Y84P8/18S+Wf+Mq4tCSagy3jt97yxr8qhOlB3rQ+Tunn9azuwEzPtOD9mqXOBbR0+0cZm3UMwZDwPOz4vfxAR0Hkv2nArgMfeDFOr5qcPPw9OtcIXp1bGuA==
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=ppford header.d=ford.com header.i="@ford.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=selector2-azureford-onmicrosoft-com header.d=azureford.onmicrosoft.com header.i="@azureford.onmicrosoft.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=ppserprodsaar header.d=saarlouis.ford.com header.i="@saarlouis.ford.com" header.h="Cc:Content-Transfer-Encoding:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=ppfserpocford header.d=ford.com header.i="@ford.com" header.h="Cc:Content-Transfer-Encoding:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"
- Cc: andrew.cooper3@xxxxxxxxxx, anthony.perard@xxxxxxxxxx, jbeulich@xxxxxxxx, julien@xxxxxxx, michal.orzel@xxxxxxx, roger.pau@xxxxxxxxxx, sstabellini@xxxxxxxxxx, dmukhin@xxxxxxxx
- Delivery-date: Tue, 28 Jul 2026 06:51:42 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Pser-m365-app: SER-APP
From: Denis Mukhin <dmukhin@xxxxxxxx>
Ensure the user-defined value never crosses 2GB boundary and always
rounded to the next power of 2 to align logic with console driver
conring buffer management code.
Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
---
Changes since v7:
- addressed Jan's feedback:
https://lore.kernel.org/xen-devel/89029dbd-df1f-45d4-8a02-720cd6a42cab@xxxxxxxx/
- kept only check for large buffer in serial_async_transmit()
and a doc update.
---
docs/misc/xen-command-line.pandoc | 2 ++
xen/drivers/char/serial.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/docs/misc/xen-command-line.pandoc
b/docs/misc/xen-command-line.pandoc
index 1c711fa98086..2be8772b329a 100644
--- a/docs/misc/xen-command-line.pandoc
+++ b/docs/misc/xen-command-line.pandoc
@@ -2396,6 +2396,8 @@ accidentally leaking secrets by releasing pages without
proper sanitization.
Set the serial transmit buffer size.
+The value provided will be rounded down to the nearest power of 2.
+
### serrors (ARM)
> `= diverse | panic`
diff --git a/xen/drivers/char/serial.c b/xen/drivers/char/serial.c
index cf0abf1893e5..ba1647309ab8 100644
--- a/xen/drivers/char/serial.c
+++ b/xen/drivers/char/serial.c
@@ -523,6 +523,8 @@ void __init serial_async_transmit(struct serial_port *port)
return;
if ( serial_txbufsz < PAGE_SIZE )
serial_txbufsz = PAGE_SIZE;
+ if ( serial_txbufsz > GB(2) )
+ serial_txbufsz = CONFIG_SERIAL_TX_BUFSIZE;
while ( serial_txbufsz & (serial_txbufsz - 1) )
serial_txbufsz &= serial_txbufsz - 1;
port->txbuf = xvmalloc_array(char, serial_txbufsz);
--
2.54.0
|