]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Fix profile_open_file() last_stat locking 1452/head
authorAlexey Milovidov <milovidov@clickhouse.com>
Mon, 10 Apr 2023 02:19:01 +0000 (04:19 +0200)
committerGreg Hudson <ghudson@mit.edu>
Fri, 19 Sep 2025 15:28:56 +0000 (11:28 -0400)
Commit 53d6d0d64e96b84b57b7446a787e683312e2a529 changed
profile_open_file() to force a stat() when reusing a profile object,
by setting the last_stat field to 0 on the data object.  The last_stat
field is controlled by the data object mutex (unlike the refcount
field, which is controlled by g_shared_trees_mutex).  Lock the data
object before setting last_stat.

[ghudson@mit.edu: switched to using profile_update_data_file_locked()
so we don't lock and unlock the data object twice; rewrote commit
message]

ticket: 9184 (new)

src/util/profile/prof_file.c

index 8b0b2bb441fb4922810fe5544413b9f2cdaa7297..4ff1538fdf2551cae0470dcaf6a8429e664c85dd 100644 (file)
@@ -220,9 +220,11 @@ errcode_t profile_open_file(const_profile_filespec_t filespec,
     }
     if (data) {
         data->refcount++;
-        data->last_stat = 0;    /* Make sure to stat when updating. */
         k5_mutex_unlock(&g_shared_trees_mutex);
-        retval = profile_update_file_data(data, NULL);
+        k5_mutex_lock(&data->lock);
+        data->last_stat = 0;    /* Make sure to stat when updating. */
+        retval = profile_update_file_data_locked(data, NULL);
+        k5_mutex_unlock(&data->lock);
         free(expanded_filename);
         if (retval) {
             profile_dereference_data(data);