return ret;
 }
 
-static int bpf_test_finish(union bpf_attr __user *uattr, const void *data,
+static int bpf_test_finish(const union bpf_attr *kattr,
+                          union bpf_attr __user *uattr, const void *data,
                           u32 size, u32 retval, u32 duration)
 {
-       void __user *data_out = u64_to_user_ptr(uattr->test.data_out);
+       void __user *data_out = u64_to_user_ptr(kattr->test.data_out);
        int err = -EFAULT;
 
        if (data_out && copy_to_user(data_out, data, size))
        /* bpf program can never convert linear skb to non-linear */
        if (WARN_ON_ONCE(skb_is_nonlinear(skb)))
                size = skb_headlen(skb);
-       ret = bpf_test_finish(uattr, skb->data, size, retval, duration);
+       ret = bpf_test_finish(kattr, uattr, skb->data, size, retval, duration);
        kfree_skb(skb);
        return ret;
 }
        retval = bpf_test_run(prog, &xdp, repeat, &duration);
        if (xdp.data != data + XDP_PACKET_HEADROOM)
                size = xdp.data_end - xdp.data;
-       ret = bpf_test_finish(uattr, xdp.data, size, retval, duration);
+       ret = bpf_test_finish(kattr, uattr, xdp.data, size, retval, duration);
        kfree(data);
        return ret;
 }