summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJeremy Sowden <jeremy@azazel.net>2025-05-26 18:19:01 +0100
committerFlorian Westphal <fw@strlen.de>2025-06-01 14:12:47 +0200
commit6498d29aa15557428aa62f37c478a602e03bd740 (patch)
tree3a56cbbf145875ee5943030b43860f51d71abd8e /include
parent512a0d4915bfd9c47196deed5ef27710b4418491 (diff)
db, IP2BIN: correct `format_ipv6()` output buffer sizes
`format_ipv6()` formats IPv6 addresses as hex-strings. However, sizing for the output buffer is not done quite right. The elements of the `ipbin_array` array in ulogd_filter_IP2BIN.c are sized using a local macro, `IPADDR_LENGTH`, which is defined as 128, the number of bits in an IPv6 address; this is much larger than necessary. Define an appropriate macro and use that instead. Signed-off-by: Jeremy Sowden <jeremy@azazel.net> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'include')
-rw-r--r--include/ulogd/ulogd.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/include/ulogd/ulogd.h b/include/ulogd/ulogd.h
index 5eafb21..29082df 100644
--- a/include/ulogd/ulogd.h
+++ b/include/ulogd/ulogd.h
@@ -23,6 +23,15 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+/*
+ * Minimum size of buffer required to hold an ipv6 address encoded as a
+ * hex-string, e.g.:
+ *
+ * ::1 -> "0x00000000000000000000000000000001"
+ * 2600:1408:ec00:36::1736:7f28 -> "0x26001408ec0000360000000017367f28"
+ */
+#define FORMAT_IPV6_BUFSZ (2 + sizeof(struct in6_addr) * 2 + 1)
+
/* All types with MSB = 1 make use of value.ptr
* other types use one of the union's member */
@@ -233,7 +242,7 @@ format_ipv6(char *buf, size_t size, const struct in6_addr *ipv6)
{
unsigned i = 0;
- if (size > 2 + sizeof (*ipv6) * 2) {
+ if (size >= FORMAT_IPV6_BUFSZ) {
buf[i++] = '0';
buf[i++] = 'x';