[DTrace-devel] [PATCH] Limit varints to a 2-byte prefix for now

Kris Van Hees kris.van.hees at oracle.com
Thu Aug 19 23:47:00 PDT 2021


Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 bpf/varint.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/bpf/varint.c b/bpf/varint.c
index 02308a7a..87911854 100644
--- a/bpf/varint.c
+++ b/bpf/varint.c
@@ -9,6 +9,8 @@
 # define noinline	__attribute__((noinline))
 #endif
 
+#define LIMITED_VINT
+
 noinline uint64_t dt_int2vint(uint64_t val, char *str)
 {
 	uint64_t	len;
@@ -22,6 +24,14 @@ noinline uint64_t dt_int2vint(uint64_t val, char *str)
 		len = 2;
 		buf[0] = VARINT_2_PREFIX | (uint8_t)(val >> VARINT_2_SHIFT);
 		goto two;
+#ifdef LIMITED_VINT
+	} else {
+		val = VARINT_2_MAX;
+		len = 2;
+		buf[0] = VARINT_2_PREFIX | (uint8_t)(val >> VARINT_2_SHIFT);
+		goto two;
+	}
+#else
 	} else if (val <= VARINT_3_MAX) {
 		val -= VARINT_3_MIN;
 		len = 3;
@@ -70,6 +80,7 @@ four:
 	buf[3] = (uint8_t)((val >> 16) & 0xff);
 three:
 	buf[2] = (uint8_t)((val >> 8) & 0xff);
+#endif
 two:
 	buf[1] = (uint8_t)(val & 0xff);
 
@@ -91,6 +102,9 @@ noinline uint64_t dt_vint2int(const char *str)
 		base = VARINT_2_MIN;
 		goto two;
 	}
+#ifdef LIMITED_VINT
+	return VARINT_2_MAX;
+#else
 	if (hi < VARINT_3_PLIM) { /* 110xxxxx -> 0x4080 - 0x20407f */
 		hi &= VARINT_HI_MASK(VARINT_3_PLIM);
 		hi <<= VARINT_3_SHIFT;
@@ -144,6 +158,7 @@ four:
 	val += ((uint64_t)buf[3]) << 16;
 three:
 	val += ((uint64_t)buf[2]) << 8;
+#endif
 two:
 	val += (uint64_t)buf[1];
 	val += hi;
@@ -155,6 +170,9 @@ noinline uint64_t dt_vint_size(uint64_t val)
 {
 	if (val <= VARINT_1_MAX)
 		return 1;
+#ifdef LIMITED_VINT
+	return 2;
+#else
 	if (val <= VARINT_2_MAX)
 		return 2;
 	if (val <= VARINT_3_MAX)
@@ -171,6 +189,7 @@ noinline uint64_t dt_vint_size(uint64_t val)
 		return 8;
 
 	return 9;
+#endif
 }
 
 noinline const char *dt_vint_skip(const char *str)
@@ -180,6 +199,9 @@ noinline const char *dt_vint_skip(const char *str)
 
 	if (hi < VARINT_1_PLIM)	 /* 0xxxxxxx -> 0x00 - 0x7f */
 		return &str[1];
+#ifdef LIMITED_VINT
+	return &str[2];
+#else
 	if (hi < VARINT_2_PLIM)  /* 10xxxxxx -> 0x0080 - 0x407f */
 		return &str[2];
 	if (hi < VARINT_3_PLIM)  /* 110xxxxx -> 0x4080 - 0x20407f */
@@ -196,4 +218,5 @@ noinline const char *dt_vint_skip(const char *str)
 		return &str[8];
 
 	return &str[9];
+#endif
 }
-- 
2.33.0




More information about the DTrace-devel mailing list