mirror of https://github.com/torvalds/linux.git
act: use credential guards in acct_write_process()
Use credential guards for scoped credential override with automatic restoration on scope exit. Link: https://patch.msgid.link/20251103-work-creds-guards-simple-v1-14-a3e156839e7f@kernel.org Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
c5c92c624a
commit
5db84abd2a
|
|
@ -520,26 +520,23 @@ static void fill_ac(struct bsd_acct_struct *acct)
|
||||||
static void acct_write_process(struct bsd_acct_struct *acct)
|
static void acct_write_process(struct bsd_acct_struct *acct)
|
||||||
{
|
{
|
||||||
struct file *file = acct->file;
|
struct file *file = acct->file;
|
||||||
const struct cred *cred;
|
|
||||||
acct_t *ac = &acct->ac;
|
acct_t *ac = &acct->ac;
|
||||||
|
|
||||||
/* Perform file operations on behalf of whoever enabled accounting */
|
/* Perform file operations on behalf of whoever enabled accounting */
|
||||||
cred = override_creds(file->f_cred);
|
scoped_with_creds(file->f_cred) {
|
||||||
|
/*
|
||||||
/*
|
* First check to see if there is enough free_space to continue
|
||||||
* First check to see if there is enough free_space to continue
|
* the process accounting system. Then get freeze protection. If
|
||||||
* the process accounting system. Then get freeze protection. If
|
* the fs is frozen, just skip the write as we could deadlock
|
||||||
* the fs is frozen, just skip the write as we could deadlock
|
* the system otherwise.
|
||||||
* the system otherwise.
|
*/
|
||||||
*/
|
if (check_free_space(acct) && file_start_write_trylock(file)) {
|
||||||
if (check_free_space(acct) && file_start_write_trylock(file)) {
|
/* it's been opened O_APPEND, so position is irrelevant */
|
||||||
/* it's been opened O_APPEND, so position is irrelevant */
|
loff_t pos = 0;
|
||||||
loff_t pos = 0;
|
__kernel_write(file, ac, sizeof(acct_t), &pos);
|
||||||
__kernel_write(file, ac, sizeof(acct_t), &pos);
|
file_end_write(file);
|
||||||
file_end_write(file);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
revert_creds(cred);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_acct_process(struct bsd_acct_struct *acct)
|
static void do_acct_process(struct bsd_acct_struct *acct)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue