* Linux 4.9.56
@ 2017-10-12 19:32 Greg KH
2017-10-12 19:32 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Greg KH @ 2017-10-12 19:32 UTC (permalink / raw)
To: linux-kernel, Andrew Morton, torvalds, stable; +Cc: lwn, Jiri Slaby
[-- Attachment #1: Type: text/plain, Size: 808 bytes --]
I'm announcing the release of the 4.9.56 kernel. It fixes a networking
bug in 4.9.55. Don't use 4.9.55, it's busted, sorry about that, I
should have held off and gotten more testing on it, my fault :(
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 +-
net/core/filter.c | 15 ++-------------
net/core/sock.c | 5 +----
3 files changed, 4 insertions(+), 18 deletions(-)
Greg Kroah-Hartman (2):
Revert "socket, bpf: fix possible use after free"
Linux 4.9.56
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Linux 4.9.56
2017-10-12 19:32 Linux 4.9.56 Greg KH
@ 2017-10-12 19:32 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2017-10-12 19:32 UTC (permalink / raw)
To: linux-kernel, Andrew Morton, torvalds, stable; +Cc: lwn, Jiri Slaby
diff --git a/Makefile b/Makefile
index 2a995675d6bf..feab5f5a507c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
VERSION = 4
PATCHLEVEL = 9
-SUBLEVEL = 55
+SUBLEVEL = 56
EXTRAVERSION =
NAME = Roaring Lionus
diff --git a/net/core/filter.c b/net/core/filter.c
index bfeedbbde214..4eb4ce0aeef4 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -937,31 +937,20 @@ void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
/* try to charge the socket memory if there is space available
* return true on success
*/
-static bool __sk_filter_charge(struct sock *sk, struct sk_filter *fp)
+bool sk_filter_charge(struct sock *sk, struct sk_filter *fp)
{
u32 filter_size = bpf_prog_size(fp->prog->len);
/* same check as in sock_kmalloc() */
if (filter_size <= sysctl_optmem_max &&
atomic_read(&sk->sk_omem_alloc) + filter_size < sysctl_optmem_max) {
+ atomic_inc(&fp->refcnt);
atomic_add(filter_size, &sk->sk_omem_alloc);
return true;
}
return false;
}
-bool sk_filter_charge(struct sock *sk, struct sk_filter *fp)
-{
- if (!atomic_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)
{
struct sock_filter *old_prog;
diff --git a/net/core/sock.c b/net/core/sock.c
index 2a77cc50f021..231c38d91855 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1528,16 +1528,13 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
sock_reset_flag(newsk, SOCK_DONE);
skb_queue_head_init(&newsk->sk_error_queue);
- rcu_read_lock();
- filter = rcu_dereference(sk->sk_filter);
+ filter = rcu_dereference_protected(newsk->sk_filter, 1);
if (filter != NULL)
/* though it's an empty new sock, the charging may fail
* if sysctl_optmem_max was changed between creation of
* original socket and cloning
*/
is_charged = sk_filter_charge(newsk, filter);
- RCU_INIT_POINTER(newsk->sk_filter, filter);
- rcu_read_unlock();
if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {
/* We need to make sure that we don't uncharge the new
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-10-12 19:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-12 19:32 Linux 4.9.56 Greg KH
2017-10-12 19:32 ` Greg KH
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.