|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/**
|