Skip to content

Commit f4c6372

Browse files
anakryikoKernel Patches Daemon
authored andcommitted
libbpf: remove linux/unaligned.h dependency for libbpf_sha256()
linux/unaligned.h include dependency is causing issues for libbpf's Github mirror due to {get,put}_unaligned_be32() usage. So get rid of it by implementing custom variants of those macros that will work both in kernel repo and in Github mirror repo. Also fix switch from round_up() to roundup(), as the former is not available in Github mirror (and is just a subtle more specific variant of roundup() anyways). Signed-off-by: Andrii Nakryiko <[email protected]>
1 parent 224cf61 commit f4c6372

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

tools/lib/bpf/libbpf_utils.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include <errno.h>
1414
#include <inttypes.h>
1515
#include <linux/kernel.h>
16-
#include <linux/unaligned.h>
1716

1817
#include "libbpf.h"
1918
#include "libbpf_internal.h"
@@ -149,6 +148,14 @@ const char *libbpf_errstr(int err)
149148
}
150149
}
151150

151+
#pragma GCC diagnostic push
152+
#pragma GCC diagnostic ignored "-Wpacked"
153+
struct __packed_u32 { __u32 __val; } __attribute__((packed));
154+
#pragma GCC diagnostic pop
155+
156+
#define get_unaligned_be32(p) (((struct __packed_u32 *)(p))->__val)
157+
#define put_unaligned_be32(v, p) do { ((struct __packed_u32 *)(p))->__val = (v); } while (0)
158+
152159
#define SHA256_BLOCK_LENGTH 64
153160
#define Ch(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
154161
#define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
@@ -232,7 +239,7 @@ void libbpf_sha256(const void *data, size_t len, __u8 out[SHA256_DIGEST_LENGTH])
232239

233240
memcpy(final_data, data + len - final_len, final_len);
234241
final_data[final_len] = 0x80;
235-
final_len = round_up(final_len + 9, SHA256_BLOCK_LENGTH);
242+
final_len = roundup(final_len + 9, SHA256_BLOCK_LENGTH);
236243
memcpy(&final_data[final_len - 8], &bitcount, 8);
237244

238245
sha256_blocks(state, final_data, final_len / SHA256_BLOCK_LENGTH);

0 commit comments

Comments
 (0)