The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/crypto/proc.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Scatterlist Cryptographic API.
    3  *
    4  * Procfs information.
    5  *
    6  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
    7  * Copyright (c) 2005 Herbert Xu <herbert@gondor.apana.org.au>
    8  *
    9  * This program is free software; you can redistribute it and/or modify it
   10  * under the terms of the GNU General Public License as published by the Free
   11  * Software Foundation; either version 2 of the License, or (at your option) 
   12  * any later version.
   13  *
   14  */
   15 
   16 #include <linux/atomic.h>
   17 #include <linux/init.h>
   18 #include <linux/crypto.h>
   19 #include <linux/module.h>       /* for module_name() */
   20 #include <linux/rwsem.h>
   21 #include <linux/proc_fs.h>
   22 #include <linux/seq_file.h>
   23 #include <linux/sysctl.h>
   24 #include "internal.h"
   25 
   26 #ifdef CONFIG_CRYPTO_FIPS
   27 static struct ctl_table crypto_sysctl_table[] = {
   28         {
   29                 .procname       = "fips_enabled",
   30                 .data           = &fips_enabled,
   31                 .maxlen         = sizeof(int),
   32                 .mode           = 0444,
   33                 .proc_handler   = proc_dointvec
   34         },
   35         {}
   36 };
   37 
   38 static struct ctl_table crypto_dir_table[] = {
   39         {
   40                 .procname       = "crypto",
   41                 .mode           = 0555,
   42                 .child          = crypto_sysctl_table
   43         },
   44         {}
   45 };
   46 
   47 static struct ctl_table_header *crypto_sysctls;
   48 
   49 static void crypto_proc_fips_init(void)
   50 {
   51         crypto_sysctls = register_sysctl_table(crypto_dir_table);
   52 }
   53 
   54 static void crypto_proc_fips_exit(void)
   55 {
   56         if (crypto_sysctls)
   57                 unregister_sysctl_table(crypto_sysctls);
   58 }
   59 #else
   60 #define crypto_proc_fips_init()
   61 #define crypto_proc_fips_exit()
   62 #endif
   63 
   64 static void *c_start(struct seq_file *m, loff_t *pos)
   65 {
   66         down_read(&crypto_alg_sem);
   67         return seq_list_start(&crypto_alg_list, *pos);
   68 }
   69 
   70 static void *c_next(struct seq_file *m, void *p, loff_t *pos)
   71 {
   72         return seq_list_next(p, &crypto_alg_list, pos);
   73 }
   74 
   75 static void c_stop(struct seq_file *m, void *p)
   76 {
   77         up_read(&crypto_alg_sem);
   78 }
   79 
   80 static int c_show(struct seq_file *m, void *p)
   81 {
   82         struct crypto_alg *alg = list_entry(p, struct crypto_alg, cra_list);
   83         
   84         seq_printf(m, "name         : %s\n", alg->cra_name);
   85         seq_printf(m, "driver       : %s\n", alg->cra_driver_name);
   86         seq_printf(m, "module       : %s\n", module_name(alg->cra_module));
   87         seq_printf(m, "priority     : %d\n", alg->cra_priority);
   88         seq_printf(m, "refcnt       : %d\n", atomic_read(&alg->cra_refcnt));
   89         seq_printf(m, "selftest     : %s\n",
   90                    (alg->cra_flags & CRYPTO_ALG_TESTED) ?
   91                    "passed" : "unknown");
   92 
   93         if (alg->cra_flags & CRYPTO_ALG_LARVAL) {
   94                 seq_printf(m, "type         : larval\n");
   95                 seq_printf(m, "flags        : 0x%x\n", alg->cra_flags);
   96                 goto out;
   97         }
   98 
   99         if (alg->cra_type && alg->cra_type->show) {
  100                 alg->cra_type->show(m, alg);
  101                 goto out;
  102         }
  103         
  104         switch (alg->cra_flags & (CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_LARVAL)) {
  105         case CRYPTO_ALG_TYPE_CIPHER:
  106                 seq_printf(m, "type         : cipher\n");
  107                 seq_printf(m, "blocksize    : %u\n", alg->cra_blocksize);
  108                 seq_printf(m, "min keysize  : %u\n",
  109                                         alg->cra_cipher.cia_min_keysize);
  110                 seq_printf(m, "max keysize  : %u\n",
  111                                         alg->cra_cipher.cia_max_keysize);
  112                 break;
  113         case CRYPTO_ALG_TYPE_COMPRESS:
  114                 seq_printf(m, "type         : compression\n");
  115                 break;
  116         default:
  117                 seq_printf(m, "type         : unknown\n");
  118                 break;
  119         }
  120 
  121 out:
  122         seq_putc(m, '\n');
  123         return 0;
  124 }
  125 
  126 static const struct seq_operations crypto_seq_ops = {
  127         .start          = c_start,
  128         .next           = c_next,
  129         .stop           = c_stop,
  130         .show           = c_show
  131 };
  132 
  133 static int crypto_info_open(struct inode *inode, struct file *file)
  134 {
  135         return seq_open(file, &crypto_seq_ops);
  136 }
  137         
  138 static const struct file_operations proc_crypto_ops = {
  139         .open           = crypto_info_open,
  140         .read           = seq_read,
  141         .llseek         = seq_lseek,
  142         .release        = seq_release
  143 };
  144 
  145 void __init crypto_init_proc(void)
  146 {
  147         proc_create("crypto", 0, NULL, &proc_crypto_ops);
  148         crypto_proc_fips_init();
  149 }
  150 
  151 void __exit crypto_exit_proc(void)
  152 {
  153         crypto_proc_fips_exit();
  154         remove_proc_entry("crypto", NULL);
  155 }

Cache object: ed987a3e813c8a7710f7a0789c92d9f7


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.