]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: stick-table: fix an incorrect 32 to 64 bit key conversion
authorWilly Tarreau <w@1wt.eu>
Wed, 23 Oct 2019 04:21:05 +0000 (06:21 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 23 Oct 2019 04:24:58 +0000 (06:24 +0200)
As reported in issue #331, the code used to cast a 32-bit to a 64-bit
stick-table key is wrong. It only copies the 32 lower bits in place on
little endian machines or overwrites the 32 higher ones on big endian
machines. It ought to simply remove the wrong cast dereference.

This bug was introduced when changing stick table keys to samples in
1.6-dev4 by commit bc8c404449 ("MAJOR: stick-tables: use sample types
in place of dedicated types") so it the fix must be backported as far
as 1.6.

src/stick_table.c

index 86ea3ceea5c1c97a4bd9663d2b4f0aa1cc9d535d..c9f3e0636d568597c24d37a7f25b93f5b99ebcf3 100644 (file)
@@ -927,7 +927,7 @@ struct stktable_key *smp_to_stkey(struct sample *smp, struct stktable *t)
                /* The stick table require a 32bit unsigned int, "sint" is a
                 * signed 64 it, so we can convert it inplace.
                 */
-               *(unsigned int *)&smp->data.u.sint = (unsigned int)smp->data.u.sint;
+               smp->data.u.sint = (unsigned int)smp->data.u.sint;
                static_table_key.key = &smp->data.u.sint;
                static_table_key.key_len = 4;
                break;