]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
act: use credential guards in acct_write_process()
authorChristian Brauner <brauner@kernel.org>
Mon, 3 Nov 2025 11:27:02 +0000 (12:27 +0100)
committerChristian Brauner <brauner@kernel.org>
Tue, 4 Nov 2025 11:36:49 +0000 (12:36 +0100)
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>
kernel/acct.c

index 61630110e29dfc4ea43f333a4aed89017aec8559..2a2b3c874acd57d428678a707177c86eb06f443a 100644 (file)
@@ -520,26 +520,23 @@ static void fill_ac(struct bsd_acct_struct *acct)
 static void acct_write_process(struct bsd_acct_struct *acct)
 {
        struct file *file = acct->file;
-       const struct cred *cred;
        acct_t *ac = &acct->ac;
 
        /* Perform file operations on behalf of whoever enabled accounting */
-       cred = override_creds(file->f_cred);
-
-       /*
-        * First check to see if there is enough free_space to continue
-        * the process accounting system. Then get freeze protection. If
-        * the fs is frozen, just skip the write as we could deadlock
-        * the system otherwise.
-        */
-       if (check_free_space(acct) && file_start_write_trylock(file)) {
-               /* it's been opened O_APPEND, so position is irrelevant */
-               loff_t pos = 0;
-               __kernel_write(file, ac, sizeof(acct_t), &pos);
-               file_end_write(file);
+       scoped_with_creds(file->f_cred) {
+               /*
+                * First check to see if there is enough free_space to continue
+                * the process accounting system. Then get freeze protection. If
+                * the fs is frozen, just skip the write as we could deadlock
+                * the system otherwise.
+                */
+               if (check_free_space(acct) && file_start_write_trylock(file)) {
+                       /* it's been opened O_APPEND, so position is irrelevant */
+                       loff_t pos = 0;
+                       __kernel_write(file, ac, sizeof(acct_t), &pos);
+                       file_end_write(file);
+               }
        }
-
-       revert_creds(cred);
 }
 
 static void do_acct_process(struct bsd_acct_struct *acct)