Blob Blame History Raw
From: Olaf Hering <ohering@suse.de>
Patch-mainline: never, API changed in v5.5
Subject: hv_netvsc: deal with bpf API differences in 4.12
References: bsc#1177819, bsc#1177820

Due to lack of 85192dbf4de08795afe2b88e52a36fc6abfc3dba from v5.5-rc1,
the result of some bpf APIs must be checked.

--- a/drivers/net/hyperv/netvsc_bpf.c
+++ b/drivers/net/hyperv/netvsc_bpf.c
@@ -120,7 +120,12 @@ int netvsc_xdp_set(struct net_device *de
 	}
 
 	if (prog)
+	{
+		prog =
 		bpf_prog_add(prog, nvdev->num_chn - 1);
+		if (IS_ERR(prog))
+			return PTR_ERR(prog);
+	}
 
 	for (i = 0; i < nvdev->num_chn; i++)
 		rcu_assign_pointer(nvdev->chan_table[i].bpf_prog, prog);
@@ -150,7 +155,12 @@ int netvsc_vf_setxdp(struct net_device *
 	memset(&xdp, 0, sizeof(xdp));
 
 	if (prog)
+	{
+		prog =
 		bpf_prog_inc(prog);
+		if (IS_ERR(prog))
+			return PTR_ERR(prog);
+	}
 
 	xdp.command = XDP_SETUP_PROG;
 	xdp.prog = prog;
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -980,7 +980,10 @@ struct netvsc_device_info *netvsc_devinf
 
 		prog = netvsc_xdp_get(nvdev);
 		if (prog) {
+			prog =
 			bpf_prog_inc(prog);
+			if (IS_ERR(prog))
+				return NULL;
 			dev_info->bprog = prog;
 		}
 	} else {
@@ -1070,7 +1073,12 @@ static int netvsc_attach(struct net_devi
 
 	prog = dev_info->bprog;
 	if (prog) {
+		prog =
 		bpf_prog_inc(prog);
+		if (IS_ERR(prog)) {
+			ret = PTR_ERR(prog);
+			goto err1;
+		}
 		ret = netvsc_xdp_set(ndev, prog, NULL, nvdev);
 		if (ret) {
 			bpf_prog_put(prog);