linux/crypto/api.c
<<
typ3.1submit">Searchv 1div id.1file_contents""
. .11/a>1spa= class="comment">/*1/spa="v. .21/a>1spa= class="comment"> * Scatterlist Cryptographic API.1/spa="v. .31/a>1spa= class="comment"> *1/spa="v. .41/a>1spa= class="comment"> * Copyright (c) 2002 Jam3s Morris <jmorris@intercode.com.au>1/spa="v. .51/a>1spa= class="comment"> * Copyright (c) 2002 David S. Miller (davem@redhat.com)1/spa="v. .61/a>1spa= class="comment"> * Copyright (c) 2005 Herbert Xu <herbert@gondor.apa=a.org.au>1/spa="v. .71/a>1spa= class="comment"> *1/spa="v. .81/a>1spa= class="comment"> * Porlue=s derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no>1/spa="v. .91/a>1spa= class="comment"> * and Nettle, by Niels Möller.1/spa="v. ion a>1spa= class="comment"> *1/spa="v. 111/a>1spa= class="comment"> * This program is free software; you ca= redistribute it and/or modify it1/spa="v. 121/a>1spa= class="comment"> * under the terms of the GNU General Public License as published by the Free1/spa="v. 131/a>1spa= class="comment"> * Software Foundalue=; either vers	  >2 of the License, or (at your value=)1/spa="v. 141/a>1spa= class="comment"> * any later vers	  .1/spa="v. 151/a>1spa= class="comment"> *1/spa="v. 161/a>1spa= class="comment"> */1/spa="v. 171/a>v. 181/a>#include <linux/err.h1/a>>v. 191/a>#include <linux/errno.h1/a>>v. 201/a>#include <linux/kernel.h1/a>>v. 211/a>#include <linux/kmod.h1/a>>v. 221/a>#include <linux/module.h1/a>>v. 231/a>#include <linux/param.h1/a>>v. 241/a>#include <linux/sched.h1/a>>v. 251/a>#include <linux/slab.h1/a>>v. 261/a>#include <linux/string.h1/a>>v. 271/a>#include "internal.h1/a>"v. 281/a>v. 291/a>1a href="+code=LIST_HEAD" class="sref">LIST_HEAD1/a>(1a href="+code=crypto_alg_list" class="sref">crypto_alg_list1/a>);v. 301/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_list" class="sref">crypto_alg_list1/a>);v. 311/a>1a href="+code=DECLARE_RWSEM" class="sref">DECLARE_RWSEM1/a>(1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v. 321/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v. 331/a>v. 341/a>1a href="+code=BLOCKING_NOTIFIER_HEAD" class="sref">BLOCKING_NOTIFIER_HEAD1/a>(1a href="+code=crypto_chain" class="sref">crypto_chain1/a>);v. 351/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_chain" class="sref">crypto_chain1/a>);v. 361/a>v. 371/a>static 1a href="+code=inline" class="sref">inline1/a> struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_alg_get" class="sref">crypto_alg_get1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v. 381/a>{v. 391/a>        1a href="+code=atomic_inc" class="sref">atomic_inc1/a>(&1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_refcnt" class="sref">cra_refcnt1/a>);v. 401/a>        return 1a href="+code=alg" class="sref">alg1/a>;v. 411/a>}v. 421/a>v. 431/a>struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_mod_get" class="sref">crypto_mod_get1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v. 441/a>{v. 451/a>        return 1a href="+code=try_module_get" class="sref">try_module_get1/a>(1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_module" class="sref">cra_module1/a>) ? 1a href="+code=crypto_alg_get" class="sref">crypto_alg_get1/a>(1a href="+code=alg" class="sref">alg1/a>) : 1a href="+code=NULL" class="sref">NULL1/a>;v. 461/a>}v. 471/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_mod_get" class="sref">crypto_mod_get1/a>);v. 481/a>v. 491/a>void 1a href="+code=crypto_mod_put" class="sref">crypto_mod_put1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v. 501/a>{v. 511/a>        struct 1a href="+code=module" class="sref">module1/a> *1a href="+code=module" class="sref">module1/a> = 1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_module" class="sref">cra_module1/a>;v. 521/a>v. 531/a>        1a href="+code=crypto_alg_put" class="sref">crypto_alg_put1/a>(1a href="+code=alg" class="sref">alg1/a>);v. 541/a>        1a href="+code=module_put" class="sref">module_put1/a>(1a href="+code=module" class="sref">module1/a>);v. 551/a>}v. 561/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_mod_put" class="sref">crypto_mod_put1/a>);v. 571/a>v. 581/a>static 1a href="+code=inline" class="sref">inline1/a> int 1a href="+code=crypto_is_test_larval" class="sref">crypto_is_test_larval1/a>(struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a>)v. 591/a>{v. 601/a>        return 1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_driver_nam3" class="sref">cra_driver_nam31/a>[0];v. 611/a>}v. 621/a>v. 631/a>static struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=__crypto_alg_lookup" class="sref">__crypto_alg_lookup1/a>(const char *1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>,v. 641/a>                                              1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v. 651/a>{v. 661/a>        struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=q" class="sref">q1/a>, *1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=NULL" class="sref">NULL1/a>;v. 671/a>        int 1a href="+code=best" class="sref">best1/a> = -2;v. 681/a>v. 691/a>        1a href="+code=list_for_each_entry" class="sref">list_for_each_entry1/a>(1a href="+code=q" class="sref">q1/a>, &1a href="+code=crypto_alg_list" class="sref">crypto_alg_list1/a>, 1a href="+code=cra_list" class="sref">cra_list1/a>) {v. 701/a>                int 1a href="+code=exact" class="sref">exact1/a>, 1a href="+code=fuzzy" class="sref">fuzzy1/a>;v. 711/a>v. 721/a>                if (1a href="+code=crypto_is_moribund" class="sref">crypto_is_moribund1/a>(1a href="+code=q" class="sref">q1/a>))v. 731/a>                        continue;v. 741/a>v. 751/a>                if ((1a href="+code=q" class="sref">q1/a>->1a href="+code=cra_flags" class="sref">cra_flags1/a> ^ 1a href="+code=typ3" class="sref">typ31/a>) & 1a href="+code=mask" class="sref">mask1/a>)v. 761/a>                        continue;v. 771/a>v. 781/a>                if (1a href="+code=crypto_is_larval" class="sref">crypto_is_larval1/a>(1a href="+code=q" class="sref">q1/a>) &&v. 791/a>                    !1a href="+code=crypto_is_test_larval" class="sref">crypto_is_test_larval1/a>((struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *)1a href="+code=q" class="sref">q1/a>) &&v. 801/a>                    ((struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *)1a href="+code=q" class="sref">q1/a>)->1a href="+code=mask" class="sref">mask1/a> != 1a href="+code=mask" class="sref">mask1/a>)v. 811/a>                        continue;v. 821/a>v. 831/a>                1a href="+code=exact" class="sref">exact1/a> = !1a href="+code=strcmp" class="sref">strcmp1/a>(1a href="+code=q" class="sref">q1/a>->1a href="+code=cra_driver_nam3" class="sref">cra_driver_nam31/a>, 1a href="+code=nam3" class="sref">nam31/a>);v. 841/a>                1a href="+code=fuzzy" class="sref">fuzzy1/a> = !1a href="+code=strcmp" class="sref">strcmp1/a>(1a href="+code=q" class="sref">q1/a>->1a href="+code=cra_nam3" class="sref">cra_nam31/a>, 1a href="+code=nam3" class="sref">nam31/a>);v. 851/a>                if (!1a href="+code=exact" class="sref">exact1/a> && !(1a href="+code=fuzzy" class="sref">fuzzy1/a> && 1a href="+code=q" class="sref">q1/a>->1a href="+code=cra_priority" class="sref">cra_priority1/a> > 1a href="+code=best" class="sref">best1/a>))v. 861/a>                        continue;v. 871/a>v. 881/a>                if (1a href="+code=unlikely" class="sref">unlikely1/a>(!1a href="+code=crypto_mod_get" class="sref">crypto_mod_get1/a>(1a href="+code=q" class="sref">q1/a>)))v. 891/a>                        continue;v. 901/a>v. 911/a>                1a href="+code=best" class="sref">best1/a> = 1a href="+code=q" class="sref">q1/a>->1a href="+code=cra_priority" class="sref">cra_priority1/a>;v. 921/a>                if (1a href="+code=alg" class="sref">alg1/a>)v. 931/a>                        1a href="+code=crypto_mod_put" class="sref">crypto_mod_put1/a>(1a href="+code=alg" class="sref">alg1/a>);v. 941/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=q" class="sref">q1/a>;v. 951/a>v. 961/a>                if (1a href="+code=exact" class="sref">exact1/a>)v. 971/a>                        break;v. 981/a>        }v. 991/a>v.1001/a>        return 1a href="+code=alg" class="sref">alg1/a>;v.1011/a>}v.1021/a>v.1031/a>static void 1a href="+code=crypto_larval_destroy" class="sref">crypto_larval_destroy1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v.1041/a>{v.1051/a>        struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a> = (void *)1a href="+code=alg" class="sref">alg1/a>;v.1061/a>v.1071/a>        1a href="+code=BUG_ON" class="sref">BUG_ON1/a>(!1a href="+code=crypto_is_larval" class="sref">crypto_is_larval1/a>(1a href="+code=alg" class="sref">alg1/a>));v.1081/a>        if (1a href="+code=larval" class="sref">larval1/a>->1a href="+code=adult" class="sref">adult1/a>)v.1091/a>                1a href="+code=crypto_mod_put" class="sref">crypto_mod_put1/a>(1a href="+code=larval" class="sref">larval1/a>->1a href="+code=adult" class="sref">adult1/a>);v.1101/a>        1a href="+code=kfree" class="sref">kfree1/a>(1a href="+code=larval" class="sref">larval1/a>);v.1111/a>}v.1121/a>v.1131/a>struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=crypto_larval_alloc" class="sref">crypto_larval_alloc1/a>(const char *1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.1141/a>{v.1151/a>        struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a>;v.1161/a>v.1171/a>        1a href="+code=larval" class="sref">larval1/a> = 1a href="+code=kzalloc" class="sref">kzalloc1/a>(sizeof(*1a href="+code=larval" class="sref">larval1/a>), 1a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL1/a>);v.1181/a>        if (!1a href="+code=larval" class="sref">larval1/a>)v.1191/a>                return 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=ENOMEM" class="sref">ENOMEM1/a>);v.1201/a>v.1211/a>        1a href="+code=larval" class="sref">larval1/a>->1a href="+code=mask" class="sref">mask1/a> = 1a href="+code=mask" class="sref">mask1/a>;v.1221/a>        1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_flags" class="sref">cra_flags1/a> = 1a href="+code=CRYPTO_ALG_LARVAL" class="sref">CRYPTO_ALG_LARVAL1/a> | 1a href="+code=typ3" class="sref">typ31/a>;v.1231/a>        1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_priority" class="sref">cra_priority1/a> = -1;v.1241/a>        1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_destroy" class="sref">cra_destroy1/a> = 1a href="+code=crypto_larval_destroy" class="sref">crypto_larval_destroy1/a>;v.1251/a>v.1261/a>        1a href="+code=strlcpy" class="sref">strlcpy1/a>(1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_nam3" class="sref">cra_nam31/a>, 1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=CRYPTO_MAX_ALG_NAME" class="sref">CRYPTO_MAX_ALG_NAME1/a>);v.1271/a>        1a href="+code=init_complelue=" class="sref">init_complelue=1/a>(&1a href="+code=larval" class="sref">larval1/a>->1a href="+code=complelue=" class="sref">complelue=1/a>);v.1281/a>v.1291/a>        return 1a href="+code=larval" class="sref">larval1/a>;v.1301/a>}v.1311/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_larval_alloc" class="sref">crypto_larval_alloc1/a>);v.1321/a>v.1331/a>static struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_larval_add" class="sref">crypto_larval_add1/a>(const char *1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>,v.1341/a>                                            1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.1351/a>{v.1361/a>        struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>;v.1371/a>        struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a>;v.1381/a>v.1391/a>        1a href="+code=larval" class="sref">larval1/a> = 1a href="+code=crypto_larval_alloc" class="sref">crypto_larval_alloc1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.1401/a>        if (1a href="+code=IS_ERR" class="sref">IS_ERR1/a>(1a href="+code=larval" class="sref">larval1/a>))v.1411/a>                return 1a href="+code=ERR_CAST" class="sref">ERR_CAST1/a>(1a href="+code=larval" class="sref">larval1/a>);v.1421/a>v.1431/a>        1a href="+code=atomic_set" class="sref">atomic_set1/a>(&1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>.1a href="+code=cra_refcnt" class="sref">cra_refcnt1/a>, 2);v.1441/a>v.1451/a>        1a href="+code=down_writ3" class="sref">down_writ31/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.1461/a>        1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=__crypto_alg_lookup" class="sref">__crypto_alg_lookup1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.1471/a>        if (!1a href="+code=alg" class="sref">alg1/a>) {v.1481/a>                1a href="+code=alg" class="sref">alg1/a> = &1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>;v.1491/a>                1a href="+code=list_add" class="sref">list_add1/a>(&1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_list" class="sref">cra_list1/a>, &1a href="+code=crypto_alg_list" class="sref">crypto_alg_list1/a>);v.1501/a>        }v.1511/a>        1a href="+code=up_writ3" class="sref">up_writ31/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.1521/a>v.1531/a>        if (1a href="+code=alg" class="sref">alg1/a> != &1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>)v.1541/a>                1a href="+code=kfree" class="sref">kfree1/a>(1a href="+code=larval" class="sref">larval1/a>);v.1551/a>v.1561/a>        return 1a href="+code=alg" class="sref">alg1/a>;v.1571/a>}v.1581/a>v.1591/a>void 1a href="+code=crypto_larval_kill" class="sref">crypto_larval_kill1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v.1601/a>{v.1611/a>        struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a> = (void *)1a href="+code=alg" class="sref">alg1/a>;v.1621/a>v.1631/a>        1a href="+code=down_writ3" class="sref">down_writ31/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.1641/a>        1a href="+code=list_del" class="sref">list_del1/a>(&1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_list" class="sref">cra_list1/a>);v.1651/a>        1a href="+code=up_writ3" class="sref">up_writ31/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.1661/a>        1a href="+code=complele_all" class="sref">complele_all1/a>(&1a href="+code=larval" class="sref">larval1/a>->1a href="+code=complelue=" class="sref">complelue=1/a>);v.1671/a>        1a href="+code=crypto_alg_put" class="sref">crypto_alg_put1/a>(1a href="+code=alg" class="sref">alg1/a>);v.1681/a>}v.1691/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_larval_kill" class="sref">crypto_larval_kill1/a>);v.1701/a>v.1711/a>static struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_larval_wait" class="sref">crypto_larval_wait1/a>(struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>)v.1721/a>{v.1731/a>        struct 1a href="+code=crypto_larval" class="sref">crypto_larval1/a> *1a href="+code=larval" class="sref">larval1/a> = (void *)1a href="+code=alg" class="sref">alg1/a>;v.1741/a>        long 1a href="+code=timeout" class="sref">timeout1/a>;v.1751/a>v.1761/a>        1a href="+code=timeout" class="sref">timeout1/a> = 1a href="+code=wait_for_complelue=_interruptible_timeout" class="sref">wait_for_complelue=_interruptible_timeout1/a>(v.1771/a>                &1a href="+code=larval" class="sref">larval1/a>->1a href="+code=complelue=" class="sref">complelue=1/a>, 60 * 1a href="+code=HZ" class="sref">HZ1/a>);v.1781/a>v.1791/a>        1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=larval" class="sref">larval1/a>->1a href="+code=adult" class="sref">adult1/a>;v.1801/a>        if (1a href="+code=timeout" class="sref">timeout1/a> < 0)v.1811/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=EINTR" class="sref">EINTR1/a>);v.1821/a>        else if (!1a href="+code=timeout" class="sref">timeout1/a>)v.1831/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=ETIMEDOUT" class="sref">ETIMEDOUT1/a>);v.1841/a>        else if (!1a href="+code=alg" class="sref">alg1/a>)v.1851/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=ENOENT" class="sref">ENOENT1/a>);v.1861/a>        else if (1a href="+code=crypto_is_test_larval" class="sref">crypto_is_test_larval1/a>(1a href="+code=larval" class="sref">larval1/a>) &&v.1871/a>                 !(1a href="+code=alg" class="sref">alg1/a>->1a href="+code=cra_flags" class="sref">cra_flags1/a> & 1a href="+code=CRYPTO_ALG_TESTED" class="sref">CRYPTO_ALG_TESTED1/a>))v.1881/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=EAGAIN" class="sref">EAGAIN1/a>);v.1891/a>        else if (!1a href="+code=crypto_mod_get" class="sref">crypto_mod_get1/a>(1a href="+code=alg" class="sref">alg1/a>))v.1901/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=EAGAIN" class="sref">EAGAIN1/a>);v.1911/a>        1a href="+code=crypto_mod_put" class="sref">crypto_mod_put1/a>(&1a href="+code=larval" class="sref">larval1/a>->1a href="+code=alg" class="sref">alg1/a>);v.1921/a>v.1931/a>        return 1a href="+code=alg" class="sref">alg1/a>;v.1941/a>}v.1951/a>v.1961/a>struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>(const char *1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.1971/a>{v.1981/a>        struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>;v.1991/a>v.2001/a>        1a href="+code=down_read" class="sref">down_read1/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.2011/a>        1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=__crypto_alg_lookup" class="sref">__crypto_alg_lookup1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.2021/a>        1a href="+code=up_read" class="sref">up_read1/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.2031/a>v.2041/a>        return 1a href="+code=alg" class="sref">alg1/a>;v.2051/a>}v.2061/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>);v.2071/a>v.2081/a>struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=crypto_larval_lookup" class="sref">crypto_larval_lookup1/a>(const char *1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.2091/a>{v.2101/a>        struct 1a href="+code=crypto_alg" class="sref">crypto_alg1/a> *1a href="+code=alg" class="sref">alg1/a>;v.2111/a>v.2121/a>        if (!1a href="+code=nam3" class="sref">nam31/a>)v.2131/a>                return 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=ENOENT" class="sref">ENOENT1/a>);v.2141/a>v.2151/a>        1a href="+code=mask" class="sref">mask1/a> &= ~(1a href="+code=CRYPTO_ALG_LARVAL" class="sref">CRYPTO_ALG_LARVAL1/a> | 1a href="+code=CRYPTO_ALG_DEAD" class="sref">CRYPTO_ALG_DEAD1/a>);v.2161/a>        1a href="+code=typ3" class="sref">typ31/a> &= 1a href="+code=mask" class="sref">mask1/a>;v.2171/a>v.2181/a>        1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.2191/a>        if (!1a href="+code=alg" class="sref">alg1/a>) {v.2201/a>                1a href="+code=request_module" class="sref">request_module1/a>(1span class="string">"%s", 1a href="+code=nam3" class="sref">nam31/a>);v.2211/a>v.2221/a>                if (!((1a href="+code=typ3" class="sref">typ31/a> ^ 1a href="+code=CRYPTO_ALG_NEED_FALLBACK" class="sref">CRYPTO_ALG_NEED_FALLBACK1/a>) & 1a href="+code=mask" class="sref">mask1/a> &v.2231/a>                      1a href="+code=CRYPTO_ALG_NEED_FALLBACK" class="sref">CRYPTO_ALG_NEED_FALLBACK1/a>))v.2241/a>                        1a href="+code=request_module" class="sref">request_module1/a>(1span class="string">"%s-all", 1a href="+code=nam3" class="sref">nam31/a>);v.2251/a>v.2261/a>                1a href="+code=alg" class="sref">alg1/a> = 1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.2271/a>        }v.2281/a>v.2291/a>        if (1a href="+code=alg" class="sref">alg1/a>)v.2301/a>                return 1a href="+code=crypto_is_larval" class="sref">crypto_is_larval1/a>(1a href="+code=alg" class="sref">alg1/a>) ? 1a href="+code=crypto_larval_wait" class="sref">crypto_larval_wait1/a>(1a href="+code=alg" class="sref">alg1/a>) : 1a href="+code=alg" class="sref">alg1/a>;v.2311/a>v.2321/a>        return 1a href="+code=crypto_larval_add" class="sref">crypto_larval_add1/a>(1a href="+code=nam3" class="sref">nam31/a>, 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.2331/a>}v.2341/a>1a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_larval_lookup" class="sref">crypto_larval_lookup1/a>);v.2351/a>v.2361/a>int 1a href="+code=crypto_probing_notify" class="sref">crypto_probing_notify1/a>(unsigned long 1a href="+code=val" class="sref">val1/a>, void *1a href="+code=v" class="sref">v1/a>)v.2371/a>{v.2381/a>        int 1a href="+code=ok" class="sref">ok1/a>;v.2391/a>v.2401/a>        1a href="+code=ok" class="sref">ok1/a> = 1a href="+code=block 6"sref">va"sref">ok1/a> = 1a href="+code=block 6"sref">va"sref">ok1/23.1L239""ref="ref="+code=ok" class="sref">ok13"sref">alg1/a> = 1a href="+code=ERR_Pid.1L238" class="Fode=ok" class="sref"lass="Fode=oL233" id.1L233" class href="crypto/api.c#L237" i7" class="line" nam3.1L237">.2371/a>{v(1a href id.1L230" class="l1a href="+code=block 6"srid.1L67" class="liOTIFY_DONE href="+code=bliOTIFY_DONE201/a>                1a href="+3" id.1L123" class="line" nam3.1L123">.1241a href="+code=CRYPTOs="string">"%s-all", 1a href="+code=nam3" class="sref">nam31/a>);vatomic_set1/2>(&am24+code=ERR_PTR" class="sref">ERR_PTR11a href="+code=block 6"sref">va"sref">ok1/23.1L239""ref="ref="+code=ok" class="sref">ok13"sref">alg1/a> = 1a href="+code=ERR_Pid.1L238" class="Fode=ok" class="sref"lass="Fode=oL233" id.1L233" class href="crypto/api.c#L237" i7" class="line" nam3.1L237">.2371/a>{v.124request_modul1a href="+code=EXPORT_SYMBn_writ3" 2lass="sref">down_writ31/2>(&am241/a>int 1a href="+code=crypto_" class="2ref">alg1/a> = 1a href="2code=24ypto/api.c#L157" id.1L157" class="le" nam3.1L239">.2391/a>valg1/a>) {valg1/a> = &2mp;1a2href="ref="+code=crypto_larval_lookup" class="sref">crypto_larval_lookup1/a>);vval1/a>, void *1a href="+{vlist_a2d1/a>241/a>        1a href="+code=ok"api.c#L152" id.1L151" class="line"2nam3.2L151">code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>(const char *1a href="+code=namef="ef">nam31/a>, 1a href="+code=typef="ef">nade=u32" class="sref">u321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.2091/a>{vup_writ31/a>(&2mp;1a2href="                1a href="+3" id.1L123" class="line" nam3.1L123">.1251a href="+codcode=alg" class="sref">alg1/a>;v.2111/a>valg1/a> != &21a hr25val1/a> *1a href="+code=larval" class="sre>;v.1381/a>vkfree1/a>21a hr2f="+code=larvad.1L239" class="line" nam3.1L239">.2391/a>v.1261/a>        return 1a href="+2ode=alg" 2lass="sref">alg1/a>;vCRYPTO_ALG_NEED_Fref="crypto/api.c"line" nam3.1L209">.2091/a>{a>))v.1881/a> >                1a href="+58" id.1L258" class="line" nam3.1L258">.25ref="+code=cra_flags"ED_FALLBACK" class="sref">CRYPTO_ALG_NEED_Fr1a href="+code=typ3" class="id.1L188" class="line" nam3.1L188">.1881/av.125+code=ERR_PTR" class="sref">ERR_PTR1lass="line" nam3.1L223">.223r1a href="+code=typ3" class="id.1L188" class="line" nam3.1L188">.1881/avcrypto_2arval25o/api.c#L230"v.261/a>static struct 1a href="+c2ode=crypt2_larval" class="sref">cr2pto_l26+code=mask" class="sref">mask1/a> = 1a href="+code=mask" cla>(1a href="+code=nam3" class="snam3" class="sref">nam31/a>, 1a href="+code=u3ref">typ31/a>, 1a href="+code=mask" class="sref">mask1/a>);v.2331/a>}v.126ypto/api.c#L213" id.1L233" classl1/a>))v.1411/a> ||l1/a>((struct 1a href="+cod">alg1/a>) ? 1a href="+code=crypto_larval_wait" class="srlass="line" nam3.1L141">.1411/a>                return 1a2n_writ3" 2lass="sref">down_writ31/2>(&am26/a>(-1a href="+code=ENOENT" class="sref">ENass="line" nam3.1L138">.1381/a>vlist_del1/a>(&2mp;1a261/a>        1a href="+code=maswrit3" cl2ss="sref">up_writ31/a>(&2mp;1a2href="+code=crypto_alg_sem" c1a href="+code=block 6"sref">va"sref">ok1ng 1a href="+code=val" class="sref">val1/a>, void *1a href="+c href="+code=typ3" claMSG.1L18REQUE/a>);v.1551/a>vcomplele_a2l1/a>261/a>        1a href="+code=la2pto_alg_p2t" class="sref">crypto_a2alg_p2/a>(1a href="+5 hrf">o2/a>(1a href="+5 hrf">o2/allock 6"srid.1L67" clas2/al.1L209" class="line" nam3.1L208">.1681/2>}valg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1pto_larval_wait1/a>(1a href="+code=alg" class="sref">alg1/a>) : 1a hrefaMSG.1L18REQUE/aL233" id.1L233" classlass="line" nam3.1L1558">.1881/>1a href="+code=EXPORT_S2MBOL_26e=crypto_mod_get" " class="line" nam3.1L188"0">.1701/2>vrequeste=alg" 1/a>(1a href="+code=larval" class="sref">larval1/a>->1a href="+code=adult" class="sr classlass="line" nam3.1L151">.1711/2>static struct 1a href="2code=27alg" class="sref">alg1/a> = 1a href="+code=ERR_PTR" class="sref">ERR_PTR1/a>(-1a href="+code=EINTR" class="sref">EINTR1/a>);v.1721/2>{vcrypto_2arval25o/3">.1731/2>        struct 1a href=2+code27t3" class="sref">down_writ31e=alg" class="l1/a>(struct 1a href="+code=crypto_alg" cllarval1/a>->1a href="+code=adult" class="sr classlass="line" nam3.1L151">.1381/a>        long 1a href="+2ode=t27lg" class="sref">alg1/a>;v.1751/2>v.1761/2>        1a href="+code=2imeou27L" class="sref">EXPORT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_lookup1/a>(const char *1a href="+code=namef="ef">nam31 classlass="line" nam3.1L1511/a>261/a>                &1a2href=27.1L218" class="line" nam3.1L218">.1781/2>vcrypto_ode=lop1a href="+code=CRYypto_ode=lop1p" cl>alg1/a> != &21a hr25val1/tfv;v 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.1791/2>        1a href="+code=2lg" c27d.1L210" class="line" nam3.1L210">.1801/2>        if (1a href="+c2de=ti2eout" class="sa>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;vERR_PTR1/a>(-1tfvalg1/a>);v *1a href="+codede=nt/a> lass">alg1/a>);v.1811/2>                1a href2"+cod28.1L232" class="line" nam3.1L232">.1821/2>        else if (!1a hr2f="+c28.1L123" class="line" nam3.1L123"t"+c_objode=u32" class="sre_obj="sr09" class="line" nam3.1L203">.1831/2>                1a href2"+cod2=alg" class="sref">algef">alg1/a>;valg1/a>);vcryptfvmask1/a>);v.1841/2>        else if (!1a hr2f="+c28" cl2ss="sref">list_del1/a>(&25">.1851/2>                1a href2"+cod2=alg" class="sswitchal" class="sref">crypto_tfvde=nat"+code=u32" class=25val1/tfvde=nat"+cp" class="sref">cryptfv.1861/2>        else if (1a hre2="+co2e=crypto_is_tecat" R_PTR1lass="line" nam3.1L22YPE_CIPHE="+code=EINTR" ce" nam3.1L22YPE_CIPHE=cryp: class="line" nam3.1L188"61/a>261/a>                 !(1a h2ef="+2ode=alg" class="sref">al" class="sref">crypto_is_larde=laipherlop1a href="+code=CRYypto_ode=laipherlop1p" class="sref">cryptfv.1781/2>                1a href2"+cod28.1L229" class="line" nam3.1L229">.1891/2>        else if (!1a hr2f="+c2de=crypto_mod_cat" R_PTR1lass="line" nam3.1L22YPE_COMPRESS"+code=EINTR" ce" nam3.1L22YPE_COMPRESScryp: class="line" nam3.1L188"0">.1901/2>                1a href2"+cod2=alg" class="sref">algal" class="sref">crypto_is_larde=laompresslop1a href="+code=CRYypto_ode=laompresslop1p" class="sref">cryptfv.1911/2>        1a href="+code=2rypto29.1L232" class="line" nam3.1L232">.1921/2>v.1831/2>        return 1a href=2+code29alg" class="sref">algbreak33" class="line" nam3.1L231">.1841/2>}v.124re5">.1951/2>v.1961/2>struct 1a href="+code=c2ypto_29ass="sref">typ31/a> &= 1BUG261/a>{v);v | 1a href="+coref/a>lassclasslass="line" nam3.1L158">.1981/2>        struct 1a href=2+code29d.1L169" class="line" nam3.1L129">.1991/2>v.2001/3>        1a href="+code=3own_r300" clasg" clll" class="sref">crypto_larexe=lop1a href="+code=CRYypto_exe=lop1p" cl>alg1/a> != &21a hr25val1/tfv;v.2011/3>        1a href="+code=3lg" c30" cl2ss="sref">up_writ31/a>(&232">.2021/3>        1a href="+code=3p_rea3" class="sref"a>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;vERR_PTR1/a>(-1tfvalg1/a>);v *1a href="+codede=nt/a> lass">alg1/a>);v.2031/3>v.2041/3>        return 1a href=3+code3alg" class="sr="line" nam3.1L123"t"+c="+code=cra_flags"ED_FA88" class="line" nam3.1L18835">.2051/3>}valg="line" nam3.1L123"tfvalg1/a>);v.2051/3>struct 1a href="+code=c3MBOL_30alg" class="sref">algsref">typ31/a> &= 1tfvalg1/a>);vcryptfv.2071/3>val" cl33" class="line" nam3.1L2378>.2071/3>        struct 1a href=3ypto_308" cl5" class="line" nam3.1L125">.124r39">.2091/3>{v.2101/3>        struct 1a href=3+code3crypto_alg" clawitchal" class="sref">crypto_tfvde=nat"+code=u32" class=25val1/tfvde=nat"+cp" class="sref">cryptfv.2111/3>v.2121/3>        if (!1a href="+3ode=n31.1L123" class="line" nam3.1L123">.12RYypto_exe=laipherlop1a href="+code=CRYypto_exe=laipherlop1lasslass="sref">cryptfv.2131/3>                return 3a hre3="+code=ERR_PTR" classbreak33" class="line" nam3.1L234">.2141/3>v.2151/3>        1a href="+code=3ask" 3lass="sref">macat" R_PTR1lass="line" nam3.1L22YPE_COMPRESS"+code=EINTR" ce" nam3.1L22YPE_COMPRESScryp: class="line" nam3.1L18836">.2161/3>        1a href="+code=3yp3" 31alg" class="sref">alg1/a> = 1a href=RYypto_exe=laompresslop1a href="+code=CRYypto_exe=laompresslop1lasslass="sref">cryptfv.2071/3>vbreak33" class="line" nam3.1L2348>.2071/3>        1a href="+code=3lg" c31.1L229" class="line" nam3.1L239">.2191/3>        if (!1a href="+3ode=a3g" class="srefdefault: class="line" nam3.1L18830">.2201/3>                1a href3"+cod3=request_module" class="sref">requestBUG.2211/3>v.124r32">.2221/3>                if (!((3a hre3="+cod="line" nam3.1L125">.124r32">.2131/3>                      13 href32.1L204" class="line" nam3.1L234">.2241/3>                       31a hr3f="+coasg" class="sreftify" class="sref">crypto_ctxsizcode=u32" class=25val1/ctxsizcp" cl>alg1/a> != &21a hr25val1/ef="+codcode=alg" class="sref">alg1/a>;v 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u321/a> 1a href="+code=mask" class="sref">mask1/a>)v.2251/3>v.2261/3>                1a href3"+cod3=alg" class="sa>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;vERR_PTR1/a>(-1f="+code=cra_flags" class="sref">cra_flags1/a> &at"+code=u32" class=25a/t"+classclasslass="line" nam3.1L137">.2271/3>        }vleef="+code=ERR_Pileelassclasslass="line" nam3.1L1378>.2071/3>v.2291/3>        if (1a href="+c3de=al32class="sref">larval1/a> = 1a eef="+code=ERR_Pileelassef">ERR_PTR1/a>(-1f="+code=cra_flags" class="sref">cra_flags1/a> &aal="s="crypto/api.c#L209> &aal="s="crlasseto/apiclass="sref">CRYP25val1/tfvdctxaal="s=ev.2301/3>                return 3a hre33out" class="sref">timeout1/a> <"+c_objode=u32" class="sre_obj="sr09" class="line" nam3.1L231">.2311/3>vERR_CAST1/a>( eef="+code=ERR_Pileelasse+g1/a>;valg1/a>);v;v 1a href="+="+code=mask" class="sref">mask1/a>);v.2321/3>        return 1a href=3+code33.1L193" class="line" nam3.1L133">.2331/3>}vwitchal" class="sref">f="+code=cra_flags" class="sref">cra_flags1/a> & 1a href="+code=CRYPTO_ALG_TESTED" class="sref">CRYPTO_ALG_TESTEYPE_MASBACK1/a>))v.2341/3>1a href="+code=EXPORT_S3MBOL_33lg" class="srdefault: class="line" nam3.1L18835">.2351/3>valg1/a> = 1a href=BUG.2361/3>int 1a href="+code=cryp3o_pro33_all2 class="sref">complele_a37">.2371/3>{v.2381/3>        int 1a href="+c3de=ok33alg" class="sref">alg1/a> = 1a href= eef="+code=ERR_Pileelasse+f">ERR_PTR1/a>(-1pto_laraipherlctxsizcode=u32" class=25val1/cipherlctxsizcp" cl1/a>;v.2291/3>v.2401/3>        1a href="+code=3k" cl34d.1L261" class="line" nam3.1L3">.2371/a3{v                1a href3"+3" 3d.1L123" class="line" nam3.1L123">.12 eef="+code=ERR_Pileelasse+f">ERR_PTR1/a>(-1pto_laraompresslctxsizcode=u32" class=25val1/compresslctxsizcp" cl1/a>;vatombreak33" class="line" nam3.1L230">.2341/3{v.124r3quest_mod3l1a href="+code=EXPORT_S3MBn_w3it3" 2lass="sref">down_writ31/3>(&am241/3>int 1a href="+code=cryp3o_" c3ass="2ref">alg1/a> = 1a href="2code=leef="+code=ERR_Pileelassclasslass="line" nam3.1L139">.2391/3>valg1/a>) {vcrypto_larshoot/a> *1a href="+codepto_larshoot/a> p" cl>alg1/a> != &21a hr25val1/ef="+codcode=alg" class="sref">alg1/a>;v241/3>        1a href="+code=3k"api35d.1L161" class="line" nam3.1L139">.2091/3>{vc/a>(&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);vup_read1/a>(&af="+code=cra_flags" class="sref">cra_flags1/a> & 1a href="+code=CRYPTO_ALG_TEST>ERR_PTR1lass="line" nam3.1L2DYING.2111/3>vdown_writ31&1a href="+code=crypto_alg_sem" class="sref">crypto_alg_sem1/a>);v.1381/3>v.2391/3>v);v(1a href="+code=crypto_alg_lookup" class="sref">crypto_alg_shoot/a> *1a href="+codepto_larshoot/a> p" c166" class="line" nam3.1L138(&am241/3>        return 1a href=3+2ode35_all2 class="sref">complele_a3>.1881/a>3>                1a href3"+58"3id.1L2>alg1/a> != &21a hr25val1/tfv;valg1/a> != &21a hr25val1/ef="+codcode=alg" class="sref">alg1/a>;v 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u3 class="sref">complele_a3>f="2481/3av 1a href="+code=mask" class="sref">mask1/a>)v.18813avcrypto_alg1/a> *1atfv;vERR_PTR1/a>(-1NUL>(1a href="+codeNUL>lassclasslass="line" nam3.1L1361">.261/3>static struct 1a href="3c2ode3crypt2_larval"ass="sreftify" class="sref">tfvdsizcode=u32" class=tfvdsizclassclasslass="line" nam3.1L136;1a2href3>}verr);v.2111/3>                return 3a2n_w36.1L204" class="line" nam3.1L238">.1381/3>vdown_writ31tfvdsizcode=u32" class=tfvdsizclassef"sizcof("sre>;v;v;v 1a href="+="+code=mask" class="sref">mask1/a>);v        1a href="+code=3aswri33" cl2ss="sref">up_writ31/a>(tfvERR_PTR1/a>(-1kzclloccryptfvdsizcode=u32" class=tfvdsizclassmask1/a>);v(1a href="+codeGFP_KERNE>d.1L233" class="line" nam3.1L23m(&am241/3>v">up_writ31/a>(tfvERR_PTR1/a>(-1NUL>(1a href="+codeNUL>lass09" class="line" nam3.1L23l1/a>261/3>        1a href="+code=3a2pto36de=alg" class="sref">gotof">up_writ31/a>(&ut_err.18813>1a href="+code=EXPORT_S3MBOL_36class="sref">larval1/a> = 1atfvalg1/a>);v *1a href="+codede=nt/a> lassef">ERR_PTR1/a>(-1f="+code=cra_flags" classclasslass="line" nam3.1L130">.1701/3>v.1711/3>static struct 1a href="3code=37rypt2_larval" class="sref">cerr;v = 1atfvmask1/a>);v.1721/3>{v.1731/3>        struct 1a href=3+code37d.1L2lass="sref">atomgotof">up_writ31/a>(&ut_freeatfv.1381/3>        long 1a href="+3ode=t37.1L215" class="line" nam3.1L235">.1751/3>vtimeout1/a>)valg1/a>);vup_read1/a>(&af="+code=cra_flags" class="sref">cra_flags1/a> &aode=ode=u32" class=> &aode=lass87" id.1L18"ine" nam3.1L123"errERR_PTR1/a>(-1f="+code=cra_flags" class="sref">cra_flags1/a> &aode=ode=u32" class=> &aode=lasslass="sref">cryptfv        1a href="+code=3imeou37alg" class="sref">alggotof">up_writ31/a>(> &aode=_faile>(1a href="+code=n&aode=_faile>lassclasslass="line" nam3.1L1301/a>261/3>                &1a3href=37.1L218" class="line" nam3.1L238">.1781/3>vup_writ31/a>(&ut.18813>        1a href="+code=3lg" c37.1L200" class="line" nam3.1L230">.1801/3>        if (1a href="+c3de=ti3eout" ">up_writ31/a>(> &aode=_faile>(1a href="+code=n&aode=_faile>lass: class="line" nam3.1L18831">.1811/3>                1a href3"+cod38od_put" class="sref">crypto_mod_putexe=lop1a href="+code=CRYypto_exe=lop1p" class="sref">cryptfv.1821/3>        else if (!1a hr3f="+c38.1L12">up_writ31/a>(&ut_freeatfv.1731/3>                1a href3"+cod3=alg" class="s="line" nam3.1L123"errEAGAIN1/a>);v.1381/3>        else if (!1a hr3f="+c38="+code=request_modullass="sref">crypto_larshoot/a> *1a href="+codepto_larshoot/a> p" cl1/a>;v.1851/3>                1a href3"+cod38" cl2ss="sref">up_writ31/a>(kfreecryptfv        else if (1a hre3="+co38L" class="sref">EXPO&ut_err261/3>                 !(1a h3ef="+3ode=alg" class">up_writ31/a>(tfvERR_PTR1/a>(-1a href="+code=EINTR" class="sref">ne" nam3.1L123"err.1781/3>                1a href3"+cod38alg"2class="sref">al&ut.18813>        else if (!1a hr3f="+c3de=crypto_mod_ef">alg1/a>;v.1901/3>                1a href3"+cod3=alg" 95" class="line" nam3.1L131">.1911/3>        1a href="+code=3rypto39.1L23INTR1/a>);v(1a href="+code=crypto_alg_lookup" class="sref">crypde=nam3" clloc/tfv.1921/3>v.1831/3>        return 1a href=3+code39alg" l"/*="sref"3" class="line" nam3.1L130">.1381/3>}v *o_mod_=nam3" clloc/bat" - Locate  idorithm and cllocate transform="sref"3" class="line" nam3.1L130">.1851/3>v *o_mod_@L166/api: Napi of  idorithm="sref"3" class="line" nam3.1L130(&am241/3>struct 1a href="+code=c3ypto_39ass="l" *o_mod_@="sr: T"sr of  idorithm="sref"3" class="line" nam3.1L1301/a>261/3>{v *o_mod_@3" i: M" i for ="sr comparison="sref"3" class="line" nam3.1L130">.1781/3>        struct 1a href=3+code39d.1L1l" *="sref"3" class="line" nam3.1L1308">.18813>v *o_mod_This function should not be used by new  idorithm ="srs.="sref"3" class="line" nam3.1L140">.2001/4>        1a href="+code=4own_r400" cll" *o_mod_Plesae use =nam3" clloc/tfv instead.="sref"3" class="line" nam3.1L1401>.2001/4>        1a href="+code=4lg" c40" cl2l" *="sref"3" class="line" nam3.1L142">.2021/4>        1a href="+code=4p_rea4" clasl" *o_mod_=nam3" clloc/bat"() will first attempt toflocate uotalalg_yfloade>lasref"3" class="line" nam3.1L1423>.2021/4>        return 1a href=4204" 40alg" l" *o_mod_ idorithm.  If that fails and the kernel supports dya hide=oyfloadab37;ssref"3" class="line" nam3.1L1424>.2021/4>}v *o_mod_t;%s, it will then attempt tofload c_t;% of the sapi napi or;ssref"3" class="line" nam3.1L1425>.2021/4>v *o_mod_alias.  If that fails it will send c query tofanyfloade>_=nam3" manager;ssref"3" class="line" nam3.1L1426>.2021/4>struct 1a href="+code=c4MBOL_40ass="l" *o_mod_3" a>, 1s="sruotaldorithm on the fly.  A_effcount is grabbe>_on the;ssref"3" class="line" nam3.1L1427>.2021/4>{v *o_mod_aldorithm which is then associated with the new transform.="sref"3" class="line" nam3.1L1408>.2021/4>        struct 1a href=4ypto_40d.1L1l" *="sref"3" class="line" nam3.1L149">.2091/4>{v *o_mod_The_ef">aled transform is of   non-determinate t"sr.  Most peop37;ssref"3" class="line" nam3.1L140">.2101/4>        struct 1a href=4+code410" cll" *o_mod_should use on7 of the more specific cllocation functions such as;ssref"3" class="line" nam3.1L1401>.2001/4>v *o_mod_=nam3" clloc/blkcipher.="sref"3" class="line" nam3.1L142">.2121/4>        if (!1a href="+4ode=n41 clasl" *="sref"3" class="line" nam3.1L1423>.2021/4>                return 4a hre41alg" l" *o_mod_Inscat" of error =he_ef">al value is uoterror pointer.="sref"3" class="line" nam3.1L1424>.2021/4>v */="sref"3" class="line" nam3.1L1425>.2021/4>        1a href="+code=4ask" 4lass="ass="sref">crypto_alg1/a> *1atfv;v, 1a href="+code=typef="eL166/apipto/api.c#L211" id6/api.1L2321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u3 1/a> 1a href="+code=mask" class="sref">mask1/a>)v.2161/4>        1a href="+code=4yp3" 41alg" 10" class="line" nam3.1L243">.2071/4>vcrypto_alg1/a> *1atfv;v.2071/4>        1a href="+code=4lg" c41class="sref">ok1/a>;v.2091/4>        if (!1a href="+4ode=a41.1L200" class="line" nam3.1L240">.2201/4>                1a href4"+cod4=request_modulfor (;;88" class="line" nam3.1L18841">.2211/4>v.1251a href="+codcode=alg" class="sref">alg1/a>;v.2221/4>                if (!((4a hre42.1L193" class="line" nam3.1L142">.2131/4>                      14 href4"+code=CRYPTO_ALG_NEED1/a>;vcrypto_alg_lookup1/a>(const char *1a href="+code=namef="ef">nam31/"+code=typef="eL166/apipto/api.c#L211" id6/api.1L2321/a> 1a href="+="+code=mask" class="sref">mask1/a>);v.2241/4>                       41a hr4f="+code=request_modul="line" nam3.1L123">.126ypto/api.c#L213" id.1L233" classl1/a>))v.2021/4>valgALG_NEED1/a>;vERR_PTR1/a>(-1PTR126ypto/api.c#L213"PTR126yp" cl1/a>;v.2261/4>                1a href4"+cod4=alg" class="sref">alggggggggggotof">up_writ31/a>(err.2271/4>        }v95" class="line" nam3.1L1478>.2071/4>v.2291/4>        if (1a href="+c4de=al42list_add" class="sref">up_writ31/a>(tfvERR_PTR1/a>(-1de=nam3" clloc/tfv;v 1a href="+="+code=mask" class="sref">mask1/a>);v.2301/4>                return 4a hre4="+code=crypto_is_larv="li">timeout1/a>)v<>.126ypto/api.c#L213" id.1L233" classl1/a>))v.2211/4>valg1/a>;v.2321/4>        return 1a href=4+code43.1L193" class="line" nam3.1L143">.2331/4>}v;v(1a href="+code=larval" class="sref">larval1/a>->crypto/api.c#L211" id.1L2133" class="line" nam3.1L244">.2341/4>1a href="+code=EXPORT_S4MBOL_43="+code=request_modullass="sref">cryerrERR_PTR1/a>(-1PTR126ypto/api.c#L213"PTR126yp" cl1/a>;v.2351/4>v.2361/4>int 1a href="+code=cryp4o_pro43L" class="sref">EXPOerr.2371/4>{v="line" nam3.1L123"errEAGAIN1/a>);v.2381/4>        int 1a href="+c4de=ok43alg" class="sref">algggggggggbreak33" class="line" nam3.1L246">.2291/4>v;v.2401/4>        1a href="+code=4k" cl44"+code=crypto_is_larvst_modullass="sref">cryerr);v.2371/a4{v                1a href4"+3" 4d.1L123" class="line" 95" class="line" nam3.1L14api.c#L224{v.2341/4{valg1/a>;vne" nam3.1L123"err(&am241/4>int 1a href="+code=cryp4o_" c4ass="295" class="line" nam3.1L14a">.2371/4>v);v(1a href="+code=crypto_alg_lookup" class="sref">cryp=nam3" clloc/bat""+codcode=alg" class="srloc/bat"p" c0classlass="line" nam3.1L14>">.2381/4>v;valg1/a> != &21a hr25val1/ef="+codcode=alg" class="sref">alg1/a>;v241/4>        1a href="+code=4k"api45"+code=crypto_is_larvst_modula>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;v.2091/4>{vup_writ31/a>(&24p;1a2href4"                1a href4"+3" 45 class="sref" href="+code=typef="em;v.2111/4>valg1/a> != &21a hr25val1/tfv;vERR_PTR1/a>(-1NUL>(1a href="+codeNUL>lassclasslass="line" nam3.1L148">.1381/4>vtfvsizcode=u32" class=tfvsizclassclasslass="line" nam3.1L149">.2391/4>vtotref="+code=adult"totrelassclasslass="line" nam3.1L149(&am241/4>        return 1a href=4+2ode4alg" 2lass="sreify" class="sref">err);v.1881/a>4>                1a href4"+58"45.1L218" class="line" nam3.1L24>f="2481/4avtfvsizcode=u32" class=tfvsizclassef">ERR_PTR1/a>(-1frontendode=u32" class=frontendd.1L="sref">cra_flags1/atfvsizcode=u32" class=tfvsizclassclasslass="line" nam3.1L149a href="4avlarval1/a> = 1atotref="+code=adult"totrelassLf">ERR_PTR1/a>(-1tfvsizcode=u32" class=tfvsizclasse+"sizcof("sre>;v;vcra_flags1/aextsizcode=u32" class=extsizcref">larval1/a>->crypto/api.c#L211" id.1L2133" class="line" nam3.1L24api.c#L234"v.261/4>static struct 1a href="4c2ode4crypt2_larval" class="sref">cm;vERR_PTR1/a>(-1kzclloccryptotref="+code=adult"totrelassmask1/a>);v(1a href="+codeGFP_KERNE>d.1L233" class="line" nam3.1L246;1a2href4>}vERR_PTR1/a>(-1NUL>(1a href="+codeNUL>lass09" class="line" nam3.1L246">.2111/4>                return 4a2n_w4it3" 2lass="sref">downgotof">up_writ31/a>(&ut_err.1381/4>vlist_del1/a>(&4mp;1a261/4>        1a href="+code=4aswri43" cl2ss="sref">up_writ31/a>(tfvalg1/a> != &21a hr25val1/tfvvtyp31/a> &= 1tfvalg1/a>);v *1a href="+codede=nt/a> lassef">ERR_PTR1/a>(-1f="+code=cra_flags" classclasslass="line" nam3.1L14l1/a>261/4>        1a href="+code=4a2pto46.1L218" class="line" nam3.1L246f="2481/4>}verrERR_PTR1/a>(-1frontendode=u32" class=frontendd.1L="sref">cra_flags1/aode=_tfv;v.18814>1a href="+code=EXPORT_S4MBOL_46class="sref">="line" nam3.1L123"err.1701/4>vup_writ31/a>(&ut_freeatfv.1711/4>static struct 1a href="4code=47.1L232" class="line" nam3.1L242">.1721/4>{vtimeout1/a>)valg1/a>);vup_read1/a>(&af="+code=cra_flags" class="sref">cra_flags1/a> &aode=ode=u32" class=> &aode=lass87" id.1L18"ine" nam3.1L123"errERR_PTR1/a>(-1f="+code=cra_flags" class="sref">cra_flags1/a> &aode=ode=u32" class=> &aode=lasslass="sref">cryptfv.1731/4>        struct 1a href=4+code47d.1L2lass="sref">atomgotof">up_writ31/a>(> &aode=_faile>(1a href="+code=n&aode=_faile>lassclasslass="line" nam3.1L140">.1381/4>        long 1a href="+4ode=t47.1L215" class="line" nam3.1L245">.1751/4>vup_writ31/a>(&ut        1a href="+code=4imeou47_all2 class="sref">complele_a401/a>261/4>                &1a4href=47" cl2INTR1/a>);v &aode=_faile>(1a href="+code=n&aode=_faile>lass: class="line" nam3.1L18848">.1781/4>v/api.c#exe=lop1a href="+code=CRYypto_exe=lop1p" class="sref">cryptfv.18814>        1a href="+code=4lg" c47.1L20">up_writ31/a>(&ut_freeatfv.1801/4>        if (1a href="+c4de=ti48out" class="sref">timeout1/a> &lerrEAGAIN1/a>);v.1811/4>                1a href4"+cod48"+code=ERR_CAST" clas" class="sref">/api.c#shoot/a> *1a href="+codepto_larshoot/a> p" cl1/a>;v.1821/4>        else if (!1a hr4f="+c48.1L123" class>ERR_PTR1/a>(-1kfreecrypm;v.1731/4>                1a href4"+cod4=alg" ">up_writ31/a>(&ut_err.1381/4>        else if (!1a hr4f="+c4843" class="sref">down_writ31m;vERR_PTR1/a>(-1a href="+code=EINTR" class="sref">ne" nam3.1L123"err.1851/4>                1a href4"+cod48.1L12INTR1/a>);v        else if (1a hre4="+co48ss="2ref">alg1/a> = 1a href="2code=m;v261/4>                 !(1a h4ef="+48" cl2ss="sref">alg1/a>) {v.1781/4>                1a href4"+cod48alg"2class="sref">alrT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">cryp=nam3" createatfv.18814>        else if (!1a hr4f="+c48.1L200" class="line" nam3.1L240">.1901/4>                1a href4"+cod490" claslg1/a> != &21a hr25val1/ef="+codcode=alg" class="sref">alg1/a>;v, 1a href="+code=typef="eL166/apipto/api.c#L211" id6/api.1L230" class="line" nam3.1L240">.1811/4>        1a href="+code=4rypto49"+code=ERR_CAST" classssssssssssssssssssa>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;v.1821/4>v;vtyp31/a>, 1a href="+code=u32" class="sref">u3 1/a> 1a href="+code=mask" class="sref">mask1/a>)v.1831/4>        return 1a href=4+code49alg" ss="sref">up_writ31/a>(&240">.1381/4>}v != &21a hr25val1/ef="+codcode=alg" class="sref">alg("sre>;vnam31)la>, 1a href="+code=typef="e/apipto/api.c#L211"/api.1L2321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u3 1/a> 1a href="+code=mask" class="sref">mask1/a>)vup_writ31/a>(&240">.1851/4>valg1/a> = 1a href=to_alg_lookup1/a>(const char *1a href="+code=namef="ef">nam31classlass="line" nam3.1L140(&am241/4>struct 1a href="+code=c4ypto_49_all2 class="sref">complele_a401/a>261/4>{vtimeout1/a> &lfrontendode=u32" class=frontendd.1L18" class="line" nam3.1L18840">.1781/4>        struct 1a href=4+code49alg" class="sref">alg1/a> = 1a href=t"+c="+code=cra_flags"ED_FAL.1L18f">ERR_PTR1/a>(-1frontendode=u32" class=frontendd.1L="sref">cra_flags1/a" idclear.18814>vup_writ31/a>(="crypto/api.c#L209" id.1L2L.1L18f">ERR_PTR1/a>(-1frontendode=u32" class=frontendd.1L="sref">cra_flags1/a" idclear.2001/5>        1a href="+code=5own_r50request_module" class="sref">requestt"+c="+code=cra_flags"ED_FAL>ERR_PTR1lass="linfrontendode=u32" class=frontendd.1L="sref">cra_flags1/at"+c="+code=cra_flags"ED_FAclasslass="line" nam3.1L1501>.2001/5>        1a href="+code=5lg" c50"+code=ERR_CAST" clas" class="sref">="crypto/api.c#L209" id.1L2L>ERR_PTR1lass="linfrontendode=u32" class=frontendd.1L="sref">cra_flags1/a" idset.2001/5>v.2021/5>        return 1a href=5204" 50d.1L2lass="sref">atomref">timeout1/a> &lfrontendode=u32" class=frontendd.1L="sref">cra_flags1/aa>(const char *1a hre"ef">nam31)3" class="line" nam3.1L1524>.2021/5>}va>(const char *1a hre"ef">nam31ef">ERR_PTR1/a>(-1frontendode=u32" class=frontendd.1L="sref">cra_flags1/aa>(const char *1a hre"ef">nam31classlass="line" nam3.1L1505>.2021/5>valg1/a>) {v.2021/5>struct 1a href="+code=c5MBOL_50_all2 class="sref">complele_a527>.2021/5>{v = 1a href="2code=l>(const char *1a hre"ef">nam31/"+code=typef="eL166/apipto/api.c#L211" id6/api.1L2321/a> 1a href="+="+code=mask" class="sref">mask1/a>);v.2021/5>        struct 1a href=5ypto_50d.1L1ss="sref">alg1/a>) {v.2021/5>vup_writ31/a>(rT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">cryp=nam3" find/ef="+codcode=alg" class="find/ef=p" c233" class="line" nam3.1L250">.2101/5>        struct 1a href=5+code51d.1L261" class="line" nam3.1L501>.2001/5>v/*="sref"3" class="line" nam3.1L152">.2121/5>        if (!1a href="+5ode=n51 clasl" * class=nam3" clloc/tfv - Locate  idorithm and cllocate transform="sref"3" class="line" nam3.1L1523>.2021/5>                return 5a hre51alg" l" *o_mod_@L166/api: Napi of  idorithm="sref"3" class="line" nam3.1L1524>.2021/5>v *o_mod_@frontend: Frontend  idorithm ="sr="sref"3" class="line" nam3.1L1525>.2021/5>        1a href="+code=5ask" 51.1L19l" *o_mod_@="sr: T"sr of  idorithm="sref"3" class="line" nam3.1L156">.2161/5>        1a href="+code=5yp3" 51ass="l" *o_mod_@3" i: M" i for ="sr comparison="sref"3" class="line" nam3.1L153">.2071/5>v *="sref"3" class="line" nam3.1L1538>.2021/5>        1a href="+code=5lg" c51d.1L1l" * class=nam3" clloc/tfv() will first attempt toflocate uotalalg_yfloade>lasref"3" class="line" nam3.1L154">.2091/5>        if (!1a href="+5ode=a51.1L20l" *o_mod_ idorithm.  If that fails and the kernel supports dya hide=oyfloadab37;ssref"3" class="line" nam3.1L150">.2201/5>                1a href5"+cod520" cll" *o_mod_t;%s, it will then attempt tofload c_t;% of the sapi napi or;ssref"3" class="line" nam3.1L151">.2211/5>v *o_mod_alias.  If that fails it will send c query tofanyfloade>_=nam3" manager;ssref"3" class="line" nam3.1L152">.2221/5>                if (!((5a hre52 clasl" * class3" a>, 1s="sruotaldorithm on the fly.  A_effcount is grabbe>_on the;ssref"3" class="line" nam3.1L152">.2131/5>                      15 href52alg" l" *o_mod_ idorithm which is then associated with the new transform.="sref"3" class="line" nam3.1L154">.2241/5>                       51a hr52L" cll" *="sref"3" class="line" nam3.1L1545>.2021/5>v *o_mod_The_ef">aled transform is of   non-determinate t"sr.  Most peop37;ssref"3" class="line" nam3.1L156">.2261/5>                1a href5"+cod52ass="l" *o_mod_should use on7 of the more specific cllocation functions such as;ssref"3" class="line" nam3.1L157">.2271/5>        }v.2071/5>v *="sref"3" class="line" nam3.1L159">.2291/5>        if (1a href="+c5de=al52.1L20l" *o_mod_Inscat" of error =he_ef">al value is uoterror pointer.="sref"3" class="line" nam3.1L150">.2301/5>                return 5a hre530" cll" */="sref"3" class="line" nam3.1L150">.2211/5>v;v, 1a href="+code=typef="eL166/apipto/api.c#L211" id6/api.1L230" class="line" nam3.1L252">.2321/5>        return 1a href=5+code53.1L123" class="line"        a>, 1a>alg1/a> != &21a hr25val1/t"+code=u32" class=25val1/t"+class="sre>;v 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u3 1/a> 1a href="+code=mask" class="sref">mask1/a>)v.2131/5>}vup_writ31/a>(&254">.2341/5>1a href="+code=EXPORT_S5MBOL_53="+code=requell" c"sre>;v.2351/5>v.2361/5>int 1a href="+code=cryp5o_pro53_all2 class="sref">complele_a57">.2371/5>{v.2381/5>        int 1a href="+c5de=ok53alg" class="sref">alg="line" nam3.1L123">.1251a href="+codcode=alg" class="sref">alg1/a>;v.2291/5>v.2401/5>        1a href="+code=5k" cl54"+code=crypto_is_larv1/a>;vcrypto_alg_find/ef="+codcode=alg" class="find/ef=p" cl"+code=typef="eL166/apipto/api.c#L211" id6/api.1L2321/a> 1a href="+frontendode=u32" class=frontendd.1L321/a> 1a href="+="+code=mask" class="sref">mask1/a>);v.2371/a5{v.126ypto/api.c#L213" id.1L233" classl1/a>))v                1a href5"+3" 5d.1L123" class="line" _is_larv1/a>;vERR_PTR1/a>(-1PTR126ypto/api.c#L213"PTR126yp" cl1/a>;vatommmmmmmmmgotof">up_writ31/a>(err.2341/5{valg1/a>) {vdown_writ31/5>(&am241/5>int 1a href="+code=cryp5o_" c54alg" class="sref">algsre>;vcrypto_alg_createatfv;v 1a href="+frontendode=u32" class=frontendd.1L1classlass="line" nam3.1L15a">.2371/5>v="li">timeout1/a>)v<>.126ypto/api.c#L213" id.1L233" classl1/a>))v">.2381/5>valgggggggggef">alg1/a>;v241/5>        1a href="+code=5k"api55"+code=crypto_is_larvass="sref">crypto_alg_1/a>(1a href="+code=larval" class="sref">larval1/a>->crypto/api.c#L211" id.1L2133" class="line" nam3.1L259">.2091/5>{verrERR_PTR1/a>(-1PTR126ypto/api.c#L213"PTR126yp" cl1/a>;v.2111/5>vup_writ31/a>(err.1381/5>vEAGAIN1/a>);v.2391/5>valgggggggggbreak33" class="line" nam3.1L259(&am241/5>        return 1a href=5+2ode55alg" class="sref">alg="line" nam3.1L123"s="sal_pend1a hcrypto/api.c#Ls="sal_pend1a p" cl1/a>;v.1881/a>5>                1a href5"+58"55de=alg" class="sref">ST" clas" class="sref">err);vf="2481/5avalg1/a>) {valg1/a>) {v.2091/5>static struct 1a href="5c2ode56.1L232" class="line" nam3.1L256;1a2href5>}valg1/a>;vne" nam3.1L123"err.2111/5>                return 5a2n_w5it3" 2ss="sref">alg1/a>) {v.1381/5>vup_writ31/a>(rT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">cryp=nam3" clloc/tfv.2391/5>        1a href="+code=5aswri56t3" 2lass="sref">down_writ31/56(&am241/5>v/*="sref"3" class="line" nam3.1L15l1/a>261/5>        1a href="+code=5a2pto56de=all" *o_mod_class="destroy/tfv - Free =nam3" transform="sref"3" class="line" nam3.1L156f="2481/5>}v * class@mem: Start of tfv slab="sref"3" class="line" nam3.1L156a href="5>1a href="+code=EXPORT_S5MBOL_56.1L20l" *o_mod_@tfv: Transform 3" freep"sref"3" class="line" nam3.1L150">.1701/5>v *p"sref"3" class="line" nam3.1L150">.2091/5>static struct 1a href="5code=57" cl2l" *o_mod_This function frees up =he_transform and cny associated resources,p"sref"3" class="line" nam3.1L150;1a2href5>{v * class3hen drops =he_effcount on the associated  idorithm.p"sref"3" class="line" nam3.1L150">.2111/5>        struct 1a href=5+code57alg" l" */="sref"3" class="line" nam3.1L150">.1381/5>        long 1a href="+5ode=t57.1L21ll" cass="sref">cryp=nam3" destroy/tfv;valg1/a> != &21a hr25val1/tfv;v.1751/5>v        1a href="+code=5imeou57alg" class="s="line" nam3.1L123">.1251a href="+codcode=alg" class="sref">alg1/a>;v261/5>                &1a5href=57.1L218" class="line" nam3.1L5.c#4179" 55>        long 1a href="5 ef"3" class="linealg" clu2341/4>1aPnlikely"+code=mask" clanlikelyy/tfv>="li">timeout1/>crypm;v        1a href="+5ode=4576" 55list_add" class=classed.1L211" class="line" nam3L18840">.5801/4>        if (1a hre5="+c458ode51d.1L261" class="line" namL18841">.5811/4>                1a5href45+cod38od_put" class="sref">crref="crypto/api.c#L211" id.1L2 class="sref"p;= 1tfvalg1/a>);v *1a href="+codede=nt/a>d.1L211" class="line" nam3L1L150;1a2821/4>        else if (!5a hr4583" 55.1L193" class="line" nam3.1L242">.5731/4>                1a5href45+cod3=alg" class="s="li">timeout1/a>)valg1/a>);vup_read1/a>(&af="+code=cra_flags" class="sref">cra_flags1/href=exe=.5381/4>        else if (!5a hr45="+c38="+code=request_modullass="srefa>(&af="+code=cra_flags" class="sref">cra_flags1/href=exe=;v.5851/4>                1a5href45+cod38" cl2ss="sref">up_writ3alg" clpi.c#exe=lop1a href="+code=CRYypto_exe=lop1p" class="sref">cryptfv        else if (15 hre458ple46ass="sref">typ31/a> &am>crypto_alg_1/a>(1a href="+code=larval" class="sref">larval1/a>->crypto/api.c#L211" id.1L2133" class="line" nam3.1L1411/a5261/4>                 !51a h45f="+3ode=alg" class">up_writ3kz>(-1kfreecrypm;v.5781/4>                1a5href458to_50d.1L1ss="sref">alg1/a>) {v.1L1458">518814>        else if (!5a hr45810"50.1L20">up_writ31/a>(rT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">cryp=nam3" destroy/tfv.5901/4>                1a5href459ode51d.1L261" class="line" nam.1L240">.5811/4>        1a href="+5ode=45ypto49ss="sok1/a>;v, 1a href="+code=typef="e/apipto/api.c#L211"/api.1L2321/a> 1a href="+code=typ3" class="sref">typ31/a>, 1a href="+code=u32" class="sref">u3 1/a> 1a href="+code=mask" class="sref">mask1/a>)vv.5831/4>        return 1a 5ref=459cod3=alg" class="sok1/a>;v.5381/4>}v != &21a hr25val1/ef="+codcode=alg" class="sref_larv1/a>;vcrypto_alg_lookup1/a>(const char *1a href="+code=namef="ef">nam31/"+code=typef="e/apipto/api.c#L211"/api.1L2321/a> 1a href="+="+code=mask" class="sref">mask1/a>);v(&240">.5851/4>vdown_wri.1L140(&a5241/4>struct 1a href="+c5de=c459ode4alg" 2lassef">="li">timeout1/a>)v<>.126ypto/api.c#L213" id.1L233" classl1/a>))v{vtyp31/a> &am>crypto_alg_1/a>(1a href="+code=larval" class="sref">larval1/a>->crypto/api.c#L211" id.1L2133" class="line" nam3L18840">.5781/4>        struct 1a 5ref=45code49alg" class="sref">alg1/a> = 1a r" idset518814>valg1/a>) {6.1L150">.6001/5>        1a href="+6ode=560ode51d.1L261" class="line" na6.1L1501>.6001/5>        1a href="+6ode=56g" c50"+code=Eclassef">alg1/a>;v.6001/5>valg1/a>) {6.3L1502>.6031/4>        return 1a 6ref=560=al55alg" ">up_writ31/a>(rT_SYMBOL_GPL1/a>(1a href="+code=crypto_alg_lookup" class="sref">cryp=nhas51a href="+codcode=alg" clhas51a lookd.1L2133" class="line" nam6.1L1524>.6021/5>}v.6021/5>v"Css="lgraphic cthe API"a> */="d.1L2133" class="line" nam6.6L1505>.6041/4>struct 1a href="+c6de=c560pro43L" class="sref"MODULE_LICENSEhref="crypto/apMODULE_LICENSElookuplg" l""lg_"a> */="d.1L2133" class="line" nam6.7L1505>.6061/4>{v


d/div>