Add support for hex string kernel version.

This commit is contained in:
Michael Scire 2018-05-02 04:16:17 -06:00
parent a349f39bf4
commit ea142bca3c
2 changed files with 12 additions and 2 deletions

View File

@ -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) {

View File

@ -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)) {