The macro WARN_ON() returns true if the condition inside is true. So if there is an error with vfs_open() 1 is returned. Capture the return value of vfs_open() then run WARN_ON() on it. Detected by Smatch: fs/backing-file.c:52 backing_file_open() warn: passing positive error code '1' to 'ERR_PTR' fs/backing-file.c:77 backing_tmpfile_open() warn: passing positive error code '1' to 'ERR_PTR' Fixes: 7ea30795d6b7d ("backing_file: store user_path_file") Signed-off-by: Ethan Tidmore --- fs/file_table.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/file_table.c b/fs/file_table.c index e8b4eb2bbff8..0898b1816c14 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -69,8 +69,12 @@ EXPORT_SYMBOL_GPL(backing_file_user_path_file); int backing_file_open_user_path(struct file *f, const struct path *path) { + int ret; + /* open an O_PATH file to reference the user path - should not fail */ - return WARN_ON(vfs_open(path, &backing_file(f)->user_path_file)); + ret = vfs_open(path, &backing_file(f)->user_path_file); + WARN_ON(ret); + return ret; } EXPORT_SYMBOL_GPL(backing_file_open_user_path); -- 2.53.0