diff options
author | David S. Miller | 2017-10-06 02:57:03 +0200 |
---|---|---|
committer | David S. Miller | 2017-10-06 03:19:22 +0200 |
commit | 53954cf8c5d205624167a2bfd117cc0c1a5f3c6d (patch) | |
tree | a287f0c80eb616758bb5212523c8fb3d8fc350a4 /net/core/filter.c | |
parent | Merge branch 'bpftool' (diff) | |
parent | Merge tag 'pm-4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafa... (diff) | |
download | kernel-qcow2-linux-53954cf8c5d205624167a2bfd117cc0c1a5f3c6d.tar.gz kernel-qcow2-linux-53954cf8c5d205624167a2bfd117cc0c1a5f3c6d.tar.xz kernel-qcow2-linux-53954cf8c5d205624167a2bfd117cc0c1a5f3c6d.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Just simple overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/filter.c')
-rw-r--r-- | net/core/filter.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index 9b6e7e84aafd..b7e8caa1e790 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -989,10 +989,14 @@ static bool __sk_filter_charge(struct sock *sk, struct sk_filter *fp) bool sk_filter_charge(struct sock *sk, struct sk_filter *fp) { - bool ret = __sk_filter_charge(sk, fp); - if (ret) - refcount_inc(&fp->refcnt); - return ret; + if (!refcount_inc_not_zero(&fp->refcnt)) + return false; + + if (!__sk_filter_charge(sk, fp)) { + sk_filter_release(fp); + return false; + } + return true; } static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) |