diff options
Diffstat (limited to 'lib/pb-protocol/pb-protocol.c')
-rw-r--r-- | lib/pb-protocol/pb-protocol.c | 70 |
1 files changed, 46 insertions, 24 deletions
diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index 33bd4e6..aff1946 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -99,13 +99,17 @@ int pb_protocol_serialise_string(char *pos, const char *str) { int len = 0; + if (!pos) + return 0; + if (str) len = strlen(str); *(uint32_t *)pos = __cpu_to_be32(len); pos += sizeof(uint32_t); - memcpy(pos, str, len); + if (str) + memcpy(pos, str, len); return len + sizeof(uint32_t); } @@ -249,6 +253,9 @@ int pb_protocol_system_info_len(const struct system_info *sysinfo) for (i = 0; i < sysinfo->n_bmc_golden; i++) len += 4 + optional_strlen(sysinfo->bmc_golden[i]); + /* BMC MAC */ + len += HWADDR_SIZE; + for (i = 0; i < sysinfo->n_interfaces; i++) { struct interface_info *if_info = sysinfo->interfaces[i]; len += 4 + if_info->hwaddr_size + @@ -265,8 +272,8 @@ int pb_protocol_system_info_len(const struct system_info *sysinfo) 4 + optional_strlen(bd_info->mountpoint); } - /* BMC MAC */ - len += HWADDR_SIZE; + /* stb info */ + len += 3 * sizeof(bool); return len; } @@ -337,6 +344,8 @@ int pb_protocol_config_len(const struct config *config) len += 4 + optional_strlen(config->lang); + len += 4; /* preboot check */ + return len; } @@ -417,9 +426,8 @@ int pb_protocol_serialise_device(const struct device *dev, pos += pb_protocol_serialise_string(pos, dev->icon_file); assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_boot_option(const struct boot_option *opt, @@ -447,9 +455,8 @@ int pb_protocol_serialise_boot_option(const struct boot_option *opt, pos += 4; assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_boot_command(const struct boot_command *boot, @@ -466,9 +473,8 @@ int pb_protocol_serialise_boot_command(const struct boot_command *boot, pos += pb_protocol_serialise_string(pos, boot->console); assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_boot_status(const struct status *status, @@ -488,9 +494,8 @@ int pb_protocol_serialise_boot_status(const struct status *status, pos += sizeof(bool); assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_system_info(const struct system_info *sysinfo, @@ -560,10 +565,16 @@ int pb_protocol_serialise_system_info(const struct system_info *sysinfo, memset(pos, 0, HWADDR_SIZE); pos += HWADDR_SIZE; + *(bool *)pos = sysinfo->stb_fw_measurement; + pos += sizeof(bool); + *(bool *)pos = sysinfo->stb_fw_enforcing; + pos += sizeof(bool); + *(bool *)pos = sysinfo->stb_os_enforcing; + pos += sizeof(bool); + assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } static int pb_protocol_serialise_config_interface(char *buf, @@ -668,10 +679,12 @@ int pb_protocol_serialise_config(const struct config *config, pos += pb_protocol_serialise_string(pos, config->lang); + *(uint32_t *)pos = config->preboot_check_enabled; + pos += 4; + assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_url(const char *url, char *buf, int buf_len) @@ -681,9 +694,8 @@ int pb_protocol_serialise_url(const char *url, char *buf, int buf_len) pos += pb_protocol_serialise_string(pos, url); assert(pos <=buf+buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_plugin_option(const struct plugin_option *opt, @@ -707,9 +719,8 @@ int pb_protocol_serialise_plugin_option(const struct plugin_option *opt, pos += pb_protocol_serialise_string(pos, opt->executables[i]); assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_temp_autoboot(const struct autoboot_option *opt, @@ -727,9 +738,9 @@ int pb_protocol_serialise_temp_autoboot(const struct autoboot_option *opt, pos += pb_protocol_serialise_string(pos, opt->uuid); } - (void)buf_len; + assert(pos <= buf + buf_len); - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_serialise_authenticate(struct auth_message *msg, @@ -766,9 +777,8 @@ int pb_protocol_serialise_authenticate(struct auth_message *msg, }; assert(pos <= buf + buf_len); - (void)buf_len; - return 0; + return (pos <= buf + buf_len) ? 0 : -1; } int pb_protocol_write_message(int fd, struct pb_protocol_message *message) @@ -948,7 +958,7 @@ int pb_protocol_deserialise_boot_option(struct boot_option *opt, if (read_u32(&pos, &len, &opt->type)) return -1; - rc = 0; + rc = (pos <= message->payload + message->payload_len) ? 0 : -1; out: return rc; @@ -1165,6 +1175,14 @@ int pb_protocol_deserialise_system_info(struct system_info *sysinfo, pos += HWADDR_SIZE; len -= HWADDR_SIZE; + sysinfo->stb_fw_measurement = !!*pos; + pos += sizeof(bool); + sysinfo->stb_fw_enforcing = !!*pos; + pos += sizeof(bool); + sysinfo->stb_os_enforcing = !!*pos; + pos += sizeof(bool); + len -= 3 * sizeof(bool); + rc = 0; out: return rc; @@ -1322,6 +1340,10 @@ int pb_protocol_deserialise_config(struct config *config, config->lang = str; + if (read_u32(&pos, &len, &tmp)) + goto out; + config->preboot_check_enabled = !!tmp; + rc = 0; out: |