FAILED: patch "[PATCH] crypto: algif_skcipher - Fix race condition in" failed to apply to 3.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 3.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
1822793a523e5d5730b19cc21160ff1717421bc8Mon Sep 17 00:00:00 2001
From: Herbert Xu <[email protected]>
Date: Fri, 15 Jan 2016 22:02:20 +0800
Subject: [PATCH] crypto: algif_skcipher - Fix race condition in
skcipher_check_key
We need to lock the child socket in skcipher_check_key as otherwise two simultaneous calls can cause the parent socket to be freed.
Signed-off-by Herbert Xu <[email protected]>
crypto/algif_skcipher.c +6 -3
@@ -755,22 +755,23 @@ static struct proto_ops algif_skcipher_ops = {static int skcipher_check_key (struct socket *sock) { -int err; +int err =0 ;struct sock *psk;struct alg_sock *pask;struct skcipher_tfm *tfm;struct sock *sk = sock->sk;struct alg_sock *ask =alg_sk (sk); +lock_sock (sk);if (ask->refcnt) -return 0 ; + goto unlock_child; psk = ask->parent; pask =alg_sk (ask->parent); tfm = pask->private; err = -ENOKEY ; -lock_sock (psk); +lock_sock_nested (psk,SINGLE_DEPTH_NESTING );if (!tfm->has_key) goto unlock;
@@ -784,6 +785,8 @@ static int skcipher_check_key(struct socket *sock) unlock:release_sock (psk); +unlock_child: +release_sock (sk);return err; }