[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v7 6/7] xen/serial: harden serial_tx_buffer checks


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: dmukhin@xxxxxxxx
  • Date: Mon, 13 Jul 2026 11:16:18 -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=cyF5ugYOqwZ9hJzOD3szdmvtHv1xbZee9OgAzDKVR9Q=; b=vsH8Y2UIYnquAiwipbu6S0pfPHVge7c3qk9o6z+OIfXXH/UtIohV8bWcaFTZyHI6ph9PjwrZ4kjujdKOD5aefYUhldUKe3P4Y0LaThFtMB0cyFRIX6BZ8JD2DIJUIXJ0WdUCeYMMF68dcQJJcIH8xYlIFRI18jzDNDnG85rqFq2nYl0Se+1sVP8TweWne07i90sLIBxDIrRi7zEOkXjBPL1Wgro6+HGiJK76djC1UetASB147cAYsqlwfVlPu8XqjcEF15mZvqddACXT6Inl5koHlaZkJ6Ih1QYXRfIsaIrwfT52+KFqyZUwFg7WV+i4V6ViMLA8DXkvPXFyLVBp7g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BNjntrxchv5Z4vIZfEo9M2cXUKrFTVjr9uG2UBjqjXCXx4FzBfmoKjJ9CBab/vnDgBSFvTr2gmZjELm++/9s6MmW2ZN2h88HTM0hveMF9HyahnS/4mrPNa4FENHV/jICZ12D8pv91AbD51b7n0QiVWJvb1U326ec3g8PHJos7aNgjhTrDeh3im4sENPb+/gOtiDLC6G+P57ph2Ias3Tyxn50sqQ6hq8+qHl6D/pyfuVglTbzSsTgoruHvufZfrn62Y1cAy5lk+2qdU8WLTIxlbK1zsaSrtgYSYZCjdnJg8jH1cbIptPCETpqBg3vN8rPEDsG/G64uIiOzkHfg0I0sg==
  • 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: Mon, 13 Jul 2026 18:16:55 +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 with console driver conring
buffer management code.

Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
---
Changes since v6:
- new patch
---
 docs/misc/xen-command-line.pandoc |  2 ++
 xen/drivers/char/serial.c         | 21 ++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

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 e3c356408987..25d0dbf91ae9 100644
--- a/xen/drivers/char/serial.c
+++ b/xen/drivers/char/serial.c
@@ -16,7 +16,26 @@
 #include <asm/processor.h>
 
 unsigned int __ro_after_init serial_txbufsz = CONFIG_SERIAL_TX_BUFSIZE;
-size_param("serial_tx_buffer", serial_txbufsz);
+
+static int __init cf_check parse_serial_txbufsz(const char *s)
+{
+    long long val;
+
+    if ( parse_signed_integer("serial_tx_buffer", s, NULL, &val) )
+        return 0;
+
+    if ( val < KB(16) || val > GB(2) )
+    {
+        printk(XENLOG_WARNING "'serial_tx_buffer=%lld' value out of range, "
+               "falling back to default\n", val);
+        val = CONFIG_SERIAL_TX_BUFSIZE;
+    }
+
+    serial_txbufsz = PAGE_SIZE << get_order_from_bytes(val);
+
+    return 0;
+}
+custom_param("serial_tx_buffer", parse_serial_txbufsz);
 
 #define mask_serial_rxbuf_idx(_i) ((_i)&(serial_rxbufsz-1))
 #define mask_serial_txbuf_idx(_i) ((_i)&(serial_txbufsz-1))
-- 
2.54.0




 


Rackspace

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