From: Emil Velikov Date: Mon, 12 Feb 2024 17:23:03 +0000 (+0000) Subject: libkmod: keep gzFile gzf local to load_zlib() X-Git-Tag: v33~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09256b9a4f79976b28d2b15c4be3ee805d57edff;p=thirdparty%2Fkmod.git libkmod: keep gzFile gzf local to load_zlib() There is no need to keep the root gzFile context open for the whole duration. Once we've copied the decompressed module to file->memory we can close the handle. Signed-off-by: Emil Velikov Reviewed-by: Lucas De Marchi Signed-off-by: Lucas De Marchi --- diff --git a/libkmod/libkmod-file.c b/libkmod/libkmod-file.c index b97062bf..9a014ea3 100644 --- a/libkmod/libkmod-file.c +++ b/libkmod/libkmod-file.c @@ -53,9 +53,6 @@ struct kmod_file { #endif #ifdef ENABLE_XZ bool xz_used; -#endif -#ifdef ENABLE_ZLIB - gzFile gzf; #endif int fd; enum kmod_file_compression_type compression; @@ -317,6 +314,7 @@ static int load_zlib(struct kmod_file *file) int err = 0; off_t did = 0, total = 0; _cleanup_free_ unsigned char *p = NULL; + gzFile gzf; int gzfd; errno = 0; @@ -324,8 +322,8 @@ static int load_zlib(struct kmod_file *file) if (gzfd < 0) return -errno; - file->gzf = gzdopen(gzfd, "rb"); /* takes ownership of the fd */ - if (file->gzf == NULL) { + gzf = gzdopen(gzfd, "rb"); /* takes ownership of the fd */ + if (gzf == NULL) { close(gzfd); return -errno; } @@ -343,12 +341,12 @@ static int load_zlib(struct kmod_file *file) p = tmp; } - r = gzread(file->gzf, p + did, total - did); + r = gzread(gzf, p + did, total - did); if (r == 0) break; else if (r < 0) { int gzerr; - const char *gz_errmsg = gzerror(file->gzf, &gzerr); + const char *gz_errmsg = gzerror(gzf, &gzerr); ERR(file->ctx, "gzip: %s\n", gz_errmsg); @@ -362,19 +360,17 @@ static int load_zlib(struct kmod_file *file) file->memory = p; file->size = did; p = NULL; + gzclose(gzf); return 0; error: - gzclose(file->gzf); /* closes the gzfd */ + gzclose(gzf); /* closes the gzfd */ return err; } static void unload_zlib(struct kmod_file *file) { - if (file->gzf == NULL) - return; free(file->memory); - gzclose(file->gzf); } static const char magic_zlib[] = {0x1f, 0x8b};