ACK: [PATCH 2/6] pipeio: Fix error handling in fwts_pipe_exec

Alex Hung alex.hung at canonical.com
Wed Apr 27 04:30:56 UTC 2016


On 2016-04-22 01:41 PM, Jeremy Kerr wrote:
> Currently, fwts_pipe_exec does not handle failures from fwts_pipe_read,
> and will end up dereferencing a NULL pointer on failure.
>
> This change implements error handling for this case.
>
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
> ---
>   src/lib/src/fwts_pipeio.c | 17 +++++++++++------
>   1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/src/lib/src/fwts_pipeio.c b/src/lib/src/fwts_pipeio.c
> index 75addc5..7148903 100644
> --- a/src/lib/src/fwts_pipeio.c
> +++ b/src/lib/src/fwts_pipeio.c
> @@ -156,20 +156,25 @@ int fwts_pipe_close(const int fd, const pid_t pid)
>   int fwts_pipe_exec(const char *command, fwts_list **list, int *status)
>   {
>   	pid_t 	pid;
> -	int	fd;
> +	int	rc, fd;
>   	ssize_t	len;
>   	char 	*text;
>
>   	if ((fd = fwts_pipe_open(command, &pid)) < 0)
>   		return FWTS_ERROR;
>
> -	fwts_pipe_read(fd, &text, &len);
> -	*list = fwts_list_from_text(text);
> -	free(text);
> +	rc = fwts_pipe_read(fd, &text, &len);
> +	if (!rc && len > 0) {
> +		*list = fwts_list_from_text(text);
> +		free(text);
> +	} else {
> +		list = NULL;
> +	}
>
>   	*status = fwts_pipe_close(fd, pid);
> -	if (*status) {
> -		fwts_list_free(*list, free);
> +	if (rc || *status) {
> +		if (*list)
> +			fwts_list_free(*list, free);
>   		*list = NULL;
>   		return FWTS_EXEC_ERROR;
>   	}
>

Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list