commit 7e7dfca6b2824e5a14c5b011a4e05aac89d85231 Author: Iurii Egorov Date: Fri Nov 15 12:54:46 2024 +0300 Fix get_random_u8() absence in older kernels Signed-off-by: Iurii Egorov diff --git a/src/netlink.c b/src/netlink.c index 5043bb3..29049ba 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -232,7 +232,7 @@ static inline int parse_ipv6_prefix(const char *prefix_str, struct ipv6_prefix * static inline int generate_ipv6_address_with_prefix(const struct ipv6_prefix *prefix, u8 *addr) { int prefix_bytes, prefix_bits; - u8 mask; + u8 mask, random_byte; if (!prefix || !addr) return -EINVAL; @@ -246,9 +246,10 @@ static inline int generate_ipv6_address_with_prefix(const struct ipv6_prefix *pr get_random_bytes(addr + prefix_bytes, 16 - prefix_bytes); if (prefix_bits != 0) { + get_random_bytes(&random_byte, sizeof(random_byte)); mask = (u8)(0xFF << (8 - prefix_bits)); addr[prefix_bytes] &= mask; - addr[prefix_bytes] |= get_random_u8() & ~mask; + addr[prefix_bytes] |= random_byte & ~mask; } } diff --git a/src/patches/007-random-bytes-fix.patch b/src/patches/007-random-bytes-fix.patch new file mode 100644 index 0000000..d898a79 --- /dev/null +++ b/src/patches/007-random-bytes-fix.patch @@ -0,0 +1,25 @@ +diff --git netlink.c netlink.c +index 5043bb3..29049ba 100644 +--- netlink.c ++++ netlink.c +@@ -232,7 +232,7 @@ static inline int parse_ipv6_prefix(const char *prefix_str, struct ipv6_prefix * + static inline int generate_ipv6_address_with_prefix(const struct ipv6_prefix *prefix, u8 *addr) + { + int prefix_bytes, prefix_bits; +- u8 mask; ++ u8 mask, random_byte; + + if (!prefix || !addr) + return -EINVAL; +@@ -246,9 +246,10 @@ static inline int generate_ipv6_address_with_prefix(const struct ipv6_prefix *pr + get_random_bytes(addr + prefix_bytes, 16 - prefix_bytes); + + if (prefix_bits != 0) { ++ get_random_bytes(&random_byte, sizeof(random_byte)); + mask = (u8)(0xFF << (8 - prefix_bits)); + addr[prefix_bytes] &= mask; +- addr[prefix_bytes] |= get_random_u8() & ~mask; ++ addr[prefix_bytes] |= random_byte & ~mask; + } + } +