[master] e9a460f86 Ensure that ban timestamps have a defined byte-order.
Poul-Henning Kamp
phk at FreeBSD.org
Mon Oct 21 08:34:07 UTC 2019
commit e9a460f86c20cc6f9efa2add6e61e0657450c665
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Oct 21 08:01:50 2019 +0000
Ensure that ban timestamps have a defined byte-order.
diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index dc4751d2c..354e9fc08 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -134,9 +134,12 @@ vtim_real
ban_time(const uint8_t *banspec)
{
vtim_real t;
+ uint64_t u;
+ assert(sizeof t == sizeof u);
assert(sizeof t == (BANS_LENGTH - BANS_TIMESTAMP));
- memcpy(&t, banspec, sizeof t);
+ u = vbe64dec(banspec + BANS_TIMESTAMP);
+ memcpy(&t, &u, sizeof t);
return (t);
}
@@ -157,8 +160,8 @@ ban_equal(const uint8_t *bs1, const uint8_t *bs2)
/*
* Compare two ban-strings.
*/
- u = vbe32dec(bs1 + BANS_LENGTH);
- if (u != vbe32dec(bs2 + BANS_LENGTH))
+ u = ban_len(bs1);
+ if (u != ban_len(bs2))
return (0);
if (bs1[BANS_FLAGS] & BANS_FLAG_NODEDUP)
return (0);
diff --git a/bin/varnishd/cache/cache_ban_build.c b/bin/varnishd/cache/cache_ban_build.c
index 441f71b93..55fcc4bb1 100644
--- a/bin/varnishd/cache/cache_ban_build.c
+++ b/bin/varnishd/cache/cache_ban_build.c
@@ -306,9 +306,11 @@ BAN_Commit(struct ban_proto *bp)
struct ban *b, *bi;
ssize_t ln;
vtim_real t0;
+ uint64_t u;
CHECK_OBJ_NOTNULL(bp, BAN_PROTO_MAGIC);
AN(bp->vsb);
+ assert(sizeof u == sizeof t0);
if (ban_shutdown)
return (ban_error(bp, "Shutting down"));
@@ -330,10 +332,10 @@ BAN_Commit(struct ban_proto *bp)
b->flags = bp->flags;
- // XXX why don't we vbe*enc timestamp and flags?
memset(b->spec, 0, BANS_HEAD_LEN);
t0 = VTIM_real();
- memcpy(b->spec + BANS_TIMESTAMP, &t0, sizeof t0);
+ memcpy(&u, &t0, sizeof u);
+ vbe64enc(b->spec + BANS_TIMESTAMP, u);
b->spec[BANS_FLAGS] = b->flags & 0xff;
memcpy(b->spec + BANS_HEAD_LEN, VSB_data(bp->vsb), ln);
ln += BANS_HEAD_LEN;
More information about the varnish-commit
mailing list