/* * Copyright 2023 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * https://github.com/torvalds/linux/blob/master/crypto/fips.c * https://pointer-overloading.blogspot.com/2013/09/linux-creating-entry-in-proc-file.html */ #include #include int fips_enabled = 1; static struct ctl_table crypto_sysctl_table[] = { { .procname = "fips_enabled", .data = &fips_enabled, .maxlen = sizeof(int), .mode = 0444, .proc_handler = proc_dointvec }, {} }; static struct ctl_table crypto_dir_table[] = { { .procname = "crypto", .mode = 0555, .child = crypto_sysctl_table }, {} }; static struct ctl_table_header *crypto_sysctls; static void crypto_proc_fips_init(void) { crypto_sysctls = register_sysctl_table(crypto_dir_table); } static void crypto_proc_fips_exit(void) { unregister_sysctl_table(crypto_sysctls); } static int __init fips_init(void) { crypto_proc_fips_init(); return 0; } static void __exit fips_exit(void) { crypto_proc_fips_exit(); } MODULE_LICENSE("GPL"); subsys_initcall(fips_init); module_exit(fips_exit);