* [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex @ 2016-10-19 1:23 Namhyung Kim 2016-10-19 1:23 ` [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf Namhyung Kim 2016-11-15 23:20 ` [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Kees Cook 0 siblings, 2 replies; 4+ messages in thread From: Namhyung Kim @ 2016-10-19 1:23 UTC (permalink / raw) To: Kees Cook; +Cc: Anton Vorontsov, Colin Cross, Tony Luck, LKML, Stefan Hajnoczi When update_ms is set, pstore_get_records() will be called when there's a new entry. But unlink can be called at the same time and might contend with the open-read-close loop. Depending on the implementation of platform driver, it may be safe or not. But I think it'd be better to protect those race in the first place. Cc: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> --- fs/pstore/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c index 1781dc50762e..75728dfae0a6 100644 --- a/fs/pstore/inode.c +++ b/fs/pstore/inode.c @@ -197,11 +197,14 @@ static int pstore_unlink(struct inode *dir, struct dentry *dentry) if (err) return err; - if (p->psi->erase) + if (p->psi->erase) { + mutex_lock(&p->psi->read_mutex); p->psi->erase(p->type, p->id, p->count, d_inode(dentry)->i_ctime, p->psi); - else + mutex_unlock(&p->psi->read_mutex); + } else { return -EPERM; + } return simple_unlink(dir, dentry); } -- 2.9.3 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf 2016-10-19 1:23 [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Namhyung Kim @ 2016-10-19 1:23 ` Namhyung Kim 2016-11-15 23:21 ` Kees Cook 2016-11-15 23:20 ` [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Kees Cook 1 sibling, 1 reply; 4+ messages in thread From: Namhyung Kim @ 2016-10-19 1:23 UTC (permalink / raw) To: Kees Cook; +Cc: Anton Vorontsov, Colin Cross, Tony Luck, LKML, Stefan Hajnoczi Maybe I'm missing something, but I don't know why it needs to copy the input buffer to psinfo->buf and then write. Instead we can write the input buffer directly. The only implementation that supports console message (i.e. ramoops) already does it for ftrace messages. For the upcoming virtio backend driver, it needs to protect psinfo->buf overwritten from console messages. If it could use ->write_buf method instead of ->write, the problem will be solved easily. Cc: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> --- fs/pstore/platform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 14984d902a99..960d66251bab 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -584,8 +584,8 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c) } else { spin_lock_irqsave(&psinfo->buf_lock, flags); } - memcpy(psinfo->buf, s, c); - psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, 0, 0, c, psinfo); + psinfo->write_buf(PSTORE_TYPE_CONSOLE, 0, &id, 0, + s, 0, c, psinfo); spin_unlock_irqrestore(&psinfo->buf_lock, flags); s += c; c = e - s; -- 2.9.3 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf 2016-10-19 1:23 ` [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf Namhyung Kim @ 2016-11-15 23:21 ` Kees Cook 0 siblings, 0 replies; 4+ messages in thread From: Kees Cook @ 2016-11-15 23:21 UTC (permalink / raw) To: Namhyung Kim Cc: Anton Vorontsov, Colin Cross, Tony Luck, LKML, Stefan Hajnoczi On Tue, Oct 18, 2016 at 6:23 PM, Namhyung Kim <namhyung@kernel.org> wrote: > Maybe I'm missing something, but I don't know why it needs to copy the > input buffer to psinfo->buf and then write. Instead we can write the > input buffer directly. The only implementation that supports console > message (i.e. ramoops) already does it for ftrace messages. > > For the upcoming virtio backend driver, it needs to protect psinfo->buf > overwritten from console messages. If it could use ->write_buf method > instead of ->write, the problem will be solved easily. Agreed, this looks like needless bounce-buffering. Thanks! -Kees > > Cc: Stefan Hajnoczi <stefanha@redhat.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > fs/pstore/platform.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c > index 14984d902a99..960d66251bab 100644 > --- a/fs/pstore/platform.c > +++ b/fs/pstore/platform.c > @@ -584,8 +584,8 @@ static void pstore_console_write(struct console *con, const char *s, unsigned c) > } else { > spin_lock_irqsave(&psinfo->buf_lock, flags); > } > - memcpy(psinfo->buf, s, c); > - psinfo->write(PSTORE_TYPE_CONSOLE, 0, &id, 0, 0, 0, c, psinfo); > + psinfo->write_buf(PSTORE_TYPE_CONSOLE, 0, &id, 0, > + s, 0, c, psinfo); > spin_unlock_irqrestore(&psinfo->buf_lock, flags); > s += c; > c = e - s; > -- > 2.9.3 > -- Kees Cook Nexus Security ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex 2016-10-19 1:23 [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Namhyung Kim 2016-10-19 1:23 ` [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf Namhyung Kim @ 2016-11-15 23:20 ` Kees Cook 1 sibling, 0 replies; 4+ messages in thread From: Kees Cook @ 2016-11-15 23:20 UTC (permalink / raw) To: Namhyung Kim Cc: Anton Vorontsov, Colin Cross, Tony Luck, LKML, Stefan Hajnoczi On Tue, Oct 18, 2016 at 6:23 PM, Namhyung Kim <namhyung@kernel.org> wrote: > When update_ms is set, pstore_get_records() will be called when there's > a new entry. But unlink can be called at the same time and might > contend with the open-read-close loop. Depending on the implementation > of platform driver, it may be safe or not. But I think it'd be better > to protect those race in the first place. > > Cc: Stefan Hajnoczi <stefanha@redhat.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> This looks correct to me, thanks! It should appear in -next shortly... -Kees > --- > fs/pstore/inode.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c > index 1781dc50762e..75728dfae0a6 100644 > --- a/fs/pstore/inode.c > +++ b/fs/pstore/inode.c > @@ -197,11 +197,14 @@ static int pstore_unlink(struct inode *dir, struct dentry *dentry) > if (err) > return err; > > - if (p->psi->erase) > + if (p->psi->erase) { > + mutex_lock(&p->psi->read_mutex); > p->psi->erase(p->type, p->id, p->count, > d_inode(dentry)->i_ctime, p->psi); > - else > + mutex_unlock(&p->psi->read_mutex); > + } else { > return -EPERM; > + } > > return simple_unlink(dir, dentry); > } > -- > 2.9.3 > -- Kees Cook Nexus Security ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-11-15 23:21 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-10-19 1:23 [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Namhyung Kim 2016-10-19 1:23 ` [RFC/PATCH 2/2] pstore: Convert console write to use ->write_buf Namhyung Kim 2016-11-15 23:21 ` Kees Cook 2016-11-15 23:20 ` [RFC/PATCH 1/2] pstore: Protect unlink with read_mutex Kees Cook
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome