/** * sys_acct - enable/disable process accounting * @name: file name for accounting records or NULL to shutdown accounting * * Returns 0 for success or negative errno values for failure. * * sys_acct() is the only system call needed to implement process * accounting. It takes the name of the file where accounting records * should be written. If the filename is NULL, accounting will be * shutdown. */ SYSCALL_DEFINE1(acct, const char __user *, name) { int error; if (!capable(CAP_SYS_PACCT)) return -EPERM; if (name) { char *tmp = getname(name); if (IS_ERR(tmp)) return (PTR_ERR(tmp)); error = acct_on(tmp); putname(tmp); } else { struct bsd_acct_struct *acct; acct = task_active_pid_ns(current)->bacct; if (acct == NULL) return 0; error = security_acct(NULL); if (!error) { spin_lock(&acct_lock); acct_file_reopen(acct, NULL, NULL); spin_unlock(&acct_lock); } } return error; }
/** * sys_acct - enable/disable process accounting * @name: file name for accounting records or NULL to shutdown accounting * * Returns 0 for success or negative errno values for failure. * * sys_acct() is the only system call needed to implement process * accounting. It takes the name of the file where accounting records * should be written. If the filename is NULL, accounting will be * shutdown. */ asmlinkage long sys_acct(const char __user *name) { int error; if (!capable(CAP_SYS_PACCT)) return -EPERM; if (name) { char *tmp = getname(name); if (IS_ERR(tmp)) return (PTR_ERR(tmp)); error = acct_on(tmp); putname(tmp); } else { error = security_acct(NULL); if (!error) { spin_lock(&acct_globals.lock); acct_file_reopen(NULL); spin_unlock(&acct_globals.lock); } } return error; }
/** * sys_acct - enable/disable process accounting * @name: file name for accounting records or NULL to shutdown accounting * * Returns 0 for success or negative errno values for failure. * * sys_acct() is the only system call needed to implement process * accounting. It takes the name of the file where accounting records * should be written. If the filename is NULL, accounting will be * shutdown. */ SYSCALL_DEFINE1(acct, const char __user *, name) { int error = 0; if (!capable(CAP_SYS_PACCT)) return -EPERM; if (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 { rcu_read_lock(); pin_kill(task_active_pid_ns(current)->bacct); } return error; }