summaryrefslogtreecommitdiff
path: root/lib/efi_loader/efi_string.c
diff options
context:
space:
mode:
authorIlias Apalodimas <ilias.apalodimas@linaro.org>2020-12-31 12:26:46 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-12-31 14:33:23 +0100
commitfe179d7fb5c10d8a4e299af06c766f47f2c8d51a (patch)
tree5c762b7b7158c4692a774708b42af30726540a4d /lib/efi_loader/efi_string.c
parent47d2b3b9c98e1adf231f8143bc01b0046ebd5c9c (diff)
downloadu-boot-fe179d7fb5c10d8a4e299af06c766f47f2c8d51a.tar.gz
efi_loader: Add size checks to efi_create_indexed_name()
Although the function description states the caller must provide a sufficient buffer, it's better to have in function checks that the destination buffer can hold the intended value. So let's add an extra argument with the buffer size and check that before doing any copying. Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib/efi_loader/efi_string.c')
-rw-r--r--lib/efi_loader/efi_string.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/efi_loader/efi_string.c b/lib/efi_loader/efi_string.c
index 3de721f06c..9627242288 100644
--- a/lib/efi_loader/efi_string.c
+++ b/lib/efi_loader/efi_string.c
@@ -23,13 +23,19 @@
* Return: A pointer to the next position after the created string
* in @buffer, or NULL otherwise
*/
-u16 *efi_create_indexed_name(u16 *buffer, const char *name, unsigned int index)
+u16 *efi_create_indexed_name(u16 *buffer, size_t buffer_size, const char *name,
+ unsigned int index)
{
u16 *p = buffer;
char index_buf[5];
+ size_t size;
+ size = (utf8_utf16_strlen(name) * sizeof(u16) +
+ sizeof(index_buf) * sizeof(u16));
+ if (buffer_size < size)
+ return NULL;
utf8_utf16_strcpy(&p, name);
- sprintf(index_buf, "%04X", index);
+ snprintf(index_buf, sizeof(index_buf), "%04X", index);
utf8_utf16_strcpy(&p, index_buf);
return p;