.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * kernel/configs.c |
---|
3 | 4 | * Echo the kernel .config file used to build the kernel |
---|
.. | .. |
---|
6 | 7 | * Copyright (C) 2002 Randy Dunlap <rdunlap@xenotime.net> |
---|
7 | 8 | * Copyright (C) 2002 Al Stone <ahs3@fc.hp.com> |
---|
8 | 9 | * Copyright (C) 2002 Hewlett-Packard Company |
---|
9 | | - * |
---|
10 | | - * This program is free software; you can redistribute it and/or modify |
---|
11 | | - * it under the terms of the GNU General Public License as published by |
---|
12 | | - * the Free Software Foundation; either version 2 of the License, or (at |
---|
13 | | - * your option) any later version. |
---|
14 | | - * |
---|
15 | | - * This program is distributed in the hope that it will be useful, but |
---|
16 | | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
17 | | - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or |
---|
18 | | - * NON INFRINGEMENT. See the GNU General Public License for more |
---|
19 | | - * details. |
---|
20 | | - * |
---|
21 | | - * You should have received a copy of the GNU General Public License |
---|
22 | | - * along with this program; if not, write to the Free Software |
---|
23 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
---|
24 | 10 | */ |
---|
25 | 11 | |
---|
26 | 12 | #include <linux/kernel.h> |
---|
.. | .. |
---|
30 | 16 | #include <linux/init.h> |
---|
31 | 17 | #include <linux/uaccess.h> |
---|
32 | 18 | |
---|
33 | | -/**************************************************/ |
---|
34 | | -/* the actual current config file */ |
---|
35 | | - |
---|
36 | 19 | /* |
---|
37 | | - * Define kernel_config_data and kernel_config_data_size, which contains the |
---|
38 | | - * wrapped and compressed configuration file. The file is first compressed |
---|
39 | | - * with gzip and then bounded by two eight byte magic numbers to allow |
---|
40 | | - * extraction from a binary kernel image: |
---|
41 | | - * |
---|
42 | | - * IKCFG_ST |
---|
43 | | - * <image> |
---|
44 | | - * IKCFG_ED |
---|
| 20 | + * "IKCFG_ST" and "IKCFG_ED" are used to extract the config data from |
---|
| 21 | + * a binary kernel image or a module. See scripts/extract-ikconfig. |
---|
45 | 22 | */ |
---|
46 | | -#define MAGIC_START "IKCFG_ST" |
---|
47 | | -#define MAGIC_END "IKCFG_ED" |
---|
48 | | -#include "config_data.h" |
---|
49 | | - |
---|
50 | | - |
---|
51 | | -#define MAGIC_SIZE (sizeof(MAGIC_START) - 1) |
---|
52 | | -#define kernel_config_data_size \ |
---|
53 | | - (sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2) |
---|
| 23 | +asm ( |
---|
| 24 | +" .pushsection .rodata, \"a\" \n" |
---|
| 25 | +" .ascii \"IKCFG_ST\" \n" |
---|
| 26 | +" .global kernel_config_data \n" |
---|
| 27 | +"kernel_config_data: \n" |
---|
| 28 | +" .incbin \"kernel/config_data.gz\" \n" |
---|
| 29 | +" .global kernel_config_data_end \n" |
---|
| 30 | +"kernel_config_data_end: \n" |
---|
| 31 | +" .ascii \"IKCFG_ED\" \n" |
---|
| 32 | +" .popsection \n" |
---|
| 33 | +); |
---|
54 | 34 | |
---|
55 | 35 | #ifdef CONFIG_IKCONFIG_PROC |
---|
| 36 | + |
---|
| 37 | +extern char kernel_config_data; |
---|
| 38 | +extern char kernel_config_data_end; |
---|
56 | 39 | |
---|
57 | 40 | static ssize_t |
---|
58 | 41 | ikconfig_read_current(struct file *file, char __user *buf, |
---|
59 | 42 | size_t len, loff_t * offset) |
---|
60 | 43 | { |
---|
61 | 44 | return simple_read_from_buffer(buf, len, offset, |
---|
62 | | - kernel_config_data + MAGIC_SIZE, |
---|
63 | | - kernel_config_data_size); |
---|
| 45 | + &kernel_config_data, |
---|
| 46 | + &kernel_config_data_end - |
---|
| 47 | + &kernel_config_data); |
---|
64 | 48 | } |
---|
65 | 49 | |
---|
66 | | -static const struct file_operations ikconfig_file_ops = { |
---|
67 | | - .owner = THIS_MODULE, |
---|
68 | | - .read = ikconfig_read_current, |
---|
69 | | - .llseek = default_llseek, |
---|
| 50 | +static const struct proc_ops config_gz_proc_ops = { |
---|
| 51 | + .proc_read = ikconfig_read_current, |
---|
| 52 | + .proc_lseek = default_llseek, |
---|
70 | 53 | }; |
---|
71 | 54 | |
---|
72 | 55 | static int __init ikconfig_init(void) |
---|
.. | .. |
---|
75 | 58 | |
---|
76 | 59 | /* create the current config file */ |
---|
77 | 60 | entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL, |
---|
78 | | - &ikconfig_file_ops); |
---|
| 61 | + &config_gz_proc_ops); |
---|
79 | 62 | if (!entry) |
---|
80 | 63 | return -ENOMEM; |
---|
81 | 64 | |
---|
82 | | - proc_set_size(entry, kernel_config_data_size); |
---|
| 65 | + proc_set_size(entry, &kernel_config_data_end - &kernel_config_data); |
---|
83 | 66 | |
---|
84 | 67 | return 0; |
---|
85 | 68 | } |
---|