Skip to content

Commit

Permalink
TOMOYO: Fix infinite loop bug when reading /sys/kernel/security/tomoy…
Browse files Browse the repository at this point in the history
…o/audit

In tomoyo_flush(), head->r.w[0] holds pointer to string data to be printed.
But head->r.w[0] was updated only when the string data was partially
printed (because head->r.w[0] will be updated by head->r.w[1] later if
completely printed). However, regarding /sys/kernel/security/tomoyo/query ,
an additional '\0' is printed after the string data was completely printed.
But if free space for read buffer became 0 before printing the additional '\0',
tomoyo_flush() was returning without updating head->r.w[0]. As a result,
tomoyo_flush() forever reprints already printed string data.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: James Morris <jmorris@namei.org>
  • Loading branch information
Tetsuo Handa authored and James Morris committed Apr 18, 2011
1 parent e4f5f26 commit c0fa797
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions security/tomoyo/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,9 @@ static bool tomoyo_flush(struct tomoyo_io_buffer *head)
head->read_user_buf += len;
w += len;
}
if (*w) {
head->r.w[0] = w;
head->r.w[0] = w;
if (*w)
return false;
}
/* Add '\0' for query. */
if (head->poll) {
if (!head->read_user_buf_avail ||
Expand Down

0 comments on commit c0fa797

Please sign in to comment.