ACK: [PATCH] lib: fwts_cpu.c: fix time-of-use race on stat/open (LP: #1209225)

Alex Hung alex.hung at canonical.com
Mon Aug 26 03:55:21 UTC 2013


On 08/07/2013 08:42 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Coverity Scan reports that the stat/open may give a small window
> of opportunity for a stat/open race condition. So just forget the
> stat as open will do.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/lib/src/fwts_cpu.c | 13 +++----------
>   1 file changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/src/lib/src/fwts_cpu.c b/src/lib/src/fwts_cpu.c
> index 44711fd..fc52fa5 100644
> --- a/src/lib/src/fwts_cpu.c
> +++ b/src/lib/src/fwts_cpu.c
> @@ -51,30 +51,23 @@ static pid_t *fwts_cpu_pids;
>    */
>   int fwts_cpu_readmsr(const int cpu, const uint32_t reg, uint64_t *val)
>   {
> -	struct stat statbuf;
>   	char buffer[PATH_MAX];
> -	uint64_t value;
> +	uint64_t value = 0;
>   	int fd;
>   	int ret;
>
> -	value = 0;
> -
>   	snprintf(buffer, sizeof(buffer), "/dev/cpu/%d/msr", cpu);
> -
> -	if (stat(buffer, &statbuf)) {
> +	if ((fd = open(buffer, O_RDONLY)) < 0) {
>   		/* Hrm, msr not there, so force modprobe msr and see what happens */
>   		pid_t pid;
>   		if ((fd = fwts_pipe_open("modprobe msr", &pid)) < 0)
>   			return FWTS_ERROR;
>   		fwts_pipe_close(fd, pid);
>
> -		if (stat(buffer, &statbuf))
> +		if ((fd = open(buffer, O_RDONLY)) < 0)
>   			return FWTS_ERROR; /* Really failed */
>   	}
>
> -	if ((fd = open(buffer, O_RDONLY)) < 0)
> -                return FWTS_ERROR;
> -
>   	ret = pread(fd, &value, 8, reg);
>   	close(fd);
>
>

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



More information about the fwts-devel mailing list