diff --git a/lib/lz4_wrapper.c b/lib/lz4_wrapper.c
index 1e1e8d5..e0f7d36 100644
--- a/lib/lz4_wrapper.c
+++ b/lib/lz4_wrapper.c
@@ -9,6 +9,7 @@
 #include <lz4.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
+#include <asm/unaligned.h>
 
 static u16 LZ4_readLE16(const void *src) { return le16_to_cpu(*(u16 *)src); }
 static void LZ4_copy4(void *dst, const void *src) { *(u32 *)dst = *(u32 *)src; }
@@ -22,45 +23,10 @@
 
 #define FORCE_INLINE static inline __attribute__((always_inline))
 
-/* Unaltered (except removing unrelated code) from github.com/Cyan4973/lz4. */
+/* lz4.c is unaltered (except removing unrelated code) from github.com/Cyan4973/lz4. */
 #include "lz4.c"	/* #include for inlining, do not link! */
 
-struct lz4_frame_header {
-	u32 magic;
-	union {
-		u8 flags;
-		struct {
-			u8 reserved0:2;
-			u8 has_content_checksum:1;
-			u8 has_content_size:1;
-			u8 has_block_checksum:1;
-			u8 independent_blocks:1;
-			u8 version:2;
-		};
-	};
-	union {
-		u8 block_descriptor;
-		struct {
-			u8 reserved1:4;
-			u8 max_block_size:3;
-			u8 reserved2:1;
-		};
-	};
-	/* + u64 content_size iff has_content_size is set */
-	/* + u8 header_checksum */
-} __packed;
-
-struct lz4_block_header {
-	union {
-		u32 raw;
-		struct {
-			u32 size:31;
-			u32 not_compressed:1;
-		};
-	};
-	/* + size bytes of data */
-	/* + u32 block_checksum iff has_block_checksum is set */
-} __packed;
+#define LZ4F_BLOCKUNCOMPRESSED_FLAG 0x80000000U
 
 int ulz4fn(const void *src, size_t srcn, void *dst, size_t *dstn)
 {
@@ -72,53 +38,70 @@
 	*dstn = 0;
 
 	{ /* With in-place decompression the header may become invalid later. */
-		const struct lz4_frame_header *h = in;
+		u32 magic;
+		u8 flags, version, independent_blocks, has_content_size;
+		u8 block_desc;
 
-		if (srcn < sizeof(*h) + sizeof(u64) + sizeof(u8))
+		if (srcn < sizeof(u32) + 3*sizeof(u8))
 			return -EINVAL;	/* input overrun */
 
+		magic = get_unaligned_le32(in);
+		in += sizeof(u32);
+		flags = *(u8 *)in;
+		in += sizeof(u8);
+		block_desc = *(u8 *)in;
+		in += sizeof(u8);
+
+		version = (flags >> 6) & 0x3;
+		independent_blocks = (flags >> 5) & 0x1;
+		has_block_checksum = (flags >> 4) & 0x1;
+		has_content_size = (flags >> 3) & 0x1;
+
 		/* We assume there's always only a single, standard frame. */
-		if (le32_to_cpu(h->magic) != LZ4F_MAGIC || h->version != 1)
+		if (magic != LZ4F_MAGIC || version != 1)
 			return -EPROTONOSUPPORT;	/* unknown format */
-		if (h->reserved0 || h->reserved1 || h->reserved2)
-			return -EINVAL;	/* reserved must be zero */
-		if (!h->independent_blocks)
+		if ((flags & 0x03) || (block_desc & 0x8f))
+			return -EINVAL;	/* reserved bits must be zero */
+		if (!independent_blocks)
 			return -EPROTONOSUPPORT; /* we can't support this yet */
-		has_block_checksum = h->has_block_checksum;
 
-		in += sizeof(*h);
-		if (h->has_content_size)
+		if (has_content_size) {
+			if (srcn < sizeof(u32) + 3*sizeof(u8) + sizeof(u64))
+				return -EINVAL;	/* input overrun */
 			in += sizeof(u64);
+		}
+		/* Header checksum byte */
 		in += sizeof(u8);
 	}
 
 	while (1) {
-		struct lz4_block_header b;
+		u32 block_header, block_size;
 
-		b.raw = le32_to_cpu(*(u32 *)in);
-		in += sizeof(struct lz4_block_header);
+		block_header = get_unaligned_le32(in);
+		in += sizeof(u32);
+		block_size = block_header & ~LZ4F_BLOCKUNCOMPRESSED_FLAG;
 
-		if (in - src + b.size > srcn) {
+		if (in - src + block_size > srcn) {
 			ret = -EINVAL;		/* input overrun */
 			break;
 		}
 
-		if (!b.size) {
+		if (!block_size) {
 			ret = 0;	/* decompression successful */
 			break;
 		}
 
-		if (b.not_compressed) {
-			size_t size = min((ptrdiff_t)b.size, end - out);
+		if (block_header & LZ4F_BLOCKUNCOMPRESSED_FLAG) {
+			size_t size = min((ptrdiff_t)block_size, end - out);
 			memcpy(out, in, size);
 			out += size;
-			if (size < b.size) {
+			if (size < block_size) {
 				ret = -ENOBUFS;	/* output overrun */
 				break;
 			}
 		} else {
 			/* constant folding essential, do not touch params! */
-			ret = LZ4_decompress_generic(in, out, b.size,
+			ret = LZ4_decompress_generic(in, out, block_size,
 					end - out, endOnInputSize,
 					full, 0, noDict, out, NULL, 0);
 			if (ret < 0) {
@@ -128,7 +111,7 @@
 			out += ret;
 		}
 
-		in += b.size;
+		in += block_size;
 		if (has_block_checksum)
 			in += sizeof(u32);
 	}
