diff --git a/bpf/reuseport_kern.c b/bpf/reuseport_kern.c index a012ee9a..51cbdc18 100644 --- a/bpf/reuseport_kern.c +++ b/bpf/reuseport_kern.c @@ -24,7 +24,6 @@ */ #include #include -#include #include @@ -235,22 +234,29 @@ static void InvMixColumns(state_t *state) { } } +extern __u32 LINUX_KERNEL_VERSION __kconfig; + /* The SubBytes Function Substitutes the values in the state matrix with values in an S-box. */ static void InvSubBytes(state_t *state) { __u8 i, j; - for (i = 0; i < 4; ++i) { - for (j = 0; j < 4; ++j) { -#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0) - /* Ubuntu 20.04 LTS kernel 5.4.0 needs this workaround otherwise - "math between map_value pointer and register with unbounded - min value is not allowed". 5.10.0 is a kernel version that - works but it might not be a minimum version. */ - __u8 k = (*state)[j][i]; - (*state)[j][i] = k ? getSBoxInvert(k) : getSBoxInvert(0); -#else /* !(LINUX_VERSION_CDOE < KERNEL_VERSION(5, 10, 0)) */ - (*state)[j][i] = getSBoxInvert((*state)[j][i]); -#endif /* !(LINUX_VERSION_CDOE < KERNEL_VERSION(5, 10, 0)) */ + if (LINUX_KERNEL_VERSION < KERNEL_VERSION(5, 10, 0)) { + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + /* Ubuntu 20.04 LTS kernel 5.4.0 needs this workaround + otherwise "math between map_value pointer and register with + unbounded min value is not allowed". 5.10.0 is a kernel + version that works but it might not be the minimum + version. */ + __u8 k = (*state)[j][i]; + (*state)[j][i] = k ? getSBoxInvert(k) : getSBoxInvert(0); + } + } + } else { + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + (*state)[j][i] = getSBoxInvert((*state)[j][i]); + } } } }