From ea142bca3cb2c779972c30c260e5ff3de6a6e24b Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Wed, 2 May 2018 04:16:17 -0600 Subject: [PATCH] Add support for hex string kernel version. --- src/elf2kip.c | 7 ++++++- src/npdmtool.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/elf2kip.c b/src/elf2kip.c index 6e0ec6b..397a228 100644 --- a/src/elf2kip.c +++ b/src/elf2kip.c @@ -401,10 +401,15 @@ int ParseKipConfiguration(const char *json, KipHeader *kip_hdr) { status = 0; goto PARSE_CAPS_END; } - if (!cJSON_GetU16FromObjectValue(value, (u16 *)&desc)) { + u64 kern_ver = 0; + if (cJSON_IsNumber(value)) { + kern_ver = (u64)value->valueint; + } else if (!cJSON_IsString(value) || !cJSON_GetU64FromObjectValue(value, &kern_ver)) { + fprintf(stderr, "Error: Kernel version must be integer or hex strings.\n"); status = 0; goto PARSE_CAPS_END; } + desc = (kern_ver) & 0xFFFF; kip_hdr->Capabilities[cur_cap++] = (u32)((desc << 15) | (0x3FFF)); } else if (!strcmp(type_str, "handle_table_size")) { if (cur_cap + 1 > 0x20) { diff --git a/src/npdmtool.c b/src/npdmtool.c index 73c633d..009fb4a 100644 --- a/src/npdmtool.c +++ b/src/npdmtool.c @@ -539,10 +539,15 @@ int CreateNpdm(const char *json, void **dst, u32 *dst_size) { desc &= 7; caps[cur_cap++] = (u32)((desc << 14) | (0x1FFF)); } else if (!strcmp(type_str, "min_kernel_version")) { - if (!cJSON_GetU16FromObjectValue(value, (u16 *)&desc)) { + u64 kern_ver = 0; + if (cJSON_IsNumber(value)) { + kern_ver = (u64)value->valueint; + } else if (!cJSON_IsString(value) || !cJSON_GetU64FromObjectValue(value, &kern_ver)) { + fprintf(stderr, "Error: Kernel version must be integer or hex strings.\n"); status = 0; goto NPDM_BUILD_END; } + desc = (kern_ver) & 0xFFFF; caps[cur_cap++] = (u32)((desc << 15) | (0x3FFF)); } else if (!strcmp(type_str, "handle_table_size")) { if (!cJSON_GetU16FromObjectValue(value, (u16 *)&desc)) {