Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp131182pja; Fri, 22 Nov 2019 04:28:24 -0800 (PST) X-Google-Smtp-Source: APXvYqwVhepaJOXsd8SVuVvgLABHLJge4mey81HSK+1yqGXiHib13ss/36RZoZUXsnmhQs89JoTn X-Received: by 2002:aa7:c453:: with SMTP id n19mr761470edr.103.1574425704026; Fri, 22 Nov 2019 04:28:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574425704; cv=none; d=google.com; s=arc-20160816; b=Sd2oQT6wFoGqeFcaXk2C+NNyibGbopIVe7Hjk1uvsybirPLDK+QMughuomBsmnGE4z tAaPuOcJaKLPFJdUTqUpS5juwYF8eIppzYrGxd5d4063c0RHikQOq0dYDYxNs7d6Dlnd RY1GpZV5TWdpU+t3MlrmdPzRtLGQY3nJbVgoxqCp6tGwBnkL8dFetZDwIVI5VQmCEfxK wdJWflBVTBcdn9XvPIQGC2qkDk6ZFfzj87BNa+pYfXAA0xV2FBiEQN6VEoHny6byT+KR +a9yCGLtOGn9kinbbB40A+WTpVn3oNRimJj17SEYSCDt749srZD3uBot12ZRjp6EkXOK +Cvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=qnut2E86VUX/qCa3aD0Vv840w1VM/D8Xhpmczg/JEpo=; b=jNcfIac8zfKRFF9IrcMXo5rwUAQki1C1CxDGpouAQ/sncmX7Lns/Nfnb2SCSPjL3xf AKOQiREUYKhBg/4qSK/hM0tYlf8hiyNHwHPRY8peCBEh1ZDYO1pKWkgHR5qRaUEtfHYW FG9rRzYh3gWYNFNBck6oamXsDZJ85t0FqU/ICKBP75hYxTLxRtqIRshbGkO6tZtV6r1a ApSFba2RF+za2TRyIIVsW/3CW346UeD+0flarvwACq10GINT7nQTfbmZEuMq1yAbjGcJ IqisPP6at4x6+8DtU69YQHXKPSYFEAwr3A6glWrOhP+ANOVU+T9nmr5lEj8o2jQDMjHE Ypjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IvPGirm9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k7si4782983edb.265.2019.11.22.04.28.00; Fri, 22 Nov 2019 04:28:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IvPGirm9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730300AbfKVKyM (ORCPT + 99 others); Fri, 22 Nov 2019 05:54:12 -0500 Received: from mail.kernel.org ([198.145.29.99]:39404 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730290AbfKVKyJ (ORCPT ); Fri, 22 Nov 2019 05:54:09 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A520420637; Fri, 22 Nov 2019 10:54:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574420048; bh=6qF5h0X0Lr3M78iBsnk05aG0tSXi+4t7+B/OiP2Z31E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IvPGirm9VQEsqij3m3ZE1b6FFVfFfKvVq5Vgeg8rmSVIkQCTZl4VcL4dg+rY3g2ya Tt+ThPE7jbIkD8vzHIVKfoxaR8EUwxF+2/lSj8SjdqNSnljZFva6HGR0W7F3RAWpMu aaYbz4eHD6TeS6UqhjigTuorQGRd5kk8gsSR5QlI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, rostedt@goodmis.org, Sergey Senozhatsky , He Zhe , Petr Mladek , Sasha Levin Subject: [PATCH 4.14 098/122] printk: Give error on attempt to set log buffer length to over 2G Date: Fri, 22 Nov 2019 11:29:11 +0100 Message-Id: <20191122100831.068780490@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100722.177052205@linuxfoundation.org> References: <20191122100722.177052205@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: He Zhe [ Upstream commit e6fe3e5b7d16e8f146a4ae7fe481bc6e97acde1e ] The current printk() is ready to handle log buffer size up to 2G. Give an explicit error for users who want to use larger log buffer. Also fix printk formatting to show the 2G as a positive number. Link: http://lkml.kernel.org/r/20181008135916.gg4kkmoki5bgtco5@pathway.suse.cz Cc: rostedt@goodmis.org Cc: linux-kernel@vger.kernel.org Suggested-by: Sergey Senozhatsky Signed-off-by: He Zhe Reviewed-by: Sergey Senozhatsky [pmladek: Fixed to the really safe limit 2GB.] Signed-off-by: Petr Mladek Signed-off-by: Sasha Levin --- kernel/printk/printk.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 5aa96098c64d3..5b33c14ab8b25 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -432,6 +432,7 @@ static u32 clear_idx; /* record buffer */ #define LOG_ALIGN __alignof__(struct printk_log) #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) +#define LOG_BUF_LEN_MAX (u32)(1 << 31) static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); static char *log_buf = __log_buf; static u32 log_buf_len = __LOG_BUF_LEN; @@ -1032,18 +1033,23 @@ void log_buf_vmcoreinfo_setup(void) static unsigned long __initdata new_log_buf_len; /* we practice scaling the ring buffer by powers of 2 */ -static void __init log_buf_len_update(unsigned size) +static void __init log_buf_len_update(u64 size) { + if (size > (u64)LOG_BUF_LEN_MAX) { + size = (u64)LOG_BUF_LEN_MAX; + pr_err("log_buf over 2G is not supported.\n"); + } + if (size) size = roundup_pow_of_two(size); if (size > log_buf_len) - new_log_buf_len = size; + new_log_buf_len = (unsigned long)size; } /* save requested log_buf_len since it's too early to process it */ static int __init log_buf_len_setup(char *str) { - unsigned int size; + u64 size; if (!str) return -EINVAL; @@ -1113,7 +1119,7 @@ void __init setup_log_buf(int early) } if (unlikely(!new_log_buf)) { - pr_err("log_buf_len: %ld bytes not available\n", + pr_err("log_buf_len: %lu bytes not available\n", new_log_buf_len); return; } @@ -1126,8 +1132,8 @@ void __init setup_log_buf(int early) memcpy(log_buf, __log_buf, __LOG_BUF_LEN); logbuf_unlock_irqrestore(flags); - pr_info("log_buf_len: %d bytes\n", log_buf_len); - pr_info("early log buf free: %d(%d%%)\n", + pr_info("log_buf_len: %u bytes\n", log_buf_len); + pr_info("early log buf free: %u(%u%%)\n", free, (free * 100) / __LOG_BUF_LEN); } -- 2.20.1