diff options
author | Luke Kosewski <lkosewsk@nit.ca> | 2005-06-01 03:39:28 -0400 |
---|---|---|
committer | Dmitry Torokhov <dtor_core@ameritech.net> | 2005-06-01 03:39:28 -0400 |
commit | e334016fc1735e491385e14157a0360cd85c321b (patch) | |
tree | edc583a85baac6975b38b8684825f3dfcbfc53b7 /drivers/input/input.c | |
parent | b6cbf3ef4f270c0dfe84b26649e4fc0c25bb0844 (diff) |
Input: do not corrupt system-wide procfs fops.
entry->proc_fops is a pointer to struct file_operations. When we
call create_proc_entry(...), it pointis to proc_file_operations,
deep in fs/proc/generic.c. By adding a 'poll' member to this struct
we effectively force the 'poll' member on every file in /proc,
which is wrong (they all fail select(...) calls).
This patch changes a copy of entry->proc_fops and reassigns it rather
than changing the original member.
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r-- | drivers/input/input.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index 1885f369e3e2..c1dbc04cf54a 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -697,6 +697,8 @@ static int input_handlers_read(char *buf, char **start, off_t pos, int count, in | |||
697 | return (count > cnt) ? cnt : count; | 697 | return (count > cnt) ? cnt : count; |
698 | } | 698 | } |
699 | 699 | ||
700 | static struct file_operations input_fileops; | ||
701 | |||
700 | static int __init input_proc_init(void) | 702 | static int __init input_proc_init(void) |
701 | { | 703 | { |
702 | struct proc_dir_entry *entry; | 704 | struct proc_dir_entry *entry; |
@@ -711,6 +713,8 @@ static int __init input_proc_init(void) | |||
711 | return -ENOMEM; | 713 | return -ENOMEM; |
712 | } | 714 | } |
713 | entry->owner = THIS_MODULE; | 715 | entry->owner = THIS_MODULE; |
716 | input_fileops = *entry->proc_fops; | ||
717 | entry->proc_fops = &input_fileops; | ||
714 | entry->proc_fops->poll = input_devices_poll; | 718 | entry->proc_fops->poll = input_devices_poll; |
715 | entry = create_proc_read_entry("handlers", 0, proc_bus_input_dir, input_handlers_read, NULL); | 719 | entry = create_proc_read_entry("handlers", 0, proc_bus_input_dir, input_handlers_read, NULL); |
716 | if (entry == NULL) { | 720 | if (entry == NULL) { |