[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