lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 18 May 2012 16:55:39 -0700 From: Colin Cross <ccross@...roid.com> To: Anton Vorontsov <anton.vorontsov@...aro.org> Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Kees Cook <keescook@...omium.org>, Tony Luck <tony.luck@...el.com>, Arnd Bergmann <arnd@...db.de>, John Stultz <john.stultz@...aro.org>, Shuah Khan <shuahkhan@...il.com>, arve@...roid.com, Rebecca Schultz Zavin <rebecca@...roid.com>, Jesper Juhl <jj@...osbits.net>, Randy Dunlap <rdunlap@...otime.net>, Stephen Boyd <sboyd@...eaurora.org>, Thomas Meyer <thomas@...3r.de>, Andrew Morton <akpm@...ux-foundation.org>, Marco Stornelli <marco.stornelli@...il.com>, WANG Cong <xiyou.wangcong@...il.com>, linux-kernel@...r.kernel.org, devel@...verdev.osuosl.org, linaro-kernel@...ts.linaro.org, patches@...aro.org, kernel-team@...roid.com Subject: Re: [PATCH 02/14] pstore/ram: Should update old dmesg buffer before reading On Fri, May 18, 2012 at 3:24 PM, Anton Vorontsov <anton.vorontsov@...aro.org> wrote: > Without the update, we'll only see the new dmesg buffer after the > reboot, but previously we could see it right away. Making an oops > visible in pstore filesystem before reboot is a somewhat dubious > feature, but removing it wasn't an intentional change, so let's > restore it for now. > > Signed-off-by: Anton Vorontsov <anton.vorontsov@...aro.org> > --- > fs/pstore/ram.c | 2 ++ > fs/pstore/ram_core.c | 21 +++++++++++++++++++-- > include/linux/pstore_ram.h | 1 + > 3 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c > index 9123cce..3a7724b 100644 > --- a/fs/pstore/ram.c > +++ b/fs/pstore/ram.c > @@ -106,6 +106,8 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, > time->tv_sec = 0; > time->tv_nsec = 0; > > + /* Update old/shadowed buffer. */ > + persistent_ram_copy_old(prz); > size = persistent_ram_old_size(prz); > *buf = kmalloc(size, GFP_KERNEL); > if (*buf == NULL) > diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c > index 31f8d18..849a542 100644 > --- a/fs/pstore/ram_core.c > +++ b/fs/pstore/ram_core.c > @@ -250,8 +250,7 @@ static void notrace persistent_ram_update(struct persistent_ram_zone *prz, > persistent_ram_update_ecc(prz, start, count); > } > > -static void __init > -persistent_ram_save_old(struct persistent_ram_zone *prz) > +static void persistent_ram_save_old(struct persistent_ram_zone *prz) > { > struct persistent_ram_buffer *buffer = prz->buffer; > size_t size = buffer_size(prz); > @@ -272,6 +271,24 @@ persistent_ram_save_old(struct persistent_ram_zone *prz) > memcpy(prz->old_log + size - start, &buffer->data[0], start); > } > > +void persistent_ram_copy_old(struct persistent_ram_zone *prz) > +{ > + struct persistent_ram_buffer *buffer = prz->buffer; > + size_t size = buffer_size(prz); > + size_t start = buffer_start(prz); > + > + if (!size) > + return; > + > + if (!prz->old_log) { > + persistent_ram_save_old(prz); > + return; > + } > + prz->old_log_size = size; > + memcpy(prz->old_log, &buffer->data[start], size - start); > + memcpy(prz->old_log + size - start, &buffer->data[0], start); > +} This duplicates most of persistent_ram_save_old, including all the ringbuffer math that may change. Can they be the same function, and only malloc and ecc if old_log doesn't exist? > int notrace persistent_ram_write(struct persistent_ram_zone *prz, > const void *s, unsigned int count) > { > diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h > index 7ed7fd4..07d59b7 100644 > --- a/include/linux/pstore_ram.h > +++ b/include/linux/pstore_ram.h > @@ -75,6 +75,7 @@ struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev, > int persistent_ram_write(struct persistent_ram_zone *prz, const void *s, > unsigned int count); > > +void persistent_ram_copy_old(struct persistent_ram_zone *prz); > size_t persistent_ram_old_size(struct persistent_ram_zone *prz); > void *persistent_ram_old(struct persistent_ram_zone *prz); > void persistent_ram_free_old(struct persistent_ram_zone *prz); > -- > 1.7.9.2 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists