Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0155-4.9.56-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (show annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 2202 byte(s)
-added kerenl-alx-legacy pkg
1 diff --git a/Makefile b/Makefile
2 index 2a995675d6bf..feab5f5a507c 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 55
9 +SUBLEVEL = 56
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/net/core/filter.c b/net/core/filter.c
14 index bfeedbbde214..4eb4ce0aeef4 100644
15 --- a/net/core/filter.c
16 +++ b/net/core/filter.c
17 @@ -937,31 +937,20 @@ void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
18 /* try to charge the socket memory if there is space available
19 * return true on success
20 */
21 -static bool __sk_filter_charge(struct sock *sk, struct sk_filter *fp)
22 +bool sk_filter_charge(struct sock *sk, struct sk_filter *fp)
23 {
24 u32 filter_size = bpf_prog_size(fp->prog->len);
25
26 /* same check as in sock_kmalloc() */
27 if (filter_size <= sysctl_optmem_max &&
28 atomic_read(&sk->sk_omem_alloc) + filter_size < sysctl_optmem_max) {
29 + atomic_inc(&fp->refcnt);
30 atomic_add(filter_size, &sk->sk_omem_alloc);
31 return true;
32 }
33 return false;
34 }
35
36 -bool sk_filter_charge(struct sock *sk, struct sk_filter *fp)
37 -{
38 - if (!atomic_inc_not_zero(&fp->refcnt))
39 - return false;
40 -
41 - if (!__sk_filter_charge(sk, fp)) {
42 - sk_filter_release(fp);
43 - return false;
44 - }
45 - return true;
46 -}
47 -
48 static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp)
49 {
50 struct sock_filter *old_prog;
51 diff --git a/net/core/sock.c b/net/core/sock.c
52 index 2a77cc50f021..231c38d91855 100644
53 --- a/net/core/sock.c
54 +++ b/net/core/sock.c
55 @@ -1528,16 +1528,13 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
56 sock_reset_flag(newsk, SOCK_DONE);
57 skb_queue_head_init(&newsk->sk_error_queue);
58
59 - rcu_read_lock();
60 - filter = rcu_dereference(sk->sk_filter);
61 + filter = rcu_dereference_protected(newsk->sk_filter, 1);
62 if (filter != NULL)
63 /* though it's an empty new sock, the charging may fail
64 * if sysctl_optmem_max was changed between creation of
65 * original socket and cloning
66 */
67 is_charged = sk_filter_charge(newsk, filter);
68 - RCU_INIT_POINTER(newsk->sk_filter, filter);
69 - rcu_read_unlock();
70
71 if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {
72 /* We need to make sure that we don't uncharge the new