From patchwork Tue Jan 7 20:54:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 234310 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED9EFC33CA1 for ; Tue, 7 Jan 2020 21:17:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B59362081E for ; Tue, 7 Jan 2020 21:17:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578431846; bh=T5q8XmvfkrOeq1v43/KZZja5ORt8vWv1s+v4WUe0hjQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=IwUxWTr36Fu2DDMVi+bqjO3w22d+npxz3AlvbH+gM4gEmWBViN7tCNq+BtfstB5r5 PoKZ8WtA4zsgsbQ2w5a1e0L17jRiYHXfVtRw8kbRfDQI5Rq41KxgpC7Vk9mC/rYv7R A2uhNyhfRcTPtQRpKhfjQCl+DMEGeGsyq28LLG4U= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728606AbgAGVRZ (ORCPT ); Tue, 7 Jan 2020 16:17:25 -0500 Received: from mail.kernel.org ([198.145.29.99]:53408 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729302AbgAGVFv (ORCPT ); Tue, 7 Jan 2020 16:05:51 -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 22C402087F; Tue, 7 Jan 2020 21:05:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578431150; bh=T5q8XmvfkrOeq1v43/KZZja5ORt8vWv1s+v4WUe0hjQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rytqw2IjzGNyr4LkzuVMoqNRdLkuX3wPTWgY1SZzocJuFiclMPdQgazt+b727bjra 85R6oJtqaKm8uTAXYHLCQ/jaoKLg5eMA1kOv8QSPhzxh7f/goit/hrO5lXkYjPBp1p VySOHqww4oTdZQOAjY/oilBmpXyTgRUprnmFx2Hg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Aleksandr Yashkin , Nikolay Merinov , Ariel Gilman , Kees Cook Subject: [PATCH 4.19 055/115] pstore/ram: Write new dumps to start of recycled zones Date: Tue, 7 Jan 2020 21:54:25 +0100 Message-Id: <20200107205302.839255144@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200107205240.283674026@linuxfoundation.org> References: <20200107205240.283674026@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Aleksandr Yashkin commit 9e5f1c19800b808a37fb9815a26d382132c26c3d upstream. The ram_core.c routines treat przs as circular buffers. When writing a new crash dump, the old buffer needs to be cleared so that the new dump doesn't end up in the wrong place (i.e. at the end). The solution to this problem is to reset the circular buffer state before writing a new Oops dump. Signed-off-by: Aleksandr Yashkin Signed-off-by: Nikolay Merinov Signed-off-by: Ariel Gilman Link: https://lore.kernel.org/r/20191223133816.28155-1-n.merinov@inango-systems.com Fixes: 896fc1f0c4c6 ("pstore/ram: Switch to persistent_ram routines") Cc: stable@vger.kernel.org Signed-off-by: Kees Cook Signed-off-by: Greg Kroah-Hartman --- fs/pstore/ram.c | 11 +++++++++++ 1 file changed, 11 insertions(+) --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -437,6 +437,17 @@ static int notrace ramoops_pstore_write( prz = cxt->dprzs[cxt->dump_write_cnt]; + /* + * Since this is a new crash dump, we need to reset the buffer in + * case it still has an old dump present. Without this, the new dump + * will get appended, which would seriously confuse anything trying + * to check dump file contents. Specifically, ramoops_read_kmsg_hdr() + * expects to find a dump header in the beginning of buffer data, so + * we must to reset the buffer values, in order to ensure that the + * header will be written to the beginning of the buffer. + */ + persistent_ram_zap(prz); + /* Build header and append record contents. */ hlen = ramoops_write_kmsg_hdr(prz, record); size = record->size;