Commit 11cad320 authored by Vitaliy Gusev's avatar Vitaliy Gusev Committed by Linus Torvalds

bsdacct: use del_timer_sync() in acct_exit_ns()

acct_exit_ns --> acct_file_reopen deletes timer without check timer
execution on other CPUs.  So acct_timeout() can change an unmapped memory.
Signed-off-by: default avatarVitaliy Gusev <vgusev@openvz.org>
Cc: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ab941e0f
...@@ -353,17 +353,18 @@ void acct_auto_close(struct super_block *sb) ...@@ -353,17 +353,18 @@ void acct_auto_close(struct super_block *sb)
void acct_exit_ns(struct pid_namespace *ns) void acct_exit_ns(struct pid_namespace *ns)
{ {
struct bsd_acct_struct *acct; struct bsd_acct_struct *acct = ns->bacct;
spin_lock(&acct_lock); if (acct == NULL)
acct = ns->bacct; return;
if (acct != NULL) {
if (acct->file != NULL)
acct_file_reopen(acct, NULL, NULL);
kfree(acct); del_timer_sync(&acct->timer);
} spin_lock(&acct_lock);
if (acct->file != NULL)
acct_file_reopen(acct, NULL, NULL);
spin_unlock(&acct_lock); spin_unlock(&acct_lock);
kfree(acct);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment