Denis V. Lunev
59b7435149
proc: introduce proc_create_data to setup de->data
This set of patches fixes an proc ->open'less usage due to ->proc_fops flip in
the most part of the kernel code. The original OOPS is described in the
commit 2d3a4e3666:
Typical PDE creation code looks like:
pde = create_proc_entry("foo", 0, NULL);
if (pde)
pde->proc_fops = &foo_proc_fops;
Notice that PDE is first created, only then ->proc_fops is set up to
final value. This is a problem because right after creation
a) PDE is fully visible in /proc , and
b) ->proc_fops are proc_file_operations which do not have ->open callback. So, it's
possible to ->read without ->open (see one class of oopses below).
The fix is new API called proc_create() which makes sure ->proc_fops are
set up before gluing PDE to main tree. Typical new code looks like:
pde = proc_create("foo", 0, NULL, &foo_proc_fops);
if (!pde)
return -ENOMEM;
Fix most networking users for a start.
In the long run, create_proc_entry() for regular files will go.
In addition to this, proc_create_data is introduced to fix reading from
proc without PDE->data. The race is basically the same as above.
create_proc_entries is replaced in the entire kernel code as new method
is also simply better.
This patch:
The problem is the same as for de->proc_fops. Right now PDE becomes visible
without data set. So, the entry could be looked up without data. This, in
most cases, will simply OOPS.
proc_create_data call is created to address this issue. proc_create now
becomes a wrapper around it.
Signed-off-by: Denis V. Lunev <den@openvz.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Chris Mason <chris.mason@oracle.com>
Acked-by: David Howells <dhowells@redhat.com>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Grant Grundler <grundler@parisc-linux.org>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Jaroslav Kysela <perex@suse.cz>
Cc: Jeff Garzik <jgarzik@pobox.com>
Cc: Jeff Mahoney <jeffm@suse.com>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Karsten Keil <kkeil@suse.de>
Cc: Kyle McMartin <kyle@parisc-linux.org>
Cc: Len Brown <lenb@kernel.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Mikael Starvik <starvik@axis.com>
Cc: Nadia Derbey <Nadia.Derbey@bull.net>
Cc: Neil Brown <neilb@suse.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Osterlund <petero2@telia.com>
Cc: Pierre Peiffer <peifferp@gmail.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Takashi Iwai <tiwai@suse.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-29 08:06:20 -07:00
..
2008-04-24 14:07:46 -03:00
2008-04-25 13:00:11 -04:00
2008-04-19 11:29:08 +01:00
2008-04-25 14:52:32 -07:00
2008-04-22 20:10:10 +01:00
2008-04-25 13:00:11 -04:00
2008-04-28 08:58:42 -07:00
2008-04-17 23:56:30 -07:00
2008-04-24 11:46:16 -07:00
2008-04-24 21:16:52 -07:00
2008-04-20 21:47:02 -07:00
2008-04-29 08:06:00 -07:00
2008-04-19 19:10:33 -07:00
2008-04-19 09:59:43 +10:00
2008-04-29 08:06:00 -07:00
2008-04-29 08:06:04 -07:00
2008-04-21 09:50:08 +02:00
2008-04-28 08:58:19 -07:00
2008-04-29 08:05:59 -07:00
2008-04-21 09:51:05 +02:00
2008-04-28 08:58:25 -07:00
2008-04-22 15:16:32 -05:00
2008-04-29 08:06:01 -07:00
2008-04-28 08:58:19 -07:00
2008-04-28 08:58:26 -07:00
2008-04-21 09:50:08 +02:00
2008-04-29 08:06:09 -07:00
2008-04-29 08:06:10 -07:00
2008-04-17 20:05:38 +02:00
2008-04-29 08:05:59 -07:00
2008-04-26 17:44:55 +02:00
2008-04-29 08:06:06 -07:00
2008-04-29 08:05:59 -07:00
2008-04-28 08:58:19 -07:00
2008-04-28 08:58:19 -07:00
2008-04-21 10:19:23 +08:00
2008-04-23 00:04:38 -04:00
2008-04-29 08:06:09 -07:00
2008-04-25 13:27:00 +01:00
2008-04-21 15:49:58 -07:00
2008-04-21 11:35:39 -05:00
2008-04-21 11:22:28 -05:00
2008-04-21 11:35:39 -05:00
2008-04-21 11:22:29 -05:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:55 +01:00
2008-04-29 08:06:11 -07:00
2008-04-29 08:06:11 -07:00
2008-04-21 22:38:45 +00:00
2008-04-28 08:58:30 -07:00
2008-04-19 19:19:54 +02:00
2008-04-29 08:06:16 -07:00
2008-04-19 19:10:33 -07:00
2008-04-23 16:13:42 -04:00
2008-04-28 08:58:35 -07:00
2008-04-25 09:23:59 -04:00
2008-04-29 08:06:00 -07:00
2008-04-29 08:05:58 -07:00
2008-04-18 00:46:24 +02:00
2008-04-28 10:03:31 -07:00
2008-04-22 11:34:59 +02:00
2008-04-18 22:22:54 -04:00
2008-04-28 08:58:25 -07:00
2008-04-19 19:10:28 -07:00
2008-04-22 22:16:46 +02:00
2008-04-24 14:09:42 -03:00
2008-04-22 22:16:46 +02:00
2008-04-28 08:58:34 -07:00
2008-04-28 23:44:42 +02:00
2008-04-23 21:25:36 -04:00
2008-04-18 22:16:54 -04:00
2008-04-28 08:58:26 -07:00
2008-04-29 08:06:03 -07:00
2008-04-29 08:06:02 -07:00
2008-04-20 21:47:08 -07:00
2008-04-29 08:06:13 -07:00
2008-04-29 08:06:15 -07:00
2008-04-29 08:06:15 -07:00
2008-04-19 19:19:54 +02:00
2008-04-19 19:10:28 -07:00
2008-04-18 22:16:54 -04:00
2008-04-18 22:16:54 -04:00
2008-04-21 16:36:46 -07:00
2008-04-29 08:06:04 -07:00
2008-04-29 08:06:14 -07:00
2008-04-18 22:16:54 -04:00
2008-04-29 08:06:17 -07:00
2008-04-29 08:06:16 -07:00
2008-04-17 20:05:42 +02:00
2008-04-28 08:58:32 -07:00
2008-04-19 19:44:57 +02:00
2008-04-27 18:21:46 +03:00
2008-04-27 12:00:27 +03:00
2008-04-27 12:01:15 +03:00
2008-04-27 18:21:37 +03:00
2008-04-24 23:49:30 +01:00
2008-04-25 00:46:09 -04:00
2008-04-29 08:06:04 -07:00
2008-04-29 08:06:01 -07:00
2008-04-29 08:06:10 -07:00
2008-04-28 08:58:25 -07:00
2008-04-29 08:06:12 -07:00
2008-04-28 08:58:25 -07:00
2008-04-19 19:10:29 -07:00
2008-04-24 14:07:43 -03:00
2008-04-19 19:10:28 -07:00
2008-04-29 08:06:17 -07:00
2008-04-29 08:06:17 -07:00
2008-04-28 08:58:25 -07:00
2008-04-23 00:05:03 -04:00
2008-04-23 00:04:51 -04:00
2008-04-28 08:58:47 -07:00
2008-04-29 08:06:12 -07:00
2008-04-28 08:58:29 -07:00
2008-04-23 16:13:37 -04:00
2008-04-19 16:54:56 -04:00
2008-04-19 16:55:29 -04:00
2008-04-19 16:53:15 -04:00
2008-04-28 08:58:19 -07:00
2008-04-29 08:06:13 -07:00
2008-04-28 08:58:18 -07:00
2008-04-28 08:58:22 -07:00
2008-04-18 22:22:54 -04:00
2008-04-20 21:47:03 -07:00
2008-04-20 21:47:03 -07:00
2008-04-20 21:47:07 -07:00
2008-04-29 08:06:04 -07:00
2008-04-29 08:06:02 -07:00
2008-04-29 08:06:02 -07:00
2008-04-25 02:08:52 -04:00
2008-04-19 19:10:26 -07:00
2008-04-19 19:10:26 -07:00
2008-04-28 08:58:26 -07:00
2008-04-29 08:06:20 -07:00
2008-04-28 08:58:33 -07:00
2008-04-28 08:58:33 -07:00
2008-04-19 19:10:33 -07:00
2008-04-28 08:58:46 -07:00
2008-04-29 08:06:10 -07:00
2008-04-29 08:05:59 -07:00
2008-04-23 22:10:48 -07:00
2008-04-29 08:06:10 -07:00
2008-04-28 08:58:26 -07:00
2008-04-29 08:06:16 -07:00
2008-04-19 09:53:46 +10:00
2008-04-17 10:43:01 -04:00
2008-04-23 00:04:38 -04:00
2008-04-25 00:25:08 +02:00
2008-04-28 08:58:32 -07:00
2008-04-17 20:05:37 +02:00
2008-04-28 08:58:25 -07:00
2008-04-21 15:51:36 -07:00
2008-04-27 18:28:18 +03:00
2008-04-29 08:06:05 -07:00
2008-04-28 08:58:36 -07:00
2008-04-28 08:58:20 -07:00
2008-04-28 08:58:29 -07:00
2008-04-29 08:06:06 -07:00
2008-04-19 19:44:59 +02:00
2008-04-22 15:16:31 -05:00
2008-04-19 19:44:59 +02:00
2008-04-19 19:10:33 -07:00
2008-04-17 20:05:37 +02:00
2008-04-17 20:05:36 +02:00
2008-04-24 21:16:42 -07:00
2008-04-24 21:16:57 -07:00
2008-04-24 21:16:54 -07:00
2008-04-24 14:07:56 -03:00
2008-04-28 08:58:21 -07:00
2008-04-28 08:58:23 -07:00
2008-04-29 08:06:06 -07:00
2008-04-25 00:29:34 -07:00