aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-11-30 13:02:17 +1100
committerStefano Brivio <sbrivio@redhat.com>2023-12-04 09:51:22 +0100
commit788d2fe3ce7231b520b139712d721e9d481b49ea (patch)
tree22fbb187e7de0ead43a92d006d11c03d73870306
parentecea8d36ff921fc27e2dc8270380d824458cda24 (diff)
downloadpasst-788d2fe3ce7231b520b139712d721e9d481b49ea.tar
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.tar.gz
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.tar.bz2
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.tar.lz
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.tar.xz
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.tar.zst
passt-788d2fe3ce7231b520b139712d721e9d481b49ea.zip
tcp_splice: Use unsigned to represent side
Currently, we use 'int' values to represent the "side" of a connection, which must always be 0 or 1. This turns out to be dangerous. In some cases we're going to want to put the side into a 1-bit bitfield. However, if that bitfield has type 'int', when we copy it out to a regular 'int' variable, it will be sign-extended and so have values 0 and -1, instead of 0 and 1. To avoid this, always use unsigned variables for the side. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--tcp_splice.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/tcp_splice.c b/tcp_splice.c
index 081ce9c..4ab0813 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -249,7 +249,7 @@ void tcp_splice_conn_update(const struct ctx *c, struct tcp_splice_conn *new)
void tcp_splice_destroy(struct ctx *c, union flow *flow)
{
struct tcp_splice_conn *conn = &flow->tcp_splice;
- int side;
+ unsigned side;
for (side = 0; side < SIDES; side++) {
if (conn->events & SPLICE_ESTABLISHED) {
@@ -286,8 +286,8 @@ void tcp_splice_destroy(struct ctx *c, union flow *flow)
static int tcp_splice_connect_finish(const struct ctx *c,
struct tcp_splice_conn *conn)
{
+ unsigned side;
int i = 0;
- int side;
for (side = 0; side < SIDES; side++) {
conn->pipe[side][0] = conn->pipe[side][1] = -1;
@@ -490,7 +490,8 @@ void tcp_splice_sock_handler(struct ctx *c, struct tcp_splice_conn *conn,
int s, uint32_t events)
{
uint8_t lowat_set_flag, lowat_act_flag;
- int fromside, eof, never_read;
+ int eof, never_read;
+ unsigned fromside;
if (conn->events == SPLICE_CLOSED)
return;