From c059b341707863f8ecc4ecde75dd608dda72fdad Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 22 Apr 2025 12:13:22 +0100 Subject: [deflate] Remove userptr_t from decompression code Simplify the deflate, zlib, and gzip decompression code by assuming that all content is fully accessible via pointer dereferences. Signed-off-by: Michael Brown --- src/include/ipxe/deflate.h | 12 ++++++++---- src/include/ipxe/zlib.h | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/include') diff --git a/src/include/ipxe/deflate.h b/src/include/ipxe/deflate.h index b751aa9a3..67292d77e 100644 --- a/src/include/ipxe/deflate.h +++ b/src/include/ipxe/deflate.h @@ -11,7 +11,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include -#include /** Compression formats */ enum deflate_format { @@ -163,6 +162,11 @@ struct deflate { /** Format */ enum deflate_format format; + /** Current input data pointer */ + const uint8_t *in; + /** End of input data pointer */ + const uint8_t *end; + /** Accumulator */ uint32_t accumulator; /** Bit-reversed accumulator @@ -240,7 +244,7 @@ struct deflate { /** A chunk of data */ struct deflate_chunk { /** Data */ - userptr_t data; + void *data; /** Current offset */ size_t offset; /** Length of data */ @@ -256,7 +260,7 @@ struct deflate_chunk { * @v len Length */ static inline __attribute__ (( always_inline )) void -deflate_chunk_init ( struct deflate_chunk *chunk, userptr_t data, +deflate_chunk_init ( struct deflate_chunk *chunk, void *data, size_t offset, size_t len ) { chunk->data = data; @@ -277,7 +281,7 @@ static inline int deflate_finished ( struct deflate *deflate ) { extern void deflate_init ( struct deflate *deflate, enum deflate_format format ); extern int deflate_inflate ( struct deflate *deflate, - struct deflate_chunk *in, + const void *data, size_t len, struct deflate_chunk *out ); #endif /* _IPXE_DEFLATE_H */ diff --git a/src/include/ipxe/zlib.h b/src/include/ipxe/zlib.h index 29016c38e..3b0866bd1 100644 --- a/src/include/ipxe/zlib.h +++ b/src/include/ipxe/zlib.h @@ -28,15 +28,15 @@ union zlib_magic { * @v magic Magic header * @ret is_valid Magic header is valid */ -static inline int zlib_magic_is_valid ( union zlib_magic *magic ) { +static inline int zlib_magic_is_valid ( const union zlib_magic *magic ) { /* Check magic value as per RFC 6713 */ return ( ( ( magic->cmf & 0x8f ) == 0x08 ) && ( ( be16_to_cpu ( magic->check ) % 31 ) == 0 ) ); } -extern int zlib_deflate ( enum deflate_format format, struct deflate_chunk *in, - struct image *extracted ); +extern int zlib_deflate ( enum deflate_format format, const void *data, + size_t len, struct image *extracted ); extern struct image_type zlib_image_type __image_type ( PROBE_NORMAL ); -- cgit v1.2.3-55-g7522