]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - kernel/bpf/cgroup.c
Merge tag 'libnvdimm-fixes-4.20-rc6' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / kernel / bpf / cgroup.c
index 00f6ed2e4f9a82403cd3c6b6bdc80cbb43a9da0b..9425c2fb872f78f1a0c6cb1bcd00019e78c741ba 100644 (file)
@@ -553,6 +553,7 @@ int __cgroup_bpf_run_filter_skb(struct sock *sk,
 {
        unsigned int offset = skb->data - skb_network_header(skb);
        struct sock *save_sk;
+       void *saved_data_end;
        struct cgroup *cgrp;
        int ret;
 
@@ -566,8 +567,13 @@ int __cgroup_bpf_run_filter_skb(struct sock *sk,
        save_sk = skb->sk;
        skb->sk = sk;
        __skb_push(skb, offset);
+
+       /* compute pointers for the bpf prog */
+       bpf_compute_and_save_data_end(skb, &saved_data_end);
+
        ret = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], skb,
                                 bpf_prog_run_save_cb);
+       bpf_restore_data_end(skb, saved_data_end);
        __skb_pull(skb, offset);
        skb->sk = save_sk;
        return ret == 1 ? 0 : -EPERM;