diff --git a/devlink/devlink.c b/devlink/devlink.c index 5b325ce6..8f11f865 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -526,18 +526,26 @@ static int __dl_argv_handle_port(char *str, char **p_bus_name, char **p_dev_name, uint32_t *p_port_index) { - char *handlestr = handlestr; - char *portstr = portstr; + char *handlestr; + char *portstr; int err; - strslashrsplit(str, &handlestr, &portstr); + err = strslashrsplit(str, &handlestr, &portstr); + if (err) { + pr_err("Port identification \"%s\" is invalid\n", str); + return err; + } err = strtouint32_t(portstr, p_port_index); if (err) { pr_err("Port index \"%s\" is not a number or not within range\n", portstr); return err; } - strslashrsplit(handlestr, p_bus_name, p_dev_name); + err = strslashrsplit(handlestr, p_bus_name, p_dev_name); + if (err) { + pr_err("Port identification \"%s\" is invalid\n", str); + return err; + } return 0; } diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 81a5888f..db54b4e3 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -2330,7 +2330,7 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv) char *lcl_arg = NULL; char *valid_lftp = NULL; char *preferred_lftp = NULL; - inet_prefix lcl; + inet_prefix lcl = {}; inet_prefix peer; int local_len = 0; int peer_len = 0; diff --git a/ip/iplink_can.c b/ip/iplink_can.c index f415558a..587413da 100644 --- a/ip/iplink_can.c +++ b/ip/iplink_can.c @@ -251,7 +251,7 @@ static int can_parse_opt(struct link_util *lu, int argc, char **argv, return 0; } -static const char *can_state_names[] = { +static const char *can_state_names[CAN_STATE_MAX] = { [CAN_STATE_ERROR_ACTIVE] = "ERROR-ACTIVE", [CAN_STATE_ERROR_WARNING] = "ERROR-WARNING", [CAN_STATE_ERROR_PASSIVE] = "ERROR-PASSIVE", @@ -283,11 +283,8 @@ static void can_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_CAN_STATE]) { uint32_t state = rta_getattr_u32(tb[IFLA_CAN_STATE]); - if (state <= CAN_STATE_MAX) - print_string(PRINT_ANY, "state", "state %s ", - can_state_names[state]); - else - print_null(PRINT_ANY, "state", "state UNKNOWN", NULL); + fprintf(f, "state %s ", state < CAN_STATE_MAX ? + can_state_names[state] : "UNKNOWN"); } if (tb[IFLA_CAN_BERR_COUNTER]) { diff --git a/ip/iplink_vrf.c b/ip/iplink_vrf.c index f13b1d24..7a1bb5e7 100644 --- a/ip/iplink_vrf.c +++ b/ip/iplink_vrf.c @@ -136,7 +136,9 @@ __u32 ipvrf_get_table(const char *name) &answer.n, sizeof(answer)) < 0) { /* special case "default" vrf to be the main table */ if (errno == ENODEV && !strcmp(name, "default")) - rtnl_rttable_a2n(&tb_id, "main"); + if (rtnl_rttable_a2n(&tb_id, "main")) + fprintf(stderr, + "BUG: RTTable \"main\" not found.\n"); return tb_id; } diff --git a/ip/ipmaddr.c b/ip/ipmaddr.c index 4f726fdd..85a69e77 100644 --- a/ip/ipmaddr.c +++ b/ip/ipmaddr.c @@ -136,7 +136,7 @@ static void read_igmp(struct ma_info **result_p) while (fgets(buf, sizeof(buf), fp)) { struct ma_info *ma; - size_t len; + size_t len = 0; if (buf[0] != '\t') { sscanf(buf, "%d%s", &m.index, m.name); diff --git a/ip/iproute.c b/ip/iproute.c index 621b5ca9..a8733f45 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -1497,7 +1497,8 @@ static int iproute_list_flush_or_save(int argc, char **argv, int action) id = *argv; } else if (strcmp(*argv, "mark") == 0) { NEXT_ARG(); - get_unsigned(&mark, *argv, 0); + if (get_unsigned(&mark, *argv, 0)) + invarg("invalid mark value", *argv); filter.markmask = -1; } else if (strcmp(*argv, "via") == 0) { int family; @@ -1714,7 +1715,8 @@ static int iproute_get(int argc, char **argv) idev = *argv; } else if (matches(*argv, "mark") == 0) { NEXT_ARG(); - get_unsigned(&mark, *argv, 0); + if (get_unsigned(&mark, *argv, 0)) + invarg("invalid mark value", *argv); } else if (matches(*argv, "oif") == 0 || strcmp(*argv, "dev") == 0) { NEXT_ARG(); diff --git a/lib/bpf.c b/lib/bpf.c index 4f52ad4a..1dcb261d 100644 --- a/lib/bpf.c +++ b/lib/bpf.c @@ -537,8 +537,11 @@ static const char *bpf_find_mntpt(const char *fstype, unsigned long magic, } } + if (len != PATH_MAX) + return NULL; + fp = fopen("/proc/mounts", "r"); - if (fp == NULL || len != PATH_MAX) + if (fp == NULL) return NULL; while (fscanf(fp, "%*s %" textify(PATH_MAX) "s %99s %*s %*d %*d\n", diff --git a/misc/ss.c b/misc/ss.c index bd68ecdc..34c6da54 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -3479,17 +3479,18 @@ static int netlink_show_one(struct filter *f, int rq, int wq, unsigned long long sk, unsigned long long cb) { - struct sockstat st; + struct sockstat st = { + .state = SS_CLOSE, + .rq = rq, + .wq = wq, + .local.family = AF_NETLINK, + .remote.family = AF_NETLINK, + }; SPRINT_BUF(prot_buf) = {}; const char *prot_name; char procname[64] = {}; - st.state = SS_CLOSE; - st.rq = rq; - st.wq = wq; - st.local.family = st.remote.family = AF_NETLINK; - if (f->f) { st.rport = -1; st.lport = pid; diff --git a/netem/maketable.c b/netem/maketable.c index 6aff927b..ad660e7d 100644 --- a/netem/maketable.c +++ b/netem/maketable.c @@ -24,8 +24,8 @@ readdoubles(FILE *fp, int *number) int limit; int n=0, i; - fstat(fileno(fp), &info); - if (info.st_size > 0) { + if (!fstat(fileno(fp), &info) && + info.st_size > 0) { limit = 2*info.st_size/sizeof(double); /* @@ approximate */ } else { limit = 10000; diff --git a/tc/q_multiq.c b/tc/q_multiq.c index 78239314..9c09c9a7 100644 --- a/tc/q_multiq.c +++ b/tc/q_multiq.c @@ -43,7 +43,7 @@ static void explain(void) static int multiq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { - struct tc_multiq_qopt opt; + struct tc_multiq_qopt opt = {}; if (argc) { if (strcmp(*argv, "help") == 0) {