[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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.