mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
cachefiles: Fix oops in vfs_mkdir from cachefiles_get_directory
Commitc54b386969("VFS: Change vfs_mkdir() to return the dentry.") changed cachefiles_get_directory, replacing "subdir" with a ERR_PTR from the result of cachefiles_inject_write_error, which is either 0 or some error code. This causes an oops when the resulting pointer is passed to vfs_mkdir. Use a similar pattern to what is used earlier in the function; replace subdir with either the return value from vfs_mkdir, or the ERR_PTR of the cachefiles_inject_write_error() return value, but only if it is non zero. Fixes:c54b386969("VFS: Change vfs_mkdir() to return the dentry.") cc: netfs@lists.linux.dev Signed-off-by: Marc Dionne <marc.dionne@auristor.com> Link: https://lore.kernel.org/r/20250325125905.395372-1-marc.dionne@auristor.com Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
af7bb0d2ca
commit
406fad7698
|
|
@ -128,10 +128,11 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||||
ret = security_path_mkdir(&path, subdir, 0700);
|
ret = security_path_mkdir(&path, subdir, 0700);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto mkdir_error;
|
goto mkdir_error;
|
||||||
subdir = ERR_PTR(cachefiles_inject_write_error());
|
ret = cachefiles_inject_write_error();
|
||||||
if (!IS_ERR(subdir))
|
if (ret == 0)
|
||||||
subdir = vfs_mkdir(&nop_mnt_idmap, d_inode(dir), subdir, 0700);
|
subdir = vfs_mkdir(&nop_mnt_idmap, d_inode(dir), subdir, 0700);
|
||||||
ret = PTR_ERR(subdir);
|
else
|
||||||
|
subdir = ERR_PTR(ret);
|
||||||
if (IS_ERR(subdir)) {
|
if (IS_ERR(subdir)) {
|
||||||
trace_cachefiles_vfs_error(NULL, d_inode(dir), ret,
|
trace_cachefiles_vfs_error(NULL, d_inode(dir), ret,
|
||||||
cachefiles_trace_mkdir_error);
|
cachefiles_trace_mkdir_error);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user