mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Merge crypto tree to pick up the af_alg cbc(paes) patch. In the merge commit add cbc(paes) to the algorithm white-list.
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/net.h>
|
||||
#include <linux/string.h>
|
||||
#include <net/sock.h>
|
||||
|
||||
static const struct af_alg_allowlist_entry skcipher_allowlist[] = {
|
||||
@@ -40,6 +41,7 @@ static const struct af_alg_allowlist_entry skcipher_allowlist[] = {
|
||||
{ "cbc(aes)", true }, /* iwd */
|
||||
{ "cbc(des)", true }, /* iwd */
|
||||
{ "cbc(des3_ede)", true }, /* iwd */
|
||||
{ "cbc(paes)", false }, /* caam and others */
|
||||
{ "ctr(aes)", true }, /* iwd */
|
||||
{ "ecb(aes)", true }, /* iwd, bluez */
|
||||
{ "ecb(des)", true }, /* iwd */
|
||||
@@ -326,13 +328,17 @@ static struct proto_ops algif_skcipher_ops_nokey = {
|
||||
|
||||
static void *skcipher_bind(const char *name)
|
||||
{
|
||||
u32 mask = AF_ALG_CRYPTOAPI_MASK;
|
||||
int err;
|
||||
|
||||
err = af_alg_check_restriction(name, skcipher_allowlist);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
return crypto_alloc_skcipher(name, 0, AF_ALG_CRYPTOAPI_MASK);
|
||||
if (strcmp(name, "cbc(paes)") == 0)
|
||||
mask = 0;
|
||||
|
||||
return crypto_alloc_skcipher(name, 0, mask);
|
||||
}
|
||||
|
||||
static void skcipher_release(void *private)
|
||||
|
||||
+1
-1
@@ -747,7 +747,7 @@ static int crypto_rfc4309_create(struct crypto_template *tmpl,
|
||||
|
||||
inst->alg.ivsize = 8;
|
||||
inst->alg.chunksize = crypto_aead_alg_chunksize(alg);
|
||||
inst->alg.maxauthsize = 16;
|
||||
inst->alg.maxauthsize = crypto_aead_alg_maxauthsize(alg);
|
||||
|
||||
inst->alg.base.cra_ctxsize = sizeof(struct crypto_rfc4309_ctx);
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ static int devm_qce_register_algs(struct qce_device *qce)
|
||||
ret = ops->register_algs(qce);
|
||||
if (ret) {
|
||||
for (j = i - 1; j >= 0; j--)
|
||||
ops->unregister_algs(qce);
|
||||
qce_ops[j]->unregister_algs(qce);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -677,7 +677,7 @@ static int starfive_aes_aead_do_one_req(struct crypto_engine *engine, void *areq
|
||||
|
||||
if (cryp->total_in)
|
||||
sg_zero_buffer(rctx->in_sg, sg_nents(rctx->in_sg),
|
||||
sg_dma_len(rctx->in_sg) - cryp->total_in,
|
||||
rctx->in_sg->length - cryp->total_in,
|
||||
cryp->total_in);
|
||||
|
||||
ctx->rctx = rctx;
|
||||
|
||||
@@ -45,7 +45,6 @@ struct tegra_aes_reqctx {
|
||||
|
||||
struct tegra_aead_ctx {
|
||||
struct tegra_se *se;
|
||||
unsigned int authsize;
|
||||
u32 alg;
|
||||
u32 key_id;
|
||||
u32 keylen;
|
||||
@@ -1290,7 +1289,7 @@ static int tegra_gcm_do_one_req(struct crypto_engine *engine, void *areq)
|
||||
if (rctx->encrypt)
|
||||
rctx->cryptlen = req->cryptlen;
|
||||
else
|
||||
rctx->cryptlen = req->cryptlen - ctx->authsize;
|
||||
rctx->cryptlen = req->cryptlen - rctx->authsize;
|
||||
|
||||
memcpy(rctx->iv, req->iv, GCM_AES_IV_SIZE);
|
||||
rctx->iv[3] = (1 << 24);
|
||||
@@ -1394,8 +1393,6 @@ static int tegra_aead_cra_init(struct crypto_aead *tfm)
|
||||
|
||||
static int tegra_ccm_setauthsize(struct crypto_aead *tfm, unsigned int authsize)
|
||||
{
|
||||
struct tegra_aead_ctx *ctx = crypto_aead_ctx(tfm);
|
||||
|
||||
switch (authsize) {
|
||||
case 4:
|
||||
case 6:
|
||||
@@ -1404,28 +1401,15 @@ static int tegra_ccm_setauthsize(struct crypto_aead *tfm, unsigned int authsize
|
||||
case 12:
|
||||
case 14:
|
||||
case 16:
|
||||
break;
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ctx->authsize = authsize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tegra_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize)
|
||||
{
|
||||
struct tegra_aead_ctx *ctx = crypto_aead_ctx(tfm);
|
||||
int ret;
|
||||
|
||||
ret = crypto_gcm_check_authsize(authsize);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ctx->authsize = authsize;
|
||||
|
||||
return 0;
|
||||
return crypto_gcm_check_authsize(authsize);
|
||||
}
|
||||
|
||||
static void tegra_aead_cra_exit(struct crypto_aead *tfm)
|
||||
|
||||
+2
-1
@@ -880,6 +880,7 @@ int rhashtable_walk_start_check(struct rhashtable_iter *iter)
|
||||
iter->walker.tbl = rht_dereference_rcu(ht->tbl, ht);
|
||||
iter->slot = 0;
|
||||
iter->skip = 0;
|
||||
iter->p = NULL;
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@@ -1262,7 +1263,7 @@ static void rhashtable_free_one(struct rhashtable *ht, struct rhash_head *obj,
|
||||
list = container_of(obj, struct rhlist_head, rhead);
|
||||
do {
|
||||
obj = &list->rhead;
|
||||
list = rht_dereference(list->next, ht);
|
||||
list = rcu_dereference_raw(list->next);
|
||||
free_fn(rht_obj(ht, obj), arg);
|
||||
} while (list);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user