mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
hostfs: fix memory handling in follow_link()
[ Upstream commit7f6c411c9b] 1) argument should not be freed in any case - the caller already has it as ->s_fs_info (and uses it a lot afterwards) 2) allocate readlink buffer with kmalloc() - the caller has no way to tell if it's got that (on absolute symlink) or a result of kasprintf(). Sure, for SLAB and SLUB kfree() works on results of kmem_cache_alloc(), but that's not documented anywhere, might change in the future *and* is already not true for SLOB. Fixes:52b209f7b8("get rid of hostfs_read_inode()") Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3cc4db1213
commit
e5a3449ce1
@@ -142,7 +142,7 @@ static char *follow_link(char *link)
|
|||||||
char *name, *resolved, *end;
|
char *name, *resolved, *end;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
name = __getname();
|
name = kmalloc(PATH_MAX, GFP_KERNEL);
|
||||||
if (!name) {
|
if (!name) {
|
||||||
n = -ENOMEM;
|
n = -ENOMEM;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
@@ -171,12 +171,11 @@ static char *follow_link(char *link)
|
|||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
__putname(name);
|
kfree(name);
|
||||||
kfree(link);
|
|
||||||
return resolved;
|
return resolved;
|
||||||
|
|
||||||
out_free:
|
out_free:
|
||||||
__putname(name);
|
kfree(name);
|
||||||
return ERR_PTR(n);
|
return ERR_PTR(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user