From patchwork Sat Dec 16 04:22:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 179812 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp30516dyi; Fri, 15 Dec 2023 20:25:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IHrFKkg0CZjIHIdljLvod+29f4jW5G43r+tAYYPiaAGJX9PQ4FjRXMwuypRssvfv0dmpVOc X-Received: by 2002:a05:6e02:1a0f:b0:35f:6a71:9315 with SMTP id s15-20020a056e021a0f00b0035f6a719315mr10086773ild.23.1702700715094; Fri, 15 Dec 2023 20:25:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702700715; cv=none; d=google.com; s=arc-20160816; b=a9KesRg5ogXnIeGfeC1GgOqiL2gwWHMEDxm5VpLW6IAVg8obYubx1/3N0hXp50B/m+ w/NUSiNU0QKf23dZlQyH7KwL2Yy/eculE4BFfsnh50JZ1NecqOEHfjLH9kvwxVr5TUn6 bhsa+TqgzF1kCcMrMUqLKu50I/yBoGaRxfs0lTlvnZiflc+xOWUOsCalDlBPBFydozJU W5a2oSMGnWfDNf1FFp3b87bRMWpslfTJlpkVx6BLwlJVot4tb5ky4mm43+8jVz9fVsNZ ycpTe56SEDENbz9pN46BSQCQ/V34HSsaPm5k7NfJ3h0RxcaHZi+KvUBh8Aylib3vZYfn WgoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:subject:cc:to:from:date:user-agent:message-id; bh=b+WT8rA1IwhmX9oI2JVmEp9pF15eMxqdJmEL2ym8NzY=; fh=hu/11vjhAVGN2soHkDrejjtKeeIeHno3fFH7CvZIC0Y=; b=tErwBg4O9gwmSr2s7wLBYVN/X0M3EqL/10pbjgqW3oy+s68kq1ZKrSQuYzTgL6vJK1 v+9+jqZqn6Uej5HgRlTgm0z4JAiAE/oUeCJ1jWHXQ8vz78uhiKVOVEAbbpdJXIz/MpSi kzeDTV8I8rhu2Eoh0jH9XdyomX8Bs7i56DSFAFsDmhhO4QlDU+SUPter85pjHvbYebjP YiOlT6JfDllrO5nmM+ZyYi7JAnU/wV/R04azt06CMkYs+KrrYMElNMSLttpHHHBwOHbF VVJBwolo824f3VyTVkf6P8FC4mm/RztOLhkAhYreZlZu546IK+ai1+b2QEHwmG/Zb70G lQTg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-2049-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-2049-ouuuleilei=gmail.com@vger.kernel.org" Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id q24-20020a170902bd9800b001d04e2f99b1si14058431pls.513.2023.12.15.20.25.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 20:25:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-2049-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-2049-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-2049-ouuuleilei=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 62069B230F8 for ; Sat, 16 Dec 2023 04:24:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F3B3B1EA80; Sat, 16 Dec 2023 04:21:54 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 008111427B; Sat, 16 Dec 2023 04:21:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6927C433BC; Sat, 16 Dec 2023 04:21:52 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rEMCJ-00000002yDl-3hwE; Fri, 15 Dec 2023 23:22:43 -0500 Message-ID: <20231216042243.671261141@goodmis.org> User-Agent: quilt/0.67 Date: Fri, 15 Dec 2023 23:22:21 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , stable@vger.kernel.org Subject: [for-linus][PATCH 07/15] ring-buffer: Have saved event hold the entire event References: <20231216042214.905262999@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785411105217109871 X-GMAIL-MSGID: 1785411105217109871 From: "Steven Rostedt (Google)" For the ring buffer iterator (non-consuming read), the event needs to be copied into the iterator buffer to make sure that a writer does not overwrite it while the user is reading it. If a write happens during the copy, the buffer is simply discarded. But the temp buffer itself was not big enough. The allocation of the buffer was only BUF_MAX_DATA_SIZE, which is the maximum data size that can be passed into the ring buffer and saved. But the temp buffer needs to hold the meta data as well. That would be BUF_PAGE_SIZE and not BUF_MAX_DATA_SIZE. Link: https://lore.kernel.org/linux-trace-kernel/20231212072558.61f76493@gandalf.local.home Cc: stable@vger.kernel.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Fixes: 785888c544e04 ("ring-buffer: Have rb_iter_head_event() handle concurrent writer") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/ring_buffer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index c7abcc215fe2..1d9caee7f542 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2409,7 +2409,7 @@ rb_iter_head_event(struct ring_buffer_iter *iter) */ barrier(); - if ((iter->head + length) > commit || length > BUF_MAX_DATA_SIZE) + if ((iter->head + length) > commit || length > BUF_PAGE_SIZE) /* Writer corrupted the read? */ goto reset; @@ -5118,7 +5118,8 @@ ring_buffer_read_prepare(struct trace_buffer *buffer, int cpu, gfp_t flags) if (!iter) return NULL; - iter->event = kmalloc(BUF_MAX_DATA_SIZE, flags); + /* Holds the entire event: data and meta data */ + iter->event = kmalloc(BUF_PAGE_SIZE, flags); if (!iter->event) { kfree(iter); return NULL;