FAILED: patch "[PATCH] crypto: af_alg - Add nokey compatibility path" failed to apply to 3.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 3.10-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
37766586c965d63758ad542325a96d5384f4a8c9Mon Sep 17 00:00:00 2001
From: Herbert Xu <[email protected]>
Date: Mon, 4 Jan 2016 13:35:18 +0900
Subject: [PATCH] crypto: af_alg - Add nokey compatibility path
This patch adds a compatibility path to support old applications that do acept(2) before setkey.
Signed-off-by Herbert Xu <[email protected]>
crypto/af_alg.c +12 -1
@@ -76,6 +76,8 @@ int af_alg_register_type(const struct af_alg_type *type) goto unlock; type->ops->owner =THIS_MODULE ; +if (type->ops_nokey) + type->ops_nokey->owner =THIS_MODULE ; node->type = type;list_add (&node->list, &alg_types); err =0 ;
@@ -267,6 +269,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)const struct af_alg_type *type;struct sock *sk2;int err; +bool nokey;lock_sock (sk); type = ask->type;
@@ -285,12 +288,17 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)security_sk_clone (sk, sk2); err = type->accept (ask->private, sk2); + + nokey = err == -ENOKEY ; +if (nokey && type->accept_nokey) + err = type->accept_nokey (ask->private, sk2); +if (err) goto unlock; sk2->sk_family =PF_ALG ; -if (!ask->refcnt++) +if (nokey || !ask->refcnt++)sock_hold (sk);alg_sk (sk2)->parent = sk;alg_sk (sk2)->type = type;
@@ -298,6 +306,9 @@ int af_alg_accept(struct sock *sk, struct socket *newsock) newsock->ops = type->ops; newsock->state =SS_CONNECTED ; +if (nokey) + newsock->ops = type->ops_nokey; + err =0 ; unlock:
include/crypto/if_alg.h +2 -0
@@ -52,9 +52,11 @@ struct af_alg_type {void (*release)(void *private);int (*setkey)(void *private,const u8 *key,unsigned int keylen);int (*accept)(void *private,struct sock *sk); +int (*accept_nokey)(void *private,struct sock *sk);int (*setauthsize)(void *private,unsigned int authsize);struct proto_ops *ops; +struct proto_ops *ops_nokey;struct module *owner;char name[14 ]; };