[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
|