Lines Matching refs:alg

33 static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg);
35 struct crypto_alg *crypto_mod_get(struct crypto_alg *alg)
37 return try_module_get(alg->cra_module) ? crypto_alg_get(alg) : NULL;
41 void crypto_mod_put(struct crypto_alg *alg)
43 struct module *module = alg->cra_module;
45 crypto_alg_put(alg);
52 return larval->alg.cra_driver_name[0];
58 struct crypto_alg *q, *alg = NULL;
84 if (alg)
85 crypto_mod_put(alg);
86 alg = q;
92 return alg;
95 static void crypto_larval_destroy(struct crypto_alg *alg)
97 struct crypto_larval *larval = (void *)alg;
99 BUG_ON(!crypto_is_larval(alg));
114 larval->alg.cra_flags = CRYPTO_ALG_LARVAL | type;
115 larval->alg.cra_priority = -1;
116 larval->alg.cra_destroy = crypto_larval_destroy;
118 strlcpy(larval->alg.cra_name, name, CRYPTO_MAX_ALG_NAME);
128 struct crypto_alg *alg;
135 refcount_set(&larval->alg.cra_refcnt, 2);
138 alg = __crypto_alg_lookup(name, type, mask);
139 if (!alg) {
140 alg = &larval->alg;
141 list_add(&alg->cra_list, &crypto_alg_list);
145 if (alg != &larval->alg) {
147 if (crypto_is_larval(alg))
148 alg = crypto_larval_wait(alg);
151 return alg;
154 void crypto_larval_kill(struct crypto_alg *alg)
156 struct crypto_larval *larval = (void *)alg;
159 list_del(&alg->cra_list);
162 crypto_alg_put(alg);
166 static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg)
168 struct crypto_larval *larval = (void *)alg;
174 alg = larval->adult;
176 alg = ERR_PTR(-EINTR);
178 alg = ERR_PTR(-ETIMEDOUT);
179 else if (!alg)
180 alg = ERR_PTR(-ENOENT);
181 else if (IS_ERR(alg))
184 !(alg->cra_flags & CRYPTO_ALG_TESTED))
185 alg = ERR_PTR(-EAGAIN);
186 else if (!crypto_mod_get(alg))
187 alg = ERR_PTR(-EAGAIN);
188 crypto_mod_put(&larval->alg);
190 return alg;
196 struct crypto_alg *alg;
203 alg = __crypto_alg_lookup(name, type | test, mask | test);
204 if (!alg && test) {
205 alg = __crypto_alg_lookup(name, type, mask);
206 if (alg && !crypto_is_larval(alg)) {
208 crypto_mod_put(alg);
209 alg = ERR_PTR(-ELIBBAD);
214 return alg;
220 struct crypto_alg *alg;
228 alg = crypto_alg_lookup(name, type, mask);
229 if (!alg && !(mask & CRYPTO_NOLOAD)) {
236 alg = crypto_alg_lookup(name, type, mask);
239 if (!IS_ERR_OR_NULL(alg) && crypto_is_larval(alg))
240 alg = crypto_larval_wait(alg);
241 else if (!alg)
242 alg = crypto_larval_add(name, type, mask);
244 return alg;
263 struct crypto_alg *alg;
284 alg = crypto_larval_wait(larval);
287 alg = ERR_PTR(-ENOENT);
290 return alg;
311 static unsigned int crypto_ctxsize(struct crypto_alg *alg, u32 type, u32 mask)
313 const struct crypto_type *type_obj = alg->cra_type;
316 len = alg->cra_alignmask & ~(crypto_tfm_ctx_alignment() - 1);
318 return len + type_obj->ctxsize(alg, type, mask);
320 switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
325 len += crypto_cipher_ctxsize(alg);
329 len += crypto_compress_ctxsize(alg);
336 void crypto_shoot_alg(struct crypto_alg *alg)
339 alg->cra_flags |= CRYPTO_ALG_DYING;
344 struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type,
351 tfm_size = sizeof(*tfm) + crypto_ctxsize(alg, type, mask);
356 tfm->__crt_alg = alg;
362 if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))
371 crypto_shoot_alg(alg);
408 struct crypto_alg *alg;
410 alg = crypto_alg_mod_lookup(alg_name, type, mask);
411 if (IS_ERR(alg)) {
412 err = PTR_ERR(alg);
416 tfm = __crypto_alloc_tfm(alg, type, mask);
420 crypto_mod_put(alg);
436 void *crypto_create_tfm_node(struct crypto_alg *alg,
447 total = tfmsize + sizeof(*tfm) + frontend->extsize(alg);
454 tfm->__crt_alg = alg;
461 if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))
470 crypto_shoot_alg(alg);
525 struct crypto_alg *alg;
527 alg = crypto_find_alg(alg_name, frontend, type, mask);
528 if (IS_ERR(alg)) {
529 err = PTR_ERR(alg);
533 tfm = crypto_create_tfm_node(alg, frontend, node);
537 crypto_mod_put(alg);
563 struct crypto_alg *alg;
568 alg = tfm->__crt_alg;
570 if (!tfm->exit && alg->cra_exit)
571 alg->cra_exit(tfm);
573 crypto_mod_put(alg);
581 struct crypto_alg *alg = crypto_alg_mod_lookup(name, type, mask);
583 if (!IS_ERR(alg)) {
584 crypto_mod_put(alg);