tcp, tcp_splice: False "Negative array index read" positives, CWE-129

A flag or event bit is always set by callers. Reported by Coverity.

Signed-by-off: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
Stefano Brivio 2022-04-05 12:51:00 +02:00
parent 264d68edcf
commit 2a3b8dad33
2 changed files with 24 additions and 12 deletions

12
tcp.c
View file

@ -868,15 +868,19 @@ static void conn_flag_do(const struct ctx *c, struct tcp_conn *conn,
return; return;
conn->flags &= flag; conn->flags &= flag;
debug("TCP: index %li: %s dropped", conn - tc, if (fls(~flag) >= 0) {
tcp_flag_str[fls(~flag)]); debug("TCP: index %li: %s dropped", conn - tc,
tcp_flag_str[fls(~flag)]);
}
} else { } else {
if (conn->flags & flag) if (conn->flags & flag)
return; return;
conn->flags |= flag; conn->flags |= flag;
debug("TCP: index %li: %s", conn - tc, if (fls(flag) >= 0) {
tcp_flag_str[fls(flag)]); debug("TCP: index %li: %s", conn - tc,
tcp_flag_str[fls(flag)]);
}
} }
if (flag == STALLED || flag == ~STALLED) if (flag == STALLED || flag == ~STALLED)

View file

@ -170,15 +170,19 @@ static void conn_flag_do(const struct ctx *c, struct tcp_splice_conn *conn,
return; return;
conn->flags &= flag; conn->flags &= flag;
debug("TCP (spliced): index %li: %s dropped", conn - tc, if (fls(~flag) >= 0) {
tcp_splice_flag_str[fls(~flag)]); debug("TCP (spliced): index %li: %s dropped", conn - tc,
tcp_splice_flag_str[fls(~flag)]);
}
} else { } else {
if (conn->flags & flag) if (conn->flags & flag)
return; return;
conn->flags |= flag; conn->flags |= flag;
debug("TCP (spliced): index %li: %s", conn - tc, if (fls(flag) >= 0) {
tcp_splice_flag_str[fls(flag)]); debug("TCP (spliced): index %li: %s", conn - tc,
tcp_splice_flag_str[fls(flag)]);
}
} }
if (flag == CLOSING) if (flag == CLOSING)
@ -250,15 +254,19 @@ static void conn_event_do(const struct ctx *c, struct tcp_splice_conn *conn,
return; return;
conn->events &= event; conn->events &= event;
debug("TCP (spliced): index %li, ~%s", conn - tc, if (fls(~event) >= 0) {
tcp_splice_event_str[fls(~event)]); debug("TCP (spliced): index %li, ~%s", conn - tc,
tcp_splice_event_str[fls(~event)]);
}
} else { } else {
if (conn->events & event) if (conn->events & event)
return; return;
conn->events |= event; conn->events |= event;
debug("TCP (spliced): index %li, %s", conn - tc, if (fls(event) >= 0) {
tcp_splice_event_str[fls(event)]); debug("TCP (spliced): index %li, %s", conn - tc,
tcp_splice_event_str[fls(event)]);
}
} }
if (tcp_splice_epoll_ctl(c, conn)) if (tcp_splice_epoll_ctl(c, conn))