mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 00:00:00 +00:00
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>
This commit is contained in:
parent
b6cbf3ef4f
commit
e334016fc1
@ -697,6 +697,8 @@ static int input_handlers_read(char *buf, char **start, off_t pos, int count, in
|
|||||||
return (count > cnt) ? cnt : count;
|
return (count > cnt) ? cnt : count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct file_operations input_fileops;
|
||||||
|
|
||||||
static int __init input_proc_init(void)
|
static int __init input_proc_init(void)
|
||||||
{
|
{
|
||||||
struct proc_dir_entry *entry;
|
struct proc_dir_entry *entry;
|
||||||
@ -711,6 +713,8 @@ static int __init input_proc_init(void)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
entry->owner = THIS_MODULE;
|
entry->owner = THIS_MODULE;
|
||||||
|
input_fileops = *entry->proc_fops;
|
||||||
|
entry->proc_fops = &input_fileops;
|
||||||
entry->proc_fops->poll = input_devices_poll;
|
entry->proc_fops->poll = input_devices_poll;
|
||||||
entry = create_proc_read_entry("handlers", 0, proc_bus_input_dir, input_handlers_read, NULL);
|
entry = create_proc_read_entry("handlers", 0, proc_bus_input_dir, input_handlers_read, NULL);
|
||||||
if (entry == NULL) {
|
if (entry == NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user