fs/ncpfs: fix error paths and goto statements in ncp_fill_super()
The label 'out_bdi' should be followed by bdi_destroy() instead of fput() which should be after the 'out_fput' label. If bdi_setup_and_register() fails then jump to the 'out_fput' label instead of the 'out_bdi' one. If fget(data.info_fd) fails then jump to the previously fixed 'out_bdi' label to call bdi_destroy() otherwise the bdi object will not be destroyed. Compile tested only. Signed-off-by: Djalal Harouni <tixxdz@opendz.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
7c6455e368
Коммит
759c361eb9
|
@ -548,7 +548,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
|
|||
|
||||
error = bdi_setup_and_register(&server->bdi, "ncpfs", BDI_CAP_MAP_COPY);
|
||||
if (error)
|
||||
goto out_bdi;
|
||||
goto out_fput;
|
||||
|
||||
server->ncp_filp = ncp_filp;
|
||||
server->ncp_sock = sock;
|
||||
|
@ -559,7 +559,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
|
|||
error = -EBADF;
|
||||
server->info_filp = fget(data.info_fd);
|
||||
if (!server->info_filp)
|
||||
goto out_fput;
|
||||
goto out_bdi;
|
||||
error = -ENOTSOCK;
|
||||
sock_inode = server->info_filp->f_path.dentry->d_inode;
|
||||
if (!S_ISSOCK(sock_inode->i_mode))
|
||||
|
@ -746,9 +746,9 @@ out_nls:
|
|||
out_fput2:
|
||||
if (server->info_filp)
|
||||
fput(server->info_filp);
|
||||
out_fput:
|
||||
bdi_destroy(&server->bdi);
|
||||
out_bdi:
|
||||
bdi_destroy(&server->bdi);
|
||||
out_fput:
|
||||
/* 23/12/1998 Marcin Dalecki <dalecki@cs.net.pl>:
|
||||
*
|
||||
* The previously used put_filp(ncp_filp); was bogus, since
|
||||
|
|
Загрузка…
Ссылка в новой задаче