]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tpm2: use GREEDY_REALLOC_APPEND() in tpm2_get_capability_handles(), cap max value
authorDan Streetman <ddstreet@ieee.org>
Fri, 8 Sep 2023 18:22:11 +0000 (14:22 -0400)
committerDan Streetman <ddstreet@ieee.org>
Tue, 3 Oct 2023 16:56:55 +0000 (12:56 -0400)
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.

src/shared/tpm2-util.c

index 638e2e390f46b961470ad2f23f8e2a4fd5703208..21e0ad715990fec37bd4a690506e3ba310a20efe 100644 (file)
@@ -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;