|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Fix error handling in opendir()
Hi Costin,
This patch looks good. Thanks!
Vlad
Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
On 12.09.2019 11:47, Costin Lupu wrote:
> In case of errors, opendir() should set errno and return -1. If 'path' is not
> a
> directory then opendir() should set errno to ENOTDIR.
>
> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
> ---
> lib/vfscore/main.c | 28 ++++++++++++++++++++++------
> 1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/lib/vfscore/main.c b/lib/vfscore/main.c
> index 925ce762..39013767 100644
> --- a/lib/vfscore/main.c
> +++ b/lib/vfscore/main.c
> @@ -659,17 +659,33 @@ struct __dirstream
>
> DIR *opendir(const char *path)
> {
> - DIR *dir = malloc(sizeof(*dir));
> + DIR *dir;
> + struct stat st;
>
> - if (!dir)
> - return ERR2PTR(-ENOMEM);
> + dir = malloc(sizeof(*dir));
> + if (!dir) {
> + errno = ENOMEM;
> + goto out_err;
> + }
>
> dir->fd = open(path, O_RDONLY);
> - if (dir->fd < 0) {
> - free(dir);
> - return NULL;
> + if (dir->fd < 0)
> + goto out_free_dir;
> +
> + if (fstat(dir->fd, &st) < 0)
> + goto out_free_dir;
> +
> + if (!S_ISDIR(st.st_mode)) {
> + errno = ENOTDIR;
> + goto out_free_dir;
> }
> +
> return dir;
> +
> +out_free_dir:
> + free(dir);
> +out_err:
> + return NULL;
> }
>
> DIR *fdopendir(int fd)
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |