From: Sergey Bugaev Date: Mon, 27 Jul 2026 13:17:46 +0000 (+0300) Subject: Fix deserializing context with missing profile X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66f6fde30ec696437fecfddee778f0291a1d2ca1;p=thirdparty%2Fkrb5.git Fix deserializing context with missing profile k5_internalize_context() tolerates EINVAL and ENOENT failures from profile_ser_internalize(), which should allow it to continue if a configuration file (such as /etc/krb5.conf) is missing in the deserializing process. However, profile_ser_internalize() only updates the caller's buffer pointer if the profile was initialized, so k5_internalize_context() attempts to read its trailer from the serialized profile data and fails. Change profile_ser_internalize() to update the caller's buffer pointer once it has consumed a whole profile serialization, whether or not profile_init() succeeds. [ghudson@mit.edu: edited commit message and comment] ticket: 9231 (new) --- diff --git a/src/util/profile/prof_init.c b/src/util/profile/prof_init.c index 783efbde29..b97d469a1c 100644 --- a/src/util/profile/prof_init.c +++ b/src/util/profile/prof_init.c @@ -654,13 +654,13 @@ errcode_t profile_ser_internalize(profile_t *profilep, goto cleanup; } - if ((retval = profile_init((const_profile_filespec_t *) flist, - profilep))) - goto cleanup; - + /* Update the buffer pointer even if profile initialization fails, so the + * caller can keep deserializing from the correct position. */ *bufpp = bp; *remainp = remain; + retval = profile_init((const_profile_filespec_t *) flist, profilep); + cleanup: if (flist) { for (i=0; i