~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/crypto/lskcipher.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /crypto/lskcipher.c (Version linux-6.12-rc7) and /crypto/lskcipher.c (Version linux-4.9.337)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 
  2 /*                                                
  3  * Linear symmetric key cipher operations.        
  4  *                                                
  5  * Generic encrypt/decrypt wrapper for ciphers    
  6  *                                                
  7  * Copyright (c) 2023 Herbert Xu <herbert@gond    
  8  */                                               
  9                                                   
 10 #include <linux/cryptouser.h>                     
 11 #include <linux/err.h>                            
 12 #include <linux/export.h>                         
 13 #include <linux/kernel.h>                         
 14 #include <linux/seq_file.h>                       
 15 #include <linux/slab.h>                           
 16 #include <linux/string.h>                         
 17 #include <net/netlink.h>                          
 18 #include "skcipher.h"                             
 19                                                   
 20 static inline struct crypto_lskcipher *__crypt    
 21         struct crypto_tfm *tfm)                   
 22 {                                                 
 23         return container_of(tfm, struct crypto    
 24 }                                                 
 25                                                   
 26 static inline struct lskcipher_alg *__crypto_l    
 27         struct crypto_alg *alg)                   
 28 {                                                 
 29         return container_of(alg, struct lskcip    
 30 }                                                 
 31                                                   
 32 static int lskcipher_setkey_unaligned(struct c    
 33                                       const u8    
 34 {                                                 
 35         unsigned long alignmask = crypto_lskci    
 36         struct lskcipher_alg *cipher = crypto_    
 37         u8 *buffer, *alignbuffer;                 
 38         unsigned long absize;                     
 39         int ret;                                  
 40                                                   
 41         absize = keylen + alignmask;              
 42         buffer = kmalloc(absize, GFP_ATOMIC);     
 43         if (!buffer)                              
 44                 return -ENOMEM;                   
 45                                                   
 46         alignbuffer = (u8 *)ALIGN((unsigned lo    
 47         memcpy(alignbuffer, key, keylen);         
 48         ret = cipher->setkey(tfm, alignbuffer,    
 49         kfree_sensitive(buffer);                  
 50         return ret;                               
 51 }                                                 
 52                                                   
 53 int crypto_lskcipher_setkey(struct crypto_lskc    
 54                             unsigned int keyle    
 55 {                                                 
 56         unsigned long alignmask = crypto_lskci    
 57         struct lskcipher_alg *cipher = crypto_    
 58                                                   
 59         if (keylen < cipher->co.min_keysize ||    
 60                 return -EINVAL;                   
 61                                                   
 62         if ((unsigned long)key & alignmask)       
 63                 return lskcipher_setkey_unalig    
 64         else                                      
 65                 return cipher->setkey(tfm, key    
 66 }                                                 
 67 EXPORT_SYMBOL_GPL(crypto_lskcipher_setkey);       
 68                                                   
 69 static int crypto_lskcipher_crypt_unaligned(      
 70         struct crypto_lskcipher *tfm, const u8    
 71         u8 *iv, int (*crypt)(struct crypto_lsk    
 72                              u8 *dst, unsigned    
 73 {                                                 
 74         unsigned statesize = crypto_lskcipher_    
 75         unsigned ivsize = crypto_lskcipher_ivs    
 76         unsigned bs = crypto_lskcipher_blocksi    
 77         unsigned cs = crypto_lskcipher_chunksi    
 78         int err;                                  
 79         u8 *tiv;                                  
 80         u8 *p;                                    
 81                                                   
 82         BUILD_BUG_ON(MAX_CIPHER_BLOCKSIZE > PA    
 83                      MAX_CIPHER_ALIGNMASK >= P    
 84                                                   
 85         tiv = kmalloc(PAGE_SIZE, GFP_ATOMIC);     
 86         if (!tiv)                                 
 87                 return -ENOMEM;                   
 88                                                   
 89         memcpy(tiv, iv, ivsize + statesize);      
 90                                                   
 91         p = kmalloc(PAGE_SIZE, GFP_ATOMIC);       
 92         err = -ENOMEM;                            
 93         if (!p)                                   
 94                 goto out;                         
 95                                                   
 96         while (len >= bs) {                       
 97                 unsigned chunk = min((unsigned    
 98                 int err;                          
 99                                                   
100                 if (chunk > cs)                   
101                         chunk &= ~(cs - 1);       
102                                                   
103                 memcpy(p, src, chunk);            
104                 err = crypt(tfm, p, p, chunk,     
105                 if (err)                          
106                         goto out;                 
107                                                   
108                 memcpy(dst, p, chunk);            
109                 src += chunk;                     
110                 dst += chunk;                     
111                 len -= chunk;                     
112         }                                         
113                                                   
114         err = len ? -EINVAL : 0;                  
115                                                   
116 out:                                              
117         memcpy(iv, tiv, ivsize + statesize);      
118         kfree_sensitive(p);                       
119         kfree_sensitive(tiv);                     
120         return err;                               
121 }                                                 
122                                                   
123 static int crypto_lskcipher_crypt(struct crypt    
124                                   u8 *dst, uns    
125                                   int (*crypt)    
126                                                   
127                                                   
128                                                   
129 {                                                 
130         unsigned long alignmask = crypto_lskci    
131                                                   
132         if (((unsigned long)src | (unsigned lo    
133             alignmask)                            
134                 return crypto_lskcipher_crypt_    
135                                                   
136                                                   
137         return crypt(tfm, src, dst, len, iv, C    
138 }                                                 
139                                                   
140 int crypto_lskcipher_encrypt(struct crypto_lsk    
141                              u8 *dst, unsigned    
142 {                                                 
143         struct lskcipher_alg *alg = crypto_lsk    
144                                                   
145         return crypto_lskcipher_crypt(tfm, src    
146 }                                                 
147 EXPORT_SYMBOL_GPL(crypto_lskcipher_encrypt);      
148                                                   
149 int crypto_lskcipher_decrypt(struct crypto_lsk    
150                              u8 *dst, unsigned    
151 {                                                 
152         struct lskcipher_alg *alg = crypto_lsk    
153                                                   
154         return crypto_lskcipher_crypt(tfm, src    
155 }                                                 
156 EXPORT_SYMBOL_GPL(crypto_lskcipher_decrypt);      
157                                                   
158 static int crypto_lskcipher_crypt_sg(struct sk    
159                                      int (*cry    
160                                                   
161                                                   
162                                                   
163 {                                                 
164         struct crypto_skcipher *skcipher = cry    
165         struct crypto_lskcipher **ctx = crypto    
166         u8 *ivs = skcipher_request_ctx(req);      
167         struct crypto_lskcipher *tfm = *ctx;      
168         struct skcipher_walk walk;                
169         unsigned ivsize;                          
170         u32 flags;                                
171         int err;                                  
172                                                   
173         ivsize = crypto_lskcipher_ivsize(tfm);    
174         ivs = PTR_ALIGN(ivs, crypto_skcipher_a    
175         memcpy(ivs, req->iv, ivsize);             
176                                                   
177         flags = req->base.flags & CRYPTO_TFM_R    
178                                                   
179         if (req->base.flags & CRYPTO_SKCIPHER_    
180                 flags |= CRYPTO_LSKCIPHER_FLAG    
181                                                   
182         if (!(req->base.flags & CRYPTO_SKCIPHE    
183                 flags |= CRYPTO_LSKCIPHER_FLAG    
184                                                   
185         err = skcipher_walk_virt(&walk, req, f    
186                                                   
187         while (walk.nbytes) {                     
188                 err = crypt(tfm, walk.src.virt    
189                             walk.nbytes, ivs,     
190                             flags & ~(walk.nby    
191                             0 : CRYPTO_LSKCIPH    
192                 err = skcipher_walk_done(&walk    
193                 flags |= CRYPTO_LSKCIPHER_FLAG    
194         }                                         
195                                                   
196         memcpy(req->iv, ivs, ivsize);             
197                                                   
198         return err;                               
199 }                                                 
200                                                   
201 int crypto_lskcipher_encrypt_sg(struct skciphe    
202 {                                                 
203         struct crypto_skcipher *skcipher = cry    
204         struct crypto_lskcipher **ctx = crypto    
205         struct lskcipher_alg *alg = crypto_lsk    
206                                                   
207         return crypto_lskcipher_crypt_sg(req,     
208 }                                                 
209                                                   
210 int crypto_lskcipher_decrypt_sg(struct skciphe    
211 {                                                 
212         struct crypto_skcipher *skcipher = cry    
213         struct crypto_lskcipher **ctx = crypto    
214         struct lskcipher_alg *alg = crypto_lsk    
215                                                   
216         return crypto_lskcipher_crypt_sg(req,     
217 }                                                 
218                                                   
219 static void crypto_lskcipher_exit_tfm(struct c    
220 {                                                 
221         struct crypto_lskcipher *skcipher = __    
222         struct lskcipher_alg *alg = crypto_lsk    
223                                                   
224         alg->exit(skcipher);                      
225 }                                                 
226                                                   
227 static int crypto_lskcipher_init_tfm(struct cr    
228 {                                                 
229         struct crypto_lskcipher *skcipher = __    
230         struct lskcipher_alg *alg = crypto_lsk    
231                                                   
232         if (alg->exit)                            
233                 skcipher->base.exit = crypto_l    
234                                                   
235         if (alg->init)                            
236                 return alg->init(skcipher);       
237                                                   
238         return 0;                                 
239 }                                                 
240                                                   
241 static void crypto_lskcipher_free_instance(str    
242 {                                                 
243         struct lskcipher_instance *skcipher =     
244                 container_of(inst, struct lskc    
245                                                   
246         skcipher->free(skcipher);                 
247 }                                                 
248                                                   
249 static void __maybe_unused crypto_lskcipher_sh    
250         struct seq_file *m, struct crypto_alg     
251 {                                                 
252         struct lskcipher_alg *skcipher = __cry    
253                                                   
254         seq_printf(m, "type         : lskciphe    
255         seq_printf(m, "blocksize    : %u\n", a    
256         seq_printf(m, "min keysize  : %u\n", s    
257         seq_printf(m, "max keysize  : %u\n", s    
258         seq_printf(m, "ivsize       : %u\n", s    
259         seq_printf(m, "chunksize    : %u\n", s    
260         seq_printf(m, "statesize    : %u\n", s    
261 }                                                 
262                                                   
263 static int __maybe_unused crypto_lskcipher_rep    
264         struct sk_buff *skb, struct crypto_alg    
265 {                                                 
266         struct lskcipher_alg *skcipher = __cry    
267         struct crypto_report_blkcipher rblkcip    
268                                                   
269         memset(&rblkcipher, 0, sizeof(rblkciph    
270                                                   
271         strscpy(rblkcipher.type, "lskcipher",     
272         strscpy(rblkcipher.geniv, "<none>", si    
273                                                   
274         rblkcipher.blocksize = alg->cra_blocks    
275         rblkcipher.min_keysize = skcipher->co.    
276         rblkcipher.max_keysize = skcipher->co.    
277         rblkcipher.ivsize = skcipher->co.ivsiz    
278                                                   
279         return nla_put(skb, CRYPTOCFGA_REPORT_    
280                        sizeof(rblkcipher), &rb    
281 }                                                 
282                                                   
283 static const struct crypto_type crypto_lskciph    
284         .extsize = crypto_alg_extsize,            
285         .init_tfm = crypto_lskcipher_init_tfm,    
286         .free = crypto_lskcipher_free_instance    
287 #ifdef CONFIG_PROC_FS                             
288         .show = crypto_lskcipher_show,            
289 #endif                                            
290 #if IS_ENABLED(CONFIG_CRYPTO_USER)                
291         .report = crypto_lskcipher_report,        
292 #endif                                            
293         .maskclear = ~CRYPTO_ALG_TYPE_MASK,       
294         .maskset = CRYPTO_ALG_TYPE_MASK,          
295         .type = CRYPTO_ALG_TYPE_LSKCIPHER,        
296         .tfmsize = offsetof(struct crypto_lskc    
297 };                                                
298                                                   
299 static void crypto_lskcipher_exit_tfm_sg(struc    
300 {                                                 
301         struct crypto_lskcipher **ctx = crypto    
302                                                   
303         crypto_free_lskcipher(*ctx);              
304 }                                                 
305                                                   
306 int crypto_init_lskcipher_ops_sg(struct crypto    
307 {                                                 
308         struct crypto_lskcipher **ctx = crypto    
309         struct crypto_alg *calg = tfm->__crt_a    
310         struct crypto_lskcipher *skcipher;        
311                                                   
312         if (!crypto_mod_get(calg))                
313                 return -EAGAIN;                   
314                                                   
315         skcipher = crypto_create_tfm(calg, &cr    
316         if (IS_ERR(skcipher)) {                   
317                 crypto_mod_put(calg);             
318                 return PTR_ERR(skcipher);         
319         }                                         
320                                                   
321         *ctx = skcipher;                          
322         tfm->exit = crypto_lskcipher_exit_tfm_    
323                                                   
324         return 0;                                 
325 }                                                 
326                                                   
327 int crypto_grab_lskcipher(struct crypto_lskcip    
328                           struct crypto_instan    
329                           const char *name, u3    
330 {                                                 
331         spawn->base.frontend = &crypto_lskciph    
332         return crypto_grab_spawn(&spawn->base,    
333 }                                                 
334 EXPORT_SYMBOL_GPL(crypto_grab_lskcipher);         
335                                                   
336 struct crypto_lskcipher *crypto_alloc_lskciphe    
337                                                   
338 {                                                 
339         return crypto_alloc_tfm(alg_name, &cry    
340 }                                                 
341 EXPORT_SYMBOL_GPL(crypto_alloc_lskcipher);        
342                                                   
343 static int lskcipher_prepare_alg(struct lskcip    
344 {                                                 
345         struct crypto_alg *base = &alg->co.bas    
346         int err;                                  
347                                                   
348         err = skcipher_prepare_alg_common(&alg    
349         if (err)                                  
350                 return err;                       
351                                                   
352         if (alg->co.chunksize & (alg->co.chunk    
353                 return -EINVAL;                   
354                                                   
355         base->cra_type = &crypto_lskcipher_typ    
356         base->cra_flags |= CRYPTO_ALG_TYPE_LSK    
357                                                   
358         return 0;                                 
359 }                                                 
360                                                   
361 int crypto_register_lskcipher(struct lskcipher    
362 {                                                 
363         struct crypto_alg *base = &alg->co.bas    
364         int err;                                  
365                                                   
366         err = lskcipher_prepare_alg(alg);         
367         if (err)                                  
368                 return err;                       
369                                                   
370         return crypto_register_alg(base);         
371 }                                                 
372 EXPORT_SYMBOL_GPL(crypto_register_lskcipher);     
373                                                   
374 void crypto_unregister_lskcipher(struct lskcip    
375 {                                                 
376         crypto_unregister_alg(&alg->co.base);     
377 }                                                 
378 EXPORT_SYMBOL_GPL(crypto_unregister_lskcipher)    
379                                                   
380 int crypto_register_lskciphers(struct lskciphe    
381 {                                                 
382         int i, ret;                               
383                                                   
384         for (i = 0; i < count; i++) {             
385                 ret = crypto_register_lskciphe    
386                 if (ret)                          
387                         goto err;                 
388         }                                         
389                                                   
390         return 0;                                 
391                                                   
392 err:                                              
393         for (--i; i >= 0; --i)                    
394                 crypto_unregister_lskcipher(&a    
395                                                   
396         return ret;                               
397 }                                                 
398 EXPORT_SYMBOL_GPL(crypto_register_lskciphers);    
399                                                   
400 void crypto_unregister_lskciphers(struct lskci    
401 {                                                 
402         int i;                                    
403                                                   
404         for (i = count - 1; i >= 0; --i)          
405                 crypto_unregister_lskcipher(&a    
406 }                                                 
407 EXPORT_SYMBOL_GPL(crypto_unregister_lskciphers    
408                                                   
409 int lskcipher_register_instance(struct crypto_    
410                                 struct lskciph    
411 {                                                 
412         int err;                                  
413                                                   
414         if (WARN_ON(!inst->free))                 
415                 return -EINVAL;                   
416                                                   
417         err = lskcipher_prepare_alg(&inst->alg    
418         if (err)                                  
419                 return err;                       
420                                                   
421         return crypto_register_instance(tmpl,     
422 }                                                 
423 EXPORT_SYMBOL_GPL(lskcipher_register_instance)    
424                                                   
425 static int lskcipher_setkey_simple(struct cryp    
426                                    unsigned in    
427 {                                                 
428         struct crypto_lskcipher *cipher = lskc    
429                                                   
430         crypto_lskcipher_clear_flags(cipher, C    
431         crypto_lskcipher_set_flags(cipher, cry    
432                                    CRYPTO_TFM_    
433         return crypto_lskcipher_setkey(cipher,    
434 }                                                 
435                                                   
436 static int lskcipher_init_tfm_simple(struct cr    
437 {                                                 
438         struct lskcipher_instance *inst = lskc    
439         struct crypto_lskcipher **ctx = crypto    
440         struct crypto_lskcipher_spawn *spawn;     
441         struct crypto_lskcipher *cipher;          
442                                                   
443         spawn = lskcipher_instance_ctx(inst);     
444         cipher = crypto_spawn_lskcipher(spawn)    
445         if (IS_ERR(cipher))                       
446                 return PTR_ERR(cipher);           
447                                                   
448         *ctx = cipher;                            
449         return 0;                                 
450 }                                                 
451                                                   
452 static void lskcipher_exit_tfm_simple(struct c    
453 {                                                 
454         struct crypto_lskcipher **ctx = crypto    
455                                                   
456         crypto_free_lskcipher(*ctx);              
457 }                                                 
458                                                   
459 static void lskcipher_free_instance_simple(str    
460 {                                                 
461         crypto_drop_lskcipher(lskcipher_instan    
462         kfree(inst);                              
463 }                                                 
464                                                   
465 /**                                               
466  * lskcipher_alloc_instance_simple - allocate     
467  *                                                
468  * Allocate an lskcipher_instance for a simple    
469  * e.g. cbc or ecb.  The instance context will    
470  * that for the underlying cipher.  The {min,m    
471  * alignmask, and priority are set from the un    
472  * overridden if needed.  The tfm context defa    
473  * struct crypto_lskcipher *, and default ->se    
474  * ->exit() methods are installed.                
475  *                                                
476  * @tmpl: the template being instantiated         
477  * @tb: the template parameters                   
478  *                                                
479  * Return: a pointer to the new instance, or a    
480  *         needs to register the instance.        
481  */                                               
482 struct lskcipher_instance *lskcipher_alloc_ins    
483         struct crypto_template *tmpl, struct r    
484 {                                                 
485         u32 mask;                                 
486         struct lskcipher_instance *inst;          
487         struct crypto_lskcipher_spawn *spawn;     
488         char ecb_name[CRYPTO_MAX_ALG_NAME];       
489         struct lskcipher_alg *cipher_alg;         
490         const char *cipher_name;                  
491         int err;                                  
492                                                   
493         err = crypto_check_attr_type(tb, CRYPT    
494         if (err)                                  
495                 return ERR_PTR(err);              
496                                                   
497         cipher_name = crypto_attr_alg_name(tb[    
498         if (IS_ERR(cipher_name))                  
499                 return ERR_CAST(cipher_name);     
500                                                   
501         inst = kzalloc(sizeof(*inst) + sizeof(    
502         if (!inst)                                
503                 return ERR_PTR(-ENOMEM);          
504                                                   
505         spawn = lskcipher_instance_ctx(inst);     
506         err = crypto_grab_lskcipher(spawn,        
507                                     lskcipher_    
508                                     cipher_nam    
509                                                   
510         ecb_name[0] = 0;                          
511         if (err == -ENOENT && !!memcmp(tmpl->n    
512                 err = -ENAMETOOLONG;              
513                 if (snprintf(ecb_name, CRYPTO_    
514                              cipher_name) >= C    
515                         goto err_free_inst;       
516                                                   
517                 err = crypto_grab_lskcipher(sp    
518                                             ls    
519                                             ec    
520         }                                         
521                                                   
522         if (err)                                  
523                 goto err_free_inst;               
524                                                   
525         cipher_alg = crypto_lskcipher_spawn_al    
526                                                   
527         err = crypto_inst_setname(lskcipher_cr    
528                                   &cipher_alg-    
529         if (err)                                  
530                 goto err_free_inst;               
531                                                   
532         if (ecb_name[0]) {                        
533                 int len;                          
534                                                   
535                 err = -EINVAL;                    
536                 len = strscpy(ecb_name, &ciphe    
537                               sizeof(ecb_name)    
538                 if (len < 2)                      
539                         goto err_free_inst;       
540                                                   
541                 if (ecb_name[len - 1] != ')')     
542                         goto err_free_inst;       
543                                                   
544                 ecb_name[len - 1] = 0;            
545                                                   
546                 err = -ENAMETOOLONG;              
547                 if (snprintf(inst->alg.co.base    
548                              "%s(%s)", tmpl->n    
549                     CRYPTO_MAX_ALG_NAME)          
550                         goto err_free_inst;       
551                                                   
552                 if (strcmp(ecb_name, cipher_na    
553                     snprintf(inst->alg.co.base    
554                              CRYPTO_MAX_ALG_NA    
555                              "%s(%s)", tmpl->n    
556                     CRYPTO_MAX_ALG_NAME)          
557                         goto err_free_inst;       
558         } else {                                  
559                 /* Don't allow nesting. */        
560                 err = -ELOOP;                     
561                 if ((cipher_alg->co.base.cra_f    
562                         goto err_free_inst;       
563         }                                         
564                                                   
565         err = -EINVAL;                            
566         if (cipher_alg->co.ivsize)                
567                 goto err_free_inst;               
568                                                   
569         inst->free = lskcipher_free_instance_s    
570                                                   
571         /* Default algorithm properties, can b    
572         inst->alg.co.base.cra_blocksize = ciph    
573         inst->alg.co.base.cra_alignmask = ciph    
574         inst->alg.co.base.cra_priority = ciphe    
575         inst->alg.co.min_keysize = cipher_alg-    
576         inst->alg.co.max_keysize = cipher_alg-    
577         inst->alg.co.ivsize = cipher_alg->co.b    
578         inst->alg.co.statesize = cipher_alg->c    
579                                                   
580         /* Use struct crypto_lskcipher * by de    
581         inst->alg.co.base.cra_ctxsize = sizeof    
582         inst->alg.setkey = lskcipher_setkey_si    
583         inst->alg.init = lskcipher_init_tfm_si    
584         inst->alg.exit = lskcipher_exit_tfm_si    
585                                                   
586         return inst;                              
587                                                   
588 err_free_inst:                                    
589         lskcipher_free_instance_simple(inst);     
590         return ERR_PTR(err);                      
591 }                                                 
592 EXPORT_SYMBOL_GPL(lskcipher_alloc_instance_sim    
593                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php