[PATCH] lib: fwts_cpu.c: fix time-of-use race on stat/open (LP: #1209225)
Keng-Yu Lin
kengyu at canonical.com
Wed Aug 14 03:30:18 UTC 2013
On Wed, Aug 7, 2013 at 8:42 PM, Colin King <colin.king at canonical.com> 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);
>
> --
> 1.8.3.2
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list