Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756187AbdCGUdV (ORCPT ); Tue, 7 Mar 2017 15:33:21 -0500 Received: from mail-io0-f180.google.com ([209.85.223.180]:35554 "EHLO mail-io0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756029AbdCGUdR (ORCPT ); Tue, 7 Mar 2017 15:33:17 -0500 MIME-Version: 1.0 In-Reply-To: References: <1488837332-71582-1-git-send-email-keescook@chromium.org> <1488837332-71582-7-git-send-email-keescook@chromium.org> From: Kees Cook Date: Tue, 7 Mar 2017 11:31:12 -0800 X-Google-Sender-Auth: DTb_O6fZt2mY67r8xAI44lZQPps Message-ID: Subject: Re: [PATCH 06/18] pstore: Extract common arguments into structure To: Namhyung Kim Cc: LKML , Nobuhiro Iwamatsu , Qiuxu Zhuo , Ard Biesheuvel , Anton Vorontsov , Colin Cross , Tony Luck , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , "Rafael J. Wysocki" , Len Brown , Matt Fleming , Nathan Fontenot , Pan Xinhui , Daniel Axtens , Paul Gortmaker , Geliang Tang , "linuxppc-dev@lists.ozlabs.org" , ACPI Devel Maling List , "linux-efi@vger.kernel.org" , "linux-doc@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3561 Lines: 77 On Tue, Mar 7, 2017 at 8:22 AM, Namhyung Kim wrote: > On Tue, Mar 7, 2017 at 6:55 AM, Kees Cook wrote: >> The read/mkfile pair pass the same arguments and should be cleared >> between calls. Move to a structure and wipe it after every loop. >> >> Signed-off-by: Kees Cook >> --- >> fs/pstore/platform.c | 55 +++++++++++++++++++++++++++----------------------- >> include/linux/pstore.h | 28 ++++++++++++++++++++++++- >> 2 files changed, 57 insertions(+), 26 deletions(-) >> >> diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c >> index 320a673ecb5b..3fa1575a6e36 100644 >> --- a/fs/pstore/platform.c >> +++ b/fs/pstore/platform.c >> @@ -766,16 +766,9 @@ EXPORT_SYMBOL_GPL(pstore_unregister); >> void pstore_get_records(int quiet) >> { >> struct pstore_info *psi = psinfo; >> - char *buf = NULL; >> - ssize_t size; >> - u64 id; >> - int count; >> - enum pstore_type_id type; >> - struct timespec time; >> + struct pstore_record record = { .psi = psi, }; >> int failed = 0, rc; >> - bool compressed; >> int unzipped_len = -1; >> - ssize_t ecc_notice_size = 0; >> >> if (!psi) >> return; >> @@ -784,39 +777,51 @@ void pstore_get_records(int quiet) >> if (psi->open && psi->open(psi)) >> goto out; >> >> - while ((size = psi->read(&id, &type, &count, &time, &buf, &compressed, >> - &ecc_notice_size, psi)) > 0) { >> - if (compressed && (type == PSTORE_TYPE_DMESG)) { >> + while ((record.size = psi->read(&record.id, &record.type, >> + &record.count, &record.time, >> + &record.buf, &record.compressed, >> + &record.ecc_notice_size, >> + record.psi)) > 0) { >> + if (record.compressed && >> + record.type == PSTORE_TYPE_DMESG) { >> if (big_oops_buf) >> - unzipped_len = pstore_decompress(buf, >> - big_oops_buf, size, >> + unzipped_len = pstore_decompress( >> + record.buf, >> + big_oops_buf, >> + record.size, >> big_oops_buf_sz); >> >> if (unzipped_len > 0) { >> - if (ecc_notice_size) >> + if (record.ecc_notice_size) >> memcpy(big_oops_buf + unzipped_len, >> - buf + size, ecc_notice_size); >> - kfree(buf); >> - buf = big_oops_buf; >> - size = unzipped_len; >> - compressed = false; >> + record.buf + recorrecord.size, > > A typo on record.size. Thanks! Yeah, 0-day noticed this too. I've refreshed the patches in my tree with the correction now. -Kees -- Kees Cook Pixel Security