From: Brenden Blanco <bbla...@plumgrid.com>
Date: Mon, 11 Jul 2016 14:29:49 -0700

> +     if (fd >= 0) {
> +             prog = bpf_prog_get_type(fd, BPF_PROG_TYPE_XDP);
> +             if (IS_ERR(prog))
> +                     return PTR_ERR(prog);
> +     }
> +
> +     xdp.command = XDP_SETUP_PROG;
> +     xdp.prog = prog;
> +     err = ops->ndo_xdp(dev, &xdp);
> +     if (err < 0 && prog)
> +             bpf_prog_put(prog);

I don't understand the reference counting on 'prog' here.

The enumeration documentation states that no matter what, the passed
in prog doesn't need to be mangaged by the ->ndo_xdp() method.

Therefore, if that is true, we must always put the 'prog' here if it
is non-NULL.  Regardless of the 'err' value.

Reply via email to