mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 22:03:14 +00:00
hostfs: fix memory handling in follow_link()
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>
This commit is contained in:
parent
a38fd87484
commit
7f6c411c9b
@ -144,7 +144,7 @@ static char *follow_link(char *link)
|
||||
char *name, *resolved, *end;
|
||||
int n;
|
||||
|
||||
name = __getname();
|
||||
name = kmalloc(PATH_MAX, GFP_KERNEL);
|
||||
if (!name) {
|
||||
n = -ENOMEM;
|
||||
goto out_free;
|
||||
@ -173,12 +173,11 @@ static char *follow_link(char *link)
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
__putname(name);
|
||||
kfree(link);
|
||||
kfree(name);
|
||||
return resolved;
|
||||
|
||||
out_free:
|
||||
__putname(name);
|
||||
kfree(name);
|
||||
return ERR_PTR(n);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user