diff options
Diffstat (limited to 'kernel/acct.c')
| -rw-r--r-- | kernel/acct.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index 9f3391090b3..9a4715a2f6b 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -491,13 +491,17 @@ static void do_acct_process(struct bsd_acct_struct *acct,  	u64 run_time;  	struct timespec uptime;  	struct tty_struct *tty; +	const struct cred *orig_cred; + +	/* Perform file operations on behalf of whoever enabled accounting */ +	orig_cred = override_creds(file->f_cred);  	/*  	 * First check to see if there is enough free_space to continue  	 * the process accounting system.  	 */  	if (!check_free_space(acct, file)) -		return; +		goto out;  	/*  	 * Fill the accounting struct with the needed info as recorded @@ -578,6 +582,8 @@ static void do_acct_process(struct bsd_acct_struct *acct,  			       sizeof(acct_t), &file->f_pos);  	current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim;  	set_fs(fs); +out: +	revert_creds(orig_cred);  }  /**  |