acct: serialize acct_on()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 15 May 2014 10:49:45 +0000 (06:49 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 7 Aug 2014 18:40:08 +0000 (14:40 -0400)
brute-force - on a global mutex that isn't nested into anything.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
kernel/acct.c

index 8777372..08963a2 100644 (file)
@@ -241,6 +241,8 @@ static int acct_on(struct filename *pathname)
        return 0;
 }
 
+static DEFINE_MUTEX(acct_on_mutex);
+
 /**
  * sys_acct - enable/disable process accounting
  * @name: file name for accounting records or NULL to shutdown accounting
@@ -263,7 +265,9 @@ SYSCALL_DEFINE1(acct, const char __user *, name)
                struct filename *tmp = getname(name);
                if (IS_ERR(tmp))
                        return PTR_ERR(tmp);
+               mutex_lock(&acct_on_mutex);
                error = acct_on(tmp);
+               mutex_unlock(&acct_on_mutex);
                putname(tmp);
        } else {
                struct bsd_acct_struct *acct;