summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2019-03-25 17:02:01 +1100
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2019-05-30 15:23:15 +1000
commit9e869ebe3a5127575105d82c4d289d95cbed2db9 (patch)
tree76c38714d5ebe26e4602aac6b594f4657e41a06d
parent1cd261748c005b3c64b45f745a2fb3fb26236a4c (diff)
downloadtalos-petitboot-9e869ebe3a5127575105d82c4d289d95cbed2db9.tar.gz
talos-petitboot-9e869ebe3a5127575105d82c4d289d95cbed2db9.zip
Various fixups and checks to make scan-build happy
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--discover/device-handler.c2
-rw-r--r--discover/discover-server.c15
-rw-r--r--discover/event.c1
-rw-r--r--discover/grub2/env.c2
-rw-r--r--discover/grub2/script.c5
-rw-r--r--discover/ipmi.c1
-rw-r--r--discover/paths.c3
-rw-r--r--discover/pxe-parser.c7
-rw-r--r--discover/user-event.c19
-rw-r--r--discover/yaboot-parser.c4
-rw-r--r--lib/pb-config/pb-config.c12
-rw-r--r--lib/pb-protocol/pb-protocol.c39
-rw-r--r--ui/ncurses/nc-cui.c4
-rw-r--r--utils/hooks/30-dtb-updates.c2
14 files changed, 71 insertions, 45 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index d41bb4b..d85f1af 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -1209,7 +1209,7 @@ void device_handler_add_ramdisk(struct device_handler *handler,
}
handler->ramdisks[i] = dev;
- i = handler->n_ramdisks++;
+ handler->n_ramdisks++;
}
struct ramdisk_device *device_handler_get_ramdisk(
diff --git a/discover/discover-server.c b/discover/discover-server.c
index 1a332cb..e29ce27 100644
--- a/discover/discover-server.c
+++ b/discover/discover-server.c
@@ -298,7 +298,7 @@ static int discover_server_handle_auth_message(struct client *client,
{
struct status *status;
char *hash;
- int rc;
+ int rc = 0;
status = talloc_zero(client, struct status);
@@ -403,7 +403,7 @@ static int discover_server_process_message(void *arg)
struct client *client = arg;
struct config *config;
char *url;
- int rc;
+ int rc = 0;
message = pb_protocol_read_message(client, client->fd);
@@ -460,7 +460,7 @@ static int discover_server_process_message(void *arg)
talloc_free(status);
}
}
- return 0;
+ return rc;
}
switch (message->action) {
@@ -537,7 +537,7 @@ static int discover_server_process_message(void *arg)
break;
}
- rc = discover_server_handle_auth_message(client, auth_msg);
+ discover_server_handle_auth_message(client, auth_msg);
talloc_free(auth_msg);
break;
default:
@@ -791,8 +791,11 @@ struct discover_server *discover_server_init(struct waitset *waitset)
/* Allow all clients to communicate on this socket */
group = getgrnam("petitgroup");
if (group) {
- chown(PB_SOCKET_PATH, 0, group->gr_gid);
- chmod(PB_SOCKET_PATH, 0660);
+ if (chown(PB_SOCKET_PATH, 0, group->gr_gid))
+ pb_log_fn("Error setting socket ownership: %m\n");
+ errno = 0;
+ if (chmod(PB_SOCKET_PATH, 0660))
+ pb_log_fn("Error setting socket permissions: %m\n");
}
if (listen(server->socket, 8)) {
diff --git a/discover/event.c b/discover/event.c
index ec5537a..4c46d41 100644
--- a/discover/event.c
+++ b/discover/event.c
@@ -101,7 +101,6 @@ static void event_parse_params(struct event *event, const char *buf, int len)
sep = memchr(buf, '=', param_len);
if (!sep) {
name_len = param_len;
- value_len = 0;
param->value = "";
} else {
name_len = sep - buf;
diff --git a/discover/grub2/env.c b/discover/grub2/env.c
index 7eda095..74d5729 100644
--- a/discover/grub2/env.c
+++ b/discover/grub2/env.c
@@ -86,6 +86,8 @@ int builtin_load_env(struct grub2_script *script,
if (!rc) {
rc = parse_buf_to_env(script, buf, len);
+ if (rc)
+ pb_debug_fn("Failed to set env\n");
talloc_free(buf);
}
diff --git a/discover/grub2/script.c b/discover/grub2/script.c
index 1a802b9..902df90 100644
--- a/discover/grub2/script.c
+++ b/discover/grub2/script.c
@@ -227,7 +227,7 @@ static void process_expansions(struct grub2_script *script,
}
/* we may have allocated an extra argv element but not populated it */
- if (!argv->argv[argv->argc - 1])
+ if (argv->argv && !argv->argv[argv->argc - 1])
argv->argc--;
}
@@ -489,6 +489,9 @@ void script_execute(struct grub2_script *script)
{
struct discover_boot_option *opt, *tmp;
+ if (!script)
+ return;
+
init_env(script);
statements_execute(script, script->statements);
diff --git a/discover/ipmi.c b/discover/ipmi.c
index ae02bb0..66b465e 100644
--- a/discover/ipmi.c
+++ b/discover/ipmi.c
@@ -306,7 +306,6 @@ int parse_ipmi_interface_override(struct config *config, uint8_t *buf,
return -1;
}
ifconf->static_config.gateway = gatewaystr;
- i += ipsize;
}
ifconf->override = true;
diff --git a/discover/paths.c b/discover/paths.c
index 54b843e..16fdd59 100644
--- a/discover/paths.c
+++ b/discover/paths.c
@@ -450,7 +450,8 @@ static void load_local(struct load_task *task)
result->status = LOAD_OK;
}
- task->async_cb(task->result, task->async_data);
+ if (task->async_cb)
+ task->async_cb(task->result, task->async_data);
}
static void load_url_async_start_pending(struct load_task *task, int flags)
diff --git a/discover/pxe-parser.c b/discover/pxe-parser.c
index ba0f81c..035794c 100644
--- a/discover/pxe-parser.c
+++ b/discover/pxe-parser.c
@@ -292,9 +292,14 @@ static bool ipxe_simple_parser(struct conf_context *ctx, char *buf, int len)
continue;
}
+ if (!name) {
+ pb_debug_fn("missing name from conf_get_pair\n");
+ continue;
+ }
+
/* All other parameters require a value */
if (!value) {
- pb_debug("%s: '%s' missing value\n", __func__, name);
+ pb_debug_fn("'%s' missing value\n", name);
continue;
}
diff --git a/discover/user-event.c b/discover/user-event.c
index d3d4a5e..cc03ffd 100644
--- a/discover/user-event.c
+++ b/discover/user-event.c
@@ -657,10 +657,10 @@ static void user_event_handle_message(struct user_event *uev, char *buf,
break;
case EVENT_ACTION_URL:
result = user_event_url(uev, event);
- goto out;
+ break;
case EVENT_ACTION_DHCP:
result = user_event_dhcp(uev, event);
- goto out;
+ break;
case EVENT_ACTION_BOOT:
result = user_event_boot(uev, event);
break;
@@ -671,13 +671,17 @@ static void user_event_handle_message(struct user_event *uev, char *buf,
result = user_event_plugin(uev, event);
break;
default:
+ result = -1;
break;
}
+ if (result)
+ pb_log_fn("failed to handle action %d\n", event->action);
+
/* user_event_url() and user_event_dhcp() will steal the event context,
* but all others still need to free */
- talloc_free(event);
-out:
+ if (talloc_parent(event) == uev)
+ talloc_free(event);
return;
}
@@ -751,8 +755,11 @@ struct user_event *user_event_init(struct device_handler *handler,
}
/* Don't allow events from non-priviledged users */
- chown(PBOOT_USER_EVENT_SOCKET, 0, 0);
- chmod(PBOOT_USER_EVENT_SOCKET, 0660);
+ if (chown(PBOOT_USER_EVENT_SOCKET, 0, 0))
+ pb_log_fn("Error setting socket ownership: %m\n");
+ errno = 0;
+ if (chmod(PBOOT_USER_EVENT_SOCKET, 0660))
+ pb_log_fn("Error setting socket permissions: %m\n");
waiter_register_io(waitset, uev->socket, WAIT_IN,
user_event_process, uev);
diff --git a/discover/yaboot-parser.c b/discover/yaboot-parser.c
index b06248f..d0a40b1 100644
--- a/discover/yaboot-parser.c
+++ b/discover/yaboot-parser.c
@@ -213,6 +213,8 @@ static void yaboot_process_pair(struct conf_context *conf, const char *name,
/* Then start the new image. */
opt = state_start_new_option(conf, state);
+ if (!opt)
+ pb_debug_fn("new opt is NULL\n");
state->boot_image = talloc_strdup(state, value);
@@ -235,6 +237,8 @@ static void yaboot_process_pair(struct conf_context *conf, const char *name,
/* Then start the new image. */
opt = state_start_new_option(conf, state);
+ if (!opt)
+ pb_debug_fn("new opt is NULL\n");
if (*value == '/') {
state->boot_image = talloc_strdup(state, value);
diff --git a/lib/pb-config/pb-config.c b/lib/pb-config/pb-config.c
index a802c92..735cd98 100644
--- a/lib/pb-config/pb-config.c
+++ b/lib/pb-config/pb-config.c
@@ -43,6 +43,9 @@ struct config *config_copy(void *ctx, const struct config *src)
struct config *dest;
unsigned int i;
+ if (!src)
+ return NULL;
+
dest = talloc_zero(ctx, struct config);
dest->autoboot_enabled = src->autoboot_enabled;
dest->autoboot_timeout_sec = src->autoboot_timeout_sec;
@@ -88,11 +91,14 @@ struct config *config_copy(void *ctx, const struct config *src)
dest->allow_writes = src->allow_writes;
dest->n_consoles = src->n_consoles;
- if (src->consoles)
+ if (src->consoles) {
dest->consoles = talloc_array(dest, char *, src->n_consoles);
- for (i = 0; i < src->n_consoles && src->n_consoles; i++)
- dest->consoles[i] = talloc_strdup(dest->consoles,
+ for (i = 0; i < src->n_consoles && src->n_consoles; i++)
+ if (src->consoles[i])
+ dest->consoles[i] = talloc_strdup(
+ dest->consoles,
src->consoles[i]);
+ }
if (src->boot_console)
dest->boot_console = talloc_strdup(dest, src->boot_console);
diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c
index 33bd4e6..daf4ec9 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);
}
@@ -417,9 +421,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 +450,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 +468,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 +489,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,
@@ -561,9 +561,8 @@ int pb_protocol_serialise_system_info(const struct system_info *sysinfo,
pos += HWADDR_SIZE;
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,
@@ -669,9 +668,8 @@ int pb_protocol_serialise_config(const struct config *config,
pos += pb_protocol_serialise_string(pos, config->lang);
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 +679,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 +704,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 +723,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 +762,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 +943,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;
diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c
index bd2eb68..66f34b6 100644
--- a/ui/ncurses/nc-cui.c
+++ b/ui/ncurses/nc-cui.c
@@ -1052,7 +1052,9 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt,
struct pmenu_item *item;
unsigned int j;
result = set_menu_items(cui->main->ncm, NULL);
- for (j = 0 ; j < cui->main->item_count; j++) {
+ if (result)
+ pb_log_fn("unset_menu_items failed: %d\n", result);
+ for (j = 0 ; j < cui->main->item_count && !result; j++) {
item = item_userptr(cui->main->items[j]);
if (item->on_execute != menu_plugin_execute)
continue;
diff --git a/utils/hooks/30-dtb-updates.c b/utils/hooks/30-dtb-updates.c
index b8413fd..2d30c40 100644
--- a/utils/hooks/30-dtb-updates.c
+++ b/utils/hooks/30-dtb-updates.c
@@ -605,7 +605,7 @@ out:
int main(void)
{
struct offb_ctx *ctx;
- int rc;
+ int rc = 0;
ctx = talloc_zero(NULL, struct offb_ctx);
OpenPOWER on IntegriCloud