From: Stephen Hemminger Date: Mon, 7 Oct 2024 16:33:48 +0000 (-0700) Subject: bridge: catch invalid stp state X-Git-Tag: v6.12.0~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4b86f752d3c38d682fc1a5c55c67c8006c23800;p=thirdparty%2Fiproute2.git bridge: catch invalid stp state The stp state parsing was putting result in an __u8 which would mean that check for invalid string was never happening. Caught by enabling -Wextra: CC mst.o mst.c: In function ‘mst_set’: mst.c:217:27: warning: comparison is always false due to limited range of data type [-Wtype-limits] 217 | if (state == -1) { Signed-off-by: Stephen Hemminger --- diff --git a/bridge/mst.c b/bridge/mst.c index fccb7fd6..32f64aba 100644 --- a/bridge/mst.c +++ b/bridge/mst.c @@ -176,7 +176,7 @@ static int mst_set(int argc, char **argv) char *d = NULL, *m = NULL, *s = NULL, *endptr; struct rtattr *af_spec, *mst, *entry; __u16 msti; - __u8 state; + int state; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { @@ -212,13 +212,12 @@ static int mst_set(int argc, char **argv) } state = strtol(s, &endptr, 10); - if (!(*s != '\0' && *endptr == '\0')) { + if (!(*s != '\0' && *endptr == '\0')) state = parse_stp_state(s); - if (state == -1) { - fprintf(stderr, - "Error: invalid STP port state\n"); - return -1; - } + + if (state < 0 || state > UINT8_MAX) { + fprintf(stderr, "Error: invalid STP port state\n"); + return -1; } af_spec = addattr_nest(&req.n, sizeof(req), IFLA_AF_SPEC);