diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 10:23:36 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 10:23:36 +0000 |
commit | 3124284ced2903518f6d277b8c8d63ed79da47b7 (patch) | |
tree | a7e9aca4373a077d060a80c5ff9adbda67822f3f /src/shared/keyring-util.c | |
parent | Releasing progress-linux version 252.22-1~deb12u1~progress6.99u1. (diff) | |
download | systemd-3124284ced2903518f6d277b8c8d63ed79da47b7.tar.xz systemd-3124284ced2903518f6d277b8c8d63ed79da47b7.zip |
Merging upstream version 252.23.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/shared/keyring-util.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/shared/keyring-util.c b/src/shared/keyring-util.c index 655cf52..fadd90e 100644 --- a/src/shared/keyring-util.c +++ b/src/shared/keyring-util.c @@ -5,34 +5,31 @@ #include "missing_syscall.h" int keyring_read(key_serial_t serial, void **ret, size_t *ret_size) { - size_t m = 100; + size_t bufsize = 100; for (;;) { - _cleanup_(erase_and_freep) uint8_t *p = NULL; + _cleanup_(erase_and_freep) uint8_t *buf = NULL; long n; - p = new(uint8_t, m+1); - if (!p) + buf = new(uint8_t, bufsize + 1); + if (!buf) return -ENOMEM; - n = keyctl(KEYCTL_READ, (unsigned long) serial, (unsigned long) p, (unsigned long) m, 0); + n = keyctl(KEYCTL_READ, (unsigned long) serial, (unsigned long) buf, (unsigned long) bufsize, 0); if (n < 0) return -errno; - if ((size_t) n <= m) { - p[n] = 0; /* NUL terminate, just in case */ + if ((size_t) n <= bufsize) { + buf[n] = 0; /* NUL terminate, just in case */ if (ret) - *ret = TAKE_PTR(p); + *ret = TAKE_PTR(buf); if (ret_size) *ret_size = n; return 0; } - if (m > (SIZE_MAX-1) / 2) /* overflow check */ - return -ENOMEM; - - m *= 2; + bufsize = (size_t) n; } } |