kernel: add support for 3.9-rc2
[openwrt.git] / target / linux / generic / patches-3.9 / 902-debloat_proc.patch
1 --- a/fs/locks.c
2 +++ b/fs/locks.c
3 @@ -2267,6 +2267,8 @@ static const struct file_operations proc
4  
5  static int __init proc_locks_init(void)
6  {
7 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
8 +               return 0;
9         proc_create("locks", 0, NULL, &proc_locks_operations);
10         return 0;
11  }
12 --- a/fs/proc/Kconfig
13 +++ b/fs/proc/Kconfig
14 @@ -67,3 +67,8 @@ config PROC_PAGE_MONITOR
15           /proc/pid/smaps, /proc/pid/clear_refs, /proc/pid/pagemap,
16           /proc/kpagecount, and /proc/kpageflags. Disabling these
17            interfaces will reduce the size of the kernel by approximately 4kb.
18 +
19 +config PROC_STRIPPED
20 +       default n
21 +       depends on EXPERT
22 +       bool "Strip non-essential /proc functionality to reduce code size"
23 --- a/fs/proc/consoles.c
24 +++ b/fs/proc/consoles.c
25 @@ -108,6 +108,9 @@ static const struct file_operations proc
26  
27  static int __init proc_consoles_init(void)
28  {
29 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
30 +               return 0;
31 +
32         proc_create("consoles", 0, NULL, &proc_consoles_operations);
33         return 0;
34  }
35 --- a/fs/proc/proc_tty.c
36 +++ b/fs/proc/proc_tty.c
37 @@ -143,7 +143,10 @@ static const struct file_operations proc
38  void proc_tty_register_driver(struct tty_driver *driver)
39  {
40         struct proc_dir_entry *ent;
41 -               
42 +
43 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
44 +               return;
45 +
46         if (!driver->driver_name || driver->proc_entry ||
47             !driver->ops->proc_fops)
48                 return;
49 @@ -160,6 +163,9 @@ void proc_tty_unregister_driver(struct t
50  {
51         struct proc_dir_entry *ent;
52  
53 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
54 +               return;
55 +
56         ent = driver->proc_entry;
57         if (!ent)
58                 return;
59 @@ -174,6 +180,9 @@ void proc_tty_unregister_driver(struct t
60   */
61  void __init proc_tty_init(void)
62  {
63 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
64 +               return;
65 +
66         if (!proc_mkdir("tty", NULL))
67                 return;
68         proc_tty_ldisc = proc_mkdir("tty/ldisc", NULL);
69 --- a/kernel/exec_domain.c
70 +++ b/kernel/exec_domain.c
71 @@ -173,6 +173,8 @@ static const struct file_operations exec
72  
73  static int __init proc_execdomains_init(void)
74  {
75 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
76 +               return 0;
77         proc_create("execdomains", 0, NULL, &execdomains_proc_fops);
78         return 0;
79  }
80 --- a/kernel/irq/proc.c
81 +++ b/kernel/irq/proc.c
82 @@ -311,6 +311,9 @@ void register_irq_proc(unsigned int irq,
83  {
84         char name [MAX_NAMELEN];
85  
86 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
87 +               return;
88 +
89         if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip) || desc->dir)
90                 return;
91  
92 @@ -347,6 +350,9 @@ void unregister_irq_proc(unsigned int ir
93  {
94         char name [MAX_NAMELEN];
95  
96 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
97 +               return;
98 +
99         if (!root_irq_dir || !desc->dir)
100                 return;
101  #ifdef CONFIG_SMP
102 @@ -386,6 +392,9 @@ void init_irq_proc(void)
103         unsigned int irq;
104         struct irq_desc *desc;
105  
106 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
107 +               return;
108 +
109         /* create /proc/irq */
110         root_irq_dir = proc_mkdir("irq", NULL);
111         if (!root_irq_dir)
112 --- a/kernel/time/timer_list.c
113 +++ b/kernel/time/timer_list.c
114 @@ -293,6 +293,8 @@ static int __init init_timer_list_procfs
115  {
116         struct proc_dir_entry *pe;
117  
118 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
119 +               return 0;
120         pe = proc_create("timer_list", 0444, NULL, &timer_list_fops);
121         if (!pe)
122                 return -ENOMEM;
123 --- a/mm/vmalloc.c
124 +++ b/mm/vmalloc.c
125 @@ -2641,6 +2641,8 @@ static const struct file_operations proc
126  
127  static int __init proc_vmalloc_init(void)
128  {
129 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
130 +               return 0;
131         proc_create("vmallocinfo", S_IRUSR, NULL, &proc_vmalloc_operations);
132         return 0;
133  }
134 --- a/mm/vmstat.c
135 +++ b/mm/vmstat.c
136 @@ -1239,10 +1239,12 @@ static int __init setup_vmstat(void)
137                 start_cpu_timer(cpu);
138  #endif
139  #ifdef CONFIG_PROC_FS
140 -       proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations);
141 -       proc_create("pagetypeinfo", S_IRUGO, NULL, &pagetypeinfo_file_ops);
142 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED)) {
143 +               proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations);
144 +               proc_create("pagetypeinfo", S_IRUGO, NULL, &pagetypeinfo_file_ops);
145 +               proc_create("zoneinfo", S_IRUGO, NULL, &proc_zoneinfo_file_operations);
146 +       }
147         proc_create("vmstat", S_IRUGO, NULL, &proc_vmstat_file_operations);
148 -       proc_create("zoneinfo", S_IRUGO, NULL, &proc_zoneinfo_file_operations);
149  #endif
150         return 0;
151  }
152 --- a/net/8021q/vlanproc.c
153 +++ b/net/8021q/vlanproc.c
154 @@ -127,6 +127,9 @@ void vlan_proc_cleanup(struct net *net)
155  {
156         struct vlan_net *vn = net_generic(net, vlan_net_id);
157  
158 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
159 +               return;
160 +
161         if (vn->proc_vlan_conf)
162                 remove_proc_entry(name_conf, vn->proc_vlan_dir);
163  
164 @@ -146,6 +149,9 @@ int __net_init vlan_proc_init(struct net
165  {
166         struct vlan_net *vn = net_generic(net, vlan_net_id);
167  
168 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
169 +               return 0;
170 +
171         vn->proc_vlan_dir = proc_net_mkdir(net, name_root, net->proc_net);
172         if (!vn->proc_vlan_dir)
173                 goto err;
174 --- a/net/core/sock.c
175 +++ b/net/core/sock.c
176 @@ -2857,6 +2857,8 @@ static __net_initdata struct pernet_oper
177  
178  static int __init proto_init(void)
179  {
180 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
181 +               return 0;
182         return register_pernet_subsys(&proto_net_ops);
183  }
184  
185 --- a/net/ipv4/fib_trie.c
186 +++ b/net/ipv4/fib_trie.c
187 @@ -2598,10 +2598,12 @@ static const struct file_operations fib_
188  
189  int __net_init fib_proc_init(struct net *net)
190  {
191 -       if (!proc_create("fib_trie", S_IRUGO, net->proc_net, &fib_trie_fops))
192 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED) &&
193 +               !proc_create("fib_trie", S_IRUGO, net->proc_net, &fib_trie_fops))
194                 goto out1;
195  
196 -       if (!proc_create("fib_triestat", S_IRUGO, net->proc_net,
197 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED) &&
198 +               !proc_create("fib_triestat", S_IRUGO, net->proc_net,
199                          &fib_triestat_fops))
200                 goto out2;
201  
202 @@ -2611,17 +2613,21 @@ int __net_init fib_proc_init(struct net
203         return 0;
204  
205  out3:
206 -       remove_proc_entry("fib_triestat", net->proc_net);
207 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED))
208 +               remove_proc_entry("fib_triestat", net->proc_net);
209  out2:
210 -       remove_proc_entry("fib_trie", net->proc_net);
211 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED))
212 +               remove_proc_entry("fib_trie", net->proc_net);
213  out1:
214         return -ENOMEM;
215  }
216  
217  void __net_exit fib_proc_exit(struct net *net)
218  {
219 -       remove_proc_entry("fib_trie", net->proc_net);
220 -       remove_proc_entry("fib_triestat", net->proc_net);
221 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED)) {
222 +               remove_proc_entry("fib_trie", net->proc_net);
223 +               remove_proc_entry("fib_triestat", net->proc_net);
224 +       }
225         remove_proc_entry("route", net->proc_net);
226  }
227  
228 --- a/net/ipv4/igmp.c
229 +++ b/net/ipv4/igmp.c
230 @@ -2674,6 +2674,8 @@ static struct pernet_operations igmp_net
231  
232  int __init igmp_mc_proc_init(void)
233  {
234 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
235 +               return 0;
236         return register_pernet_subsys(&igmp_net_ops);
237  }
238  #endif
239 --- a/net/ipv4/ipmr.c
240 +++ b/net/ipv4/ipmr.c
241 @@ -71,6 +71,10 @@
242  #define CONFIG_IP_PIMSM        1
243  #endif
244  
245 +#ifdef CONFIG_PROC_STRIPPED
246 +#undef CONFIG_PROC_FS
247 +#endif
248 +
249  struct mr_table {
250         struct list_head        list;
251  #ifdef CONFIG_NET_NS
252 --- a/net/ipv4/proc.c
253 +++ b/net/ipv4/proc.c
254 @@ -503,6 +503,9 @@ static __net_initdata struct pernet_oper
255  
256  int __init ip_misc_proc_init(void)
257  {
258 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
259 +               return 0;
260 +
261         return register_pernet_subsys(&ip_proc_ops);
262  }
263  
264 --- a/net/ipv4/route.c
265 +++ b/net/ipv4/route.c
266 @@ -423,6 +423,9 @@ static struct pernet_operations ip_rt_pr
267  
268  static int __init ip_rt_proc_init(void)
269  {
270 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
271 +               return 0;
272 +
273         return register_pernet_subsys(&ip_rt_proc_ops);
274  }
275  
276 --- a/ipc/msg.c
277 +++ b/ipc/msg.c
278 @@ -135,6 +135,9 @@ void __init msg_init(void)
279         printk(KERN_INFO "msgmni has been set to %d\n",
280                 init_ipc_ns.msg_ctlmni);
281  
282 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
283 +               return;
284 +
285         ipc_init_proc_interface("sysvipc/msg",
286                                 "       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime\n",
287                                 IPC_MSG_IDS, sysvipc_msg_proc_show);
288 --- a/ipc/sem.c
289 +++ b/ipc/sem.c
290 @@ -185,6 +185,8 @@ void sem_exit_ns(struct ipc_namespace *n
291  void __init sem_init (void)
292  {
293         sem_init_ns(&init_ipc_ns);
294 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
295 +               return;
296         ipc_init_proc_interface("sysvipc/sem",
297                                 "       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime\n",
298                                 IPC_SEM_IDS, sysvipc_sem_proc_show);
299 --- a/ipc/shm.c
300 +++ b/ipc/shm.c
301 @@ -115,6 +115,8 @@ pure_initcall(ipc_ns_init);
302  
303  void __init shm_init (void)
304  {
305 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
306 +               return;
307         ipc_init_proc_interface("sysvipc/shm",
308  #if BITS_PER_LONG <= 32
309                                 "       key      shmid perms       size  cpid  lpid nattch   uid   gid  cuid  cgid      atime      dtime      ctime        rss       swap\n",
310 --- a/ipc/util.c
311 +++ b/ipc/util.c
312 @@ -149,6 +149,9 @@ void __init ipc_init_proc_interface(cons
313         struct proc_dir_entry *pde;
314         struct ipc_proc_iface *iface;
315  
316 +       if (IS_ENABLED(CONFIG_PROC_STRIPPED))
317 +               return;
318 +
319         iface = kmalloc(sizeof(*iface), GFP_KERNEL);
320         if (!iface)
321                 return;
322 --- a/net/core/net-procfs.c
323 +++ b/net/core/net-procfs.c
324 @@ -306,10 +306,12 @@ static int __net_init dev_proc_net_init(
325  
326         if (!proc_create("dev", S_IRUGO, net->proc_net, &dev_seq_fops))
327                 goto out;
328 -       if (!proc_create("softnet_stat", S_IRUGO, net->proc_net,
329 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED) &&
330 +               !proc_create("softnet_stat", S_IRUGO, net->proc_net,
331                          &softnet_seq_fops))
332                 goto out_dev;
333 -       if (!proc_create("ptype", S_IRUGO, net->proc_net, &ptype_seq_fops))
334 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED) &&
335 +               !proc_create("ptype", S_IRUGO, net->proc_net, &ptype_seq_fops))
336                 goto out_softnet;
337  
338         if (wext_proc_init(net))
339 @@ -318,9 +320,11 @@ static int __net_init dev_proc_net_init(
340  out:
341         return rc;
342  out_ptype:
343 -       remove_proc_entry("ptype", net->proc_net);
344 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED))
345 +               remove_proc_entry("ptype", net->proc_net);
346  out_softnet:
347 -       remove_proc_entry("softnet_stat", net->proc_net);
348 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED))
349 +               remove_proc_entry("softnet_stat", net->proc_net);
350  out_dev:
351         remove_proc_entry("dev", net->proc_net);
352         goto out;
353 @@ -330,8 +334,10 @@ static void __net_exit dev_proc_net_exit
354  {
355         wext_proc_exit(net);
356  
357 -       remove_proc_entry("ptype", net->proc_net);
358 -       remove_proc_entry("softnet_stat", net->proc_net);
359 +       if (!IS_ENABLED(CONFIG_PROC_STRIPPED)) {
360 +               remove_proc_entry("ptype", net->proc_net);
361 +               remove_proc_entry("softnet_stat", net->proc_net);
362 +       }
363         remove_proc_entry("dev", net->proc_net);
364  }
365