From 22a0a36efa030239b3324434c8ea98ae0472cc4f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Jan 2021 15:50:14 +0100 Subject: [PATCH] gpt: generalize validator for GPT partition labels This adds a proper validator function. No change in behaviour, just some minor refactoring (this should be useful elsewhere later on though) --- src/partition/repart.c | 14 ++++++++------ src/shared/gpt.c | 11 +++++++++++ src/shared/gpt.h | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/partition/repart.c b/src/partition/repart.c index 45e82cd0eb..1964d9c957 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -960,7 +960,6 @@ static int config_parse_label( void *data, void *userdata) { - _cleanup_free_ char16_t *recoded = NULL; _cleanup_free_ char *resolved = NULL; char **label = data; int r; @@ -981,11 +980,14 @@ static int config_parse_label( return 0; } - recoded = utf8_to_utf16(resolved, strlen(resolved)); - if (!recoded) - return log_oom(); - - if (char16_strlen(recoded) > 36) { + r = gpt_partition_label_valid(resolved); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to check if string is valid as GPT partition label, ignoring: \"%s\" (from \"%s\")", + resolved, rvalue); + return 0; + } + if (!r) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Partition label too long for GPT table, ignoring: \"%s\" (from \"%s\")", resolved, rvalue); diff --git a/src/shared/gpt.c b/src/shared/gpt.c index 15ea2f0a1f..a96f5ee02d 100644 --- a/src/shared/gpt.c +++ b/src/shared/gpt.c @@ -2,6 +2,7 @@ #include "gpt.h" #include "string-util.h" +#include "utf8.h" const GptPartitionType gpt_partition_type_table[] = { { GPT_ROOT_X86, "root-x86" }, @@ -95,3 +96,13 @@ int gpt_partition_type_uuid_from_string(const char *s, sd_id128_t *ret) { return sd_id128_from_string(s, ret); } + +int gpt_partition_label_valid(const char *s) { + _cleanup_free_ char16_t *recoded = NULL; + + recoded = utf8_to_utf16(s, strlen(s)); + if (!recoded) + return -ENOMEM; + + return char16_strlen(recoded) <= 36; +} diff --git a/src/shared/gpt.h b/src/shared/gpt.h index 315cde6be3..2e0f50c3c6 100644 --- a/src/shared/gpt.h +++ b/src/shared/gpt.h @@ -126,3 +126,5 @@ typedef struct GptPartitionType { } GptPartitionType; extern const GptPartitionType gpt_partition_type_table[]; + +int gpt_partition_label_valid(const char *s); -- 2.25.1