diff options
author | Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> | 2010-06-25 12:22:09 +0900 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2010-08-02 15:34:55 +1000 |
commit | 0849e3ba53c3ef603dffa9758a73e07ed186a937 (patch) | |
tree | 5aaaa02db9be90287bfcc6e00e48d0b50c18d6cd /security/tomoyo | |
parent | e2bf69077acefee5247bb661faac2552d29ba7ba (diff) |
TOMOYO: Add missing poll() hook.
Commit 1dae08c "TOMOYO: Add interactive enforcing mode." forgot to register
poll() hook. As a result, /usr/sbin/tomoyo-queryd was doing busy loop.
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security/tomoyo')
-rw-r--r-- | security/tomoyo/common.c | 17 | ||||
-rw-r--r-- | security/tomoyo/common.h | 2 | ||||
-rw-r--r-- | security/tomoyo/securityfs_if.c | 14 |
3 files changed, 33 insertions, 0 deletions
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c index 65c18af3ffe..bff63929e53 100644 --- a/security/tomoyo/common.c +++ b/security/tomoyo/common.c @@ -1898,6 +1898,23 @@ int tomoyo_open_control(const u8 type, struct file *file) } /** + * tomoyo_poll_control - poll() for /sys/kernel/security/tomoyo/ interface. + * + * @file: Pointer to "struct file". + * @wait: Pointer to "poll_table". + * + * Waits for read readiness. + * /sys/kernel/security/tomoyo/query is handled by /usr/sbin/tomoyo-queryd . + */ +int tomoyo_poll_control(struct file *file, poll_table *wait) +{ + struct tomoyo_io_buffer *head = file->private_data; + if (!head->poll) + return -ENOSYS; + return head->poll(file, wait); +} + +/** * tomoyo_read_control - read() for /sys/kernel/security/tomoyo/ interface. * * @file: Pointer to "struct file". diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h index b8b2dac656f..2ffad613855 100644 --- a/security/tomoyo/common.h +++ b/security/tomoyo/common.h @@ -705,6 +705,8 @@ void tomoyo_check_profile(void); int tomoyo_open_control(const u8 type, struct file *file); /* Close /sys/kernel/security/tomoyo/ interface. */ int tomoyo_close_control(struct file *file); +/* Poll operation for /sys/kernel/security/tomoyo/ interface. */ +int tomoyo_poll_control(struct file *file, poll_table *wait); /* Read operation for /sys/kernel/security/tomoyo/ interface. */ int tomoyo_read_control(struct file *file, char __user *buffer, const int buffer_len); diff --git a/security/tomoyo/securityfs_if.c b/security/tomoyo/securityfs_if.c index 5eb53510c4a..9967c1c5c71 100644 --- a/security/tomoyo/securityfs_if.c +++ b/security/tomoyo/securityfs_if.c @@ -38,6 +38,19 @@ static int tomoyo_release(struct inode *inode, struct file *file) } /** + * tomoyo_poll - poll() for /proc/ccs/ interface. + * + * @file: Pointer to "struct file". + * @wait: Pointer to "poll_table". + * + * Returns 0 on success, negative value otherwise. + */ +static unsigned int tomoyo_poll(struct file *file, poll_table *wait) +{ + return tomoyo_poll_control(file, wait); +} + +/** * tomoyo_read - read() for /sys/kernel/security/tomoyo/ interface. * * @file: Pointer to "struct file". @@ -79,6 +92,7 @@ static ssize_t tomoyo_write(struct file *file, const char __user *buf, static const struct file_operations tomoyo_operations = { .open = tomoyo_open, .release = tomoyo_release, + .poll = tomoyo_poll, .read = tomoyo_read, .write = tomoyo_write, }; |