aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorLuke Kosewski <lkosewsk@nit.ca>2005-06-01 03:39:28 -0400
committerDmitry Torokhov <dtor_core@ameritech.net>2005-06-01 03:39:28 -0400
commite334016fc1735e491385e14157a0360cd85c321b (patch)
treeedc583a85baac6975b38b8684825f3dfcbfc53b7 /drivers/input/input.c
parentb6cbf3ef4f270c0dfe84b26649e4fc0c25bb0844 (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.c4
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
700static struct file_operations input_fileops;
701
700static int __init input_proc_init(void) 702static 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) {