On Fri, Dec 17, 2010 at 11:03:46AM +0100, Thomas Gleixner wrote:
> So you could do the following:
...
> static int get_posix_clock(const clockid_t id, struct posix_clock_descr *cd)
> {
>       struct file *fp = fget(CLOCKID_TO_FD(id));
>       int ret;
> 
>       if (!fp || fp->f_op->open != posix_clock_open || !fp->private_data)
>               return -ENODEV;
>       ret = get_fd_clk(cd, fp);
>       if (ret)
>               fput(fp);
>       return ret;
> }

In order to avoid leaking a fp reference, shouldn't this go like:

static int get_posix_clock(const clockid_t id, struct posix_clock_desc *cd)
{
        struct file *fp = fget(CLOCKID_TO_FD(id));
        int ret = -EINVAL;

        if (!fp)
                return ret;
        if (fp->f_op->open != posix_clock_open || !fp->private_data)
                goto out;
        ret = get_fd_clk(cd, fp);
out:
        if (ret)
                fput(fp);
        return ret;
}

Thanks again for your help,
Richard


--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to