Commit 2c1cf00e authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

relay: check return of create_buf_file() properly

If create_buf_file() returns an error, don't try to reference it later
as a valid dentry pointer.

This problem was exposed when debugfs started to return errors instead
of just NULL for some calls when they do not succeed properly.

Also, the check for WARN_ON(dentry) was just wrong :)
Reported-by: default avatarKees Cook <keescook@chromium.org>
Reported-and-tested-by: syzbot+16c3a70e1e9b29346c43@syzkaller.appspotmail.com
Reported-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Rientjes <rientjes@google.com>
Fixes: ff9fb72b ("debugfs: return error values, not NULL")
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 37ea7b63
...@@ -428,6 +428,8 @@ static struct dentry *relay_create_buf_file(struct rchan *chan, ...@@ -428,6 +428,8 @@ static struct dentry *relay_create_buf_file(struct rchan *chan,
dentry = chan->cb->create_buf_file(tmpname, chan->parent, dentry = chan->cb->create_buf_file(tmpname, chan->parent,
S_IRUSR, buf, S_IRUSR, buf,
&chan->is_global); &chan->is_global);
if (IS_ERR(dentry))
dentry = NULL;
kfree(tmpname); kfree(tmpname);
...@@ -461,7 +463,7 @@ static struct rchan_buf *relay_open_buf(struct rchan *chan, unsigned int cpu) ...@@ -461,7 +463,7 @@ static struct rchan_buf *relay_open_buf(struct rchan *chan, unsigned int cpu)
dentry = chan->cb->create_buf_file(NULL, NULL, dentry = chan->cb->create_buf_file(NULL, NULL,
S_IRUSR, buf, S_IRUSR, buf,
&chan->is_global); &chan->is_global);
if (WARN_ON(dentry)) if (IS_ERR_OR_NULL(dentry))
goto free_buf; goto free_buf;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment