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:
Родитель
a38fd87484
Коммит
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);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче