diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c index 8a26cd8814c1b65cd84895cf3ca759c52e46097c..e842229123ffc8a0c0cf412cf293af18904f8f8c 100644 --- a/kernel/bpf/offload.c +++ b/kernel/bpf/offload.c @@ -198,12 +198,14 @@ static int __bpf_prog_dev_bound_init(struct bpf_prog *prog, struct net_device *n offload->netdev = netdev; ondev = bpf_offload_find_netdev(offload->netdev); + /* When program is offloaded require presence of "true" + * bpf_offload_netdev, avoid the one created for !ondev case below. + */ + if (bpf_prog_is_offloaded(prog->aux) && (!ondev || !ondev->offdev)) { + err = -EINVAL; + goto err_free; + } if (!ondev) { - if (bpf_prog_is_offloaded(prog->aux)) { - err = -EINVAL; - goto err_free; - } - /* When only binding to the device, explicitly * create an entry in the hashtable. */