From: Dan Streetman Date: Fri, 8 Sep 2023 18:22:11 +0000 (-0400) Subject: tpm2: use GREEDY_REALLOC_APPEND() in tpm2_get_capability_handles(), cap max value X-Git-Tag: v255-rc1~345^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7014006906113acf35d4927ef7f287ddaa935fca;p=thirdparty%2Fsystemd.git tpm2: use GREEDY_REALLOC_APPEND() in tpm2_get_capability_handles(), cap max value Simplify the function with GREEDY_REALLOC_APPEND(). Also limit the size_t-sized max value to UINT32_MAX since that's the maximum of the range this searches, and the max parameter for tpm2_get_capability() is uint32_t. --- diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c index 638e2e390f4..21e0ad71599 100644 --- a/src/shared/tpm2-util.c +++ b/src/shared/tpm2-util.c @@ -402,6 +402,8 @@ static int tpm2_get_capability_handles( assert(ret_handles); assert(ret_n_handles); + max = MIN(max, UINT32_MAX); + while (max > 0) { TPMU_CAPABILITIES capability; r = tpm2_get_capability(c, TPM2_CAP_HANDLES, current, (uint32_t) max, &capability); @@ -417,13 +419,10 @@ static int tpm2_get_capability_handles( if (n_handles > SIZE_MAX - handle_list.count) return log_oom_debug(); - if (!GREEDY_REALLOC(handles, n_handles + handle_list.count)) + if (!GREEDY_REALLOC_APPEND(handles, n_handles, handle_list.handle, handle_list.count)) return log_oom_debug(); - memcpy_safe(&handles[n_handles], handle_list.handle, sizeof(handles[0]) * handle_list.count); - max -= handle_list.count; - n_handles += handle_list.count; /* Update current to the handle index after the last handle in the list. */ current = handles[n_handles - 1] + 1;