From nobody Thu Apr 9 16:37:35 2026 Received: from mail-dy1-f177.google.com (mail-dy1-f177.google.com [74.125.82.177]) (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 A06DF63CB for ; Sat, 7 Mar 2026 02:28:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772850527; cv=none; b=IHtZDNAufF3TXa3bPibGFR/Y/4y1IWXQ11tcSnXDLW29duGNHJYCfOqzvTrSEwd3raJT+F70DIJPKkGbfpyxPobponqSIf00KusUpzQdzcsXF9qP/+sW0bhkqXSCmYFGyGDCkNu/KsrzfzKNyBdNNG1ikae7wDQXbgBdx1l7D5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772850527; c=relaxed/simple; bh=+29eQWDBWb73NBxQd+481FLVPXc0t1AxcBCmLMgUBXA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Lb53U7oudUWCHmrIHT2pZAECevPlb2kpLuuyd5oAqY/U6D/hUVnxf6GwJytbU9GYhIcYANpp/LptcJkuzbXMndAvLYQIqbqfBYTS5f0ioJxNWyGvgK0k87GW2IhinpadpXNqcQrbzlExK6KoMs3ze7k3v2C/pAXl4HmTWjMdtNE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wbinvd.org; spf=pass smtp.mailfrom=wbinvd.org; dkim=pass (2048-bit key) header.d=wbinvd.org header.i=@wbinvd.org header.b=LcXR2ypQ; arc=none smtp.client-ip=74.125.82.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wbinvd.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wbinvd.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wbinvd.org header.i=@wbinvd.org header.b="LcXR2ypQ" Received: by mail-dy1-f177.google.com with SMTP id 5a478bee46e88-2bd9a485bd6so3650840eec.1 for ; Fri, 06 Mar 2026 18:28:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wbinvd.org; s=wbinvd; t=1772850526; x=1773455326; 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=V6vMLTpBGGoSqyMwv4Oyb/USA3LI1oQt5aqADT5YB2Y=; b=LcXR2ypQ7DGDkEPHNs9xzRaUvSa++wQzxtkIeEwG8lXjCGj5pqMrhHCNJP2Lj1t8FV FiwZ7cor1rdjPj5EIFWh675MubKBF+JLTtp4uWZ0B7RvfnYrW831EVJa9J8B4XTyYfMc XSZuIwF8wtUqLJLNiw6NmaqCNAyv0qhHQGJ9I/rUQaNjFRRKZqShSI0urkHboyHX/MgN tstgdtKZqo0yRJ7CWGffSYSUHhjm0/1ZqcUbJVGUeCxVvi9gLUxDV8bYl9UdXl1HTDVP pGTi2d4SHBjCgmeXYp90o3n1X1uYZl2ATaqKK72NJPnRxzCSDLBADMnkOQlo1bdTcybP oirA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772850526; x=1773455326; 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=V6vMLTpBGGoSqyMwv4Oyb/USA3LI1oQt5aqADT5YB2Y=; b=oqXg3V5hF7xwosNKX3L9g2mBbkdQGVJCkM/svmFk+nwLrtsq+vYtXEiSSrR5CLC479 rLP8waKE7lFILvSvxIFVgxIAfKZDqnMBW72X+kwVMcetBe/9UBBMsnlRiEafkbPiGUVM lz/9y5IoNGx2nSI8n2X5yeoYpou0vmimQVeDddKvaCfb1mq1dBsHH1oHq/VPSqTBIgvT iyrXfmWhHxC9vH+A9MbjNDe8p+8/ZcfZ2+KxHigGM8+2PHSO0jZ3h7itYkxBIXW7Rigt SK5XceAzNdsX/v4gCZNizNbOgayok68W6LDgDE2jwrjC+Hb1VjxAXx8+BmdwfqFBEglM kKNA== X-Gm-Message-State: AOJu0YzetBtOQGNyyPMKTbH6yE/6it1NFYF8lKA4vo/AgiB4mT6W4Usc eQCE1wYd4JfL2Cr6MsuQoyQcCB3qV9hhGoZw5LLP4ok9zhMkQPXJxm905+O4LrJhioWRQC2f9Kr s2YyOmC4= X-Gm-Gg: ATEYQzysmVLgeD+yaOrjxr5wd1GCEn4GKl+HBydo2QqDNqSeae6M0othEXdpVtcU3rS ZYb4xlcYpQaMzJWst2D2j4+pySdwi7Y5vfnLRQtFiR9cusMFJxgvOGH8nlCcCuyddUzZyk6Ouct cMwEyFIv9CZ25dO2BPIGYmkVxPcO7dwZpTpslfrayiRqud+XiZjxqqAuBlycrA0tbwErngeFEWI unJDE3CbLiyHa6w5DqBm3CD+o9+a1Yd2df7XCv2M3OHLpTEk/x9yda3kVOEfer1qNp8Ol5Wb5Ba dFXCRBZPenRkpnUVXr+f5+ZwHehZnp6RCV3ylduEX6TwZ/qYSjwB7fXKFzh18JtQWCTKP/LbNwd y8uVOtnaXtHmCbea2sJi75Uj+wTbPEVLI83ZDCZbkJHyDlNDN10xQn1fPaU+tqlbVP8vVBiedfy tvI7xykH5Qb4atRjyqXwqkIpjSLe+L9w9RGJzl X-Received: by 2002:a05:7300:aca3:b0:2be:2f58:2eef with SMTP id 5a478bee46e88-2be4de91d51mr1629114eec.2.1772850525634; Fri, 06 Mar 2026 18:28:45 -0800 (PST) Received: from mozart.vkv.me ([2001:5a8:468b:d015:7be4:3a14:1272:85d2]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f94823esm2743485eec.20.2026.03.06.18.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 18:28:45 -0800 (PST) From: Calvin Owens To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers Subject: [PATCH] tracing: Fix trace_buf_size= cmdline parameter with sizes >= 2G Date: Fri, 6 Mar 2026 18:28:38 -0800 Message-ID: <9a65e27b0394069040c9b8f8684525687dc15d6b.1772820006.git.calvin@wbinvd.org> X-Mailer: git-send-email 2.47.3 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" Some of the sizing logic through tracer_alloc_buffers() uses int internally, causing unexpected behavior if the user passes a value that does not fit in an int (on my x86 machine, the result is uselessly tiny buffers). Fix by plumbing the parameter's real type (unsigned long) through to the ring buffer allocation functions, which already use unsigned long. Also, tweak ring_buffer_meta_scratch() to avoid void pointer arithmetic. It has always been possible to create larger ring buffers via the sysfs interface: this only affects the cmdline parameter. Fixes: 73c5162aa362 ("tracing: keep ring buffer to minimum size till used") Signed-off-by: Calvin Owens --- include/linux/ring_buffer.h | 3 ++- kernel/trace/ring_buffer.c | 10 +++++----- kernel/trace/trace.c | 13 +++++++------ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index d862fa610270..c07eb463ca1c 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h @@ -95,7 +95,8 @@ struct trace_buffer *__ring_buffer_alloc_range(unsigned l= ong size, unsigned flag unsigned long scratch_size, struct lock_class_key *key); =20 -void *ring_buffer_meta_scratch(struct trace_buffer *buffer, unsigned int *= size); +void *ring_buffer_meta_scratch(struct trace_buffer *buffer, + unsigned long *size); =20 /* * Because the ring buffer is generic, if other users of the ring buffer g= et diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 17d0ea0cc3e6..30e579fd6b9d 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2650,22 +2650,22 @@ struct trace_buffer *__ring_buffer_alloc_range(unsi= gned long size, unsigned flag scratch_size, key); } =20 -void *ring_buffer_meta_scratch(struct trace_buffer *buffer, unsigned int *= size) +void *ring_buffer_meta_scratch(struct trace_buffer *buffer, unsigned long = *size) { struct ring_buffer_meta *meta; - void *ptr; + unsigned long ptr; =20 if (!buffer || !buffer->meta) return NULL; =20 meta =3D buffer->meta; =20 - ptr =3D (void *)ALIGN((unsigned long)meta + sizeof(*meta), sizeof(long)); + ptr =3D ALIGN((unsigned long)meta + sizeof(*meta), sizeof(unsigned long)); =20 if (size) - *size =3D (void *)meta + meta->buffers_offset - ptr; + *size =3D (unsigned long)meta + meta->buffers_offset - ptr; =20 - return ptr; + return (void *)ptr; } =20 /** diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 1e7c032a72d2..f6f5c44ddbf7 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -9282,11 +9282,12 @@ static int mod_addr_comp(const void *a, const void = *b, const void *data) } =20 static void setup_trace_scratch(struct trace_array *tr, - struct trace_scratch *tscratch, unsigned int size) + struct trace_scratch *tscratch, + unsigned long size) { struct trace_module_delta *module_delta; struct trace_mod_entry *entry; - int i, nr_entries; + unsigned long i, nr_entries; =20 if (!tscratch) return; @@ -9350,11 +9351,11 @@ static void setup_trace_scratch(struct trace_array = *tr, } =20 static int -allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, in= t size) +allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, un= signed long size) { enum ring_buffer_flags rb_flags; struct trace_scratch *tscratch; - unsigned int scratch_size =3D 0; + unsigned long scratch_size =3D 0; =20 rb_flags =3D tr->trace_flags & TRACE_ITER(OVERWRITE) ? RB_FL_OVERWRITE : = 0; =20 @@ -9405,7 +9406,7 @@ static void free_trace_buffer(struct array_buffer *bu= f) } } =20 -static int allocate_trace_buffers(struct trace_array *tr, int size) +static int allocate_trace_buffers(struct trace_array *tr, unsigned long si= ze) { int ret; =20 @@ -10769,7 +10770,7 @@ __init static void enable_instances(void) =20 __init static int tracer_alloc_buffers(void) { - int ring_buf_size; + unsigned long ring_buf_size; int ret =3D -ENOMEM; =20 =20 --=20 2.47.3