[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