kmod-30_lzip-1.diff 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. diff -urdN kmod-30/Makefile.am kmod-30.new/Makefile.am
  2. --- kmod-30/Makefile.am 2022-06-30 01:04:59.000000000 +0200
  3. +++ kmod-30.new/Makefile.am 2023-01-19 00:17:00.465954251 +0100
  4. @@ -105,7 +105,7 @@
  5. ${top_srcdir}/libkmod/libkmod.sym
  6. libkmod_libkmod_la_LIBADD = \
  7. shared/libshared.la \
  8. - ${libzstd_LIBS} ${liblzma_LIBS} ${zlib_LIBS} ${libcrypto_LIBS}
  9. + ${libzstd_LIBS} ${liblzma_LIBS} -llz ${zlib_LIBS} ${libcrypto_LIBS}
  10. noinst_LTLIBRARIES += libkmod/libkmod-internal.la
  11. libkmod_libkmod_internal_la_SOURCES = $(libkmod_libkmod_la_SOURCES)
  12. diff -urdN kmod-30/Makefile.in kmod-30.new/Makefile.in
  13. --- kmod-30/Makefile.in 2022-06-30 17:18:23.000000000 +0200
  14. +++ kmod-30.new/Makefile.in 2023-01-19 00:17:00.465954251 +0100
  15. @@ -1068,7 +1068,7 @@
  16. libkmod_libkmod_la_LIBADD = \
  17. shared/libshared.la \
  18. - ${libzstd_LIBS} ${liblzma_LIBS} ${zlib_LIBS} ${libcrypto_LIBS}
  19. + ${libzstd_LIBS} ${liblzma_LIBS} -llz ${zlib_LIBS} ${libcrypto_LIBS}
  20. libkmod_libkmod_internal_la_SOURCES = $(libkmod_libkmod_la_SOURCES)
  21. libkmod_libkmod_internal_la_LDFLAGS = $(AM_LDFLAGS) \
  22. diff -urdN kmod-30/README.md kmod-30.new/README.md
  23. --- kmod-30/README.md 2022-06-29 09:04:17.000000000 +0200
  24. +++ kmod-30.new/README.md 2023-01-18 23:04:27.355954251 +0100
  25. @@ -50,6 +50,7 @@
  26. Optional dependencies:
  27. - ZLIB library
  28. + - LZLIB library
  29. - LZMA library
  30. - ZSTD library
  31. - OPENSSL library (signature handling in modinfo)
  32. diff -urdN kmod-30/configure kmod-30.new/configure
  33. --- kmod-30/configure 2022-06-30 17:18:23.000000000 +0200
  34. +++ kmod-30.new/configure 2023-01-19 00:17:00.475954251 +0100
  35. @@ -18438,7 +18438,7 @@
  36. tools: ${enable_tools}
  37. python bindings: ${enable_python}
  38. logging: ${enable_logging}
  39. - compression: zstd=${with_zstd} xz=${with_xz} zlib=${with_zlib}
  40. + compression: zstd=${with_zstd} xz=${with_xz} lzlib=yes zlib=${with_zlib}
  41. debug: ${enable_debug}
  42. coverage: ${enable_coverage}
  43. doc: ${enable_gtk_doc}
  44. @@ -18467,7 +18467,7 @@
  45. tools: ${enable_tools}
  46. python bindings: ${enable_python}
  47. logging: ${enable_logging}
  48. - compression: zstd=${with_zstd} xz=${with_xz} zlib=${with_zlib}
  49. + compression: zstd=${with_zstd} xz=${with_xz} lzlib=yes zlib=${with_zlib}
  50. debug: ${enable_debug}
  51. coverage: ${enable_coverage}
  52. doc: ${enable_gtk_doc}
  53. diff -urdN kmod-30/configure.ac kmod-30.new/configure.ac
  54. --- kmod-30/configure.ac 2022-06-30 00:57:35.000000000 +0200
  55. +++ kmod-30.new/configure.ac 2023-01-19 00:17:00.465954251 +0100
  56. @@ -320,7 +320,7 @@
  57. tools: ${enable_tools}
  58. python bindings: ${enable_python}
  59. logging: ${enable_logging}
  60. - compression: zstd=${with_zstd} xz=${with_xz} zlib=${with_zlib}
  61. + compression: zstd=${with_zstd} xz=${with_xz} lzlib=yes zlib=${with_zlib}
  62. debug: ${enable_debug}
  63. coverage: ${enable_coverage}
  64. doc: ${enable_gtk_doc}
  65. diff -urdN kmod-30/libkmod/libkmod-file.c kmod-30.new/libkmod/libkmod-file.c
  66. --- kmod-30/libkmod/libkmod-file.c 2020-09-11 06:55:01.000000000 +0200
  67. +++ kmod-30.new/libkmod/libkmod-file.c 2023-01-19 00:17:00.475954251 +0100
  68. @@ -37,6 +37,7 @@
  69. #endif
  70. #include <shared/util.h>
  71. +#include <lzlib.h>
  72. #include "libkmod.h"
  73. #include "libkmod-internal.h"
  74. @@ -54,6 +55,7 @@
  75. #ifdef ENABLE_XZ
  76. bool xz_used;
  77. #endif
  78. + bool lz_used;
  79. #ifdef ENABLE_ZLIB
  80. gzFile gzf;
  81. #endif
  82. @@ -310,6 +312,86 @@
  83. static const char magic_xz[] = {0xfd, '7', 'z', 'X', 'Z', 0};
  84. #endif
  85. +#ifndef min
  86. + #define min(x,y) ((x) <= (y) ? (x) : (y))
  87. +#endif
  88. +
  89. +static int load_lzlib(struct kmod_file *file)
  90. +{
  91. + uint8_t in_buf[16384];
  92. + int err = 0;
  93. + off_t did = 0, total = 0;
  94. + _cleanup_free_ unsigned char *p = NULL;
  95. +
  96. + struct LZ_Decoder *lzd = LZ_decompress_open();
  97. + if (!lzd || LZ_decompress_errno( lzd ) != LZ_ok)
  98. + { LZ_decompress_close(lzd); return -ENOMEM; }
  99. +
  100. + for (;;) {
  101. + int rd;
  102. + const int size = min(LZ_decompress_write_size(lzd),
  103. + (int)sizeof in_buf);
  104. +
  105. + if (did == total) {
  106. + const int realloc_step = 4 * 1024 * 1024;
  107. + void *tmp = realloc(p, total + realloc_step);
  108. + if (tmp == NULL) {
  109. + err = -ENOMEM;
  110. + goto error;
  111. + }
  112. + total += realloc_step;
  113. + p = tmp;
  114. + }
  115. +
  116. + if (size > 0) {
  117. + rd = read(file->fd, in_buf, size);
  118. + if (rd < 0) {
  119. + err = -errno;
  120. + goto error;
  121. + }
  122. + if (rd == 0)
  123. + LZ_decompress_finish(lzd);
  124. + else if (LZ_decompress_write(lzd, in_buf, rd) != rd) {
  125. + err = -EINVAL;
  126. + goto error;
  127. + }
  128. + }
  129. + rd = LZ_decompress_read(lzd, p + did, total - did);
  130. + if (rd < 0) {
  131. + const char *lz_errmsg =
  132. + LZ_strerror(LZ_decompress_errno(lzd));
  133. +
  134. + ERR(file->ctx, "lzip: %s\n", lz_errmsg);
  135. + err = -EINVAL;
  136. + goto error;
  137. + }
  138. + did += rd;
  139. + if (LZ_decompress_finished(lzd) == 1)
  140. + break;
  141. + }
  142. +
  143. + if (LZ_decompress_close(lzd) < 0)
  144. + return -EINVAL;
  145. + file->lz_used = true;
  146. + file->memory = p;
  147. + file->size = did;
  148. + p = NULL;
  149. + return 0;
  150. +
  151. +error:
  152. + LZ_decompress_close(lzd);
  153. + return err;
  154. +}
  155. +
  156. +static void unload_lzlib(struct kmod_file *file)
  157. +{
  158. + if (!file->lz_used)
  159. + return;
  160. + free(file->memory);
  161. +}
  162. +
  163. +static const char magic_lzlib[] = { 0x4C, 0x5A, 0x49, 0x50 }; /* "LZIP" */
  164. +
  165. #ifdef ENABLE_ZLIB
  166. #define READ_STEP (4 * 1024 * 1024)
  167. static int load_zlib(struct kmod_file *file)
  168. @@ -385,6 +467,7 @@
  169. #ifdef ENABLE_XZ
  170. {sizeof(magic_xz), magic_xz, {load_xz, unload_xz}},
  171. #endif
  172. + {sizeof(magic_lzlib), magic_lzlib, {load_lzlib, unload_lzlib}},
  173. #ifdef ENABLE_ZLIB
  174. {sizeof(magic_zlib), magic_zlib, {load_zlib, unload_zlib}},
  175. #endif
  176. diff -urdN kmod-30/libkmod/libkmod.pc.in kmod-30.new/libkmod/libkmod.pc.in
  177. --- kmod-30/libkmod/libkmod.pc.in 2020-09-11 06:55:01.000000000 +0200
  178. +++ kmod-30.new/libkmod/libkmod.pc.in 2023-01-19 00:17:00.475954251 +0100
  179. @@ -7,5 +7,5 @@
  180. Description: Library to deal with kernel modules
  181. Version: @VERSION@
  182. Libs: -L${libdir} -lkmod
  183. -Libs.private: @libzstd_LIBS@ @liblzma_LIBS@ @zlib_LIBS@
  184. +Libs.private: @libzstd_LIBS@ @liblzma_LIBS@ -llz @zlib_LIBS@
  185. Cflags: -I${includedir}
  186. diff -urdN kmod-30/shared/util.c kmod-30.new/shared/util.c
  187. --- kmod-30/shared/util.c 2022-06-27 08:23:46.000000000 +0200
  188. +++ kmod-30.new/shared/util.c 2023-01-19 00:17:00.475954251 +0100
  189. @@ -43,6 +43,7 @@
  190. #ifdef ENABLE_ZLIB
  191. {".ko.gz", sizeof(".ko.gz") - 1},
  192. #endif
  193. + {".ko.lz", sizeof(".ko.lz") - 1},
  194. #ifdef ENABLE_XZ
  195. {".ko.xz", sizeof(".ko.xz") - 1},
  196. #endif
  197. diff -urdN kmod-30/testsuite/test-util.c kmod-30.new/testsuite/test-util.c
  198. --- kmod-30/testsuite/test-util.c 2022-06-27 08:23:46.000000000 +0200
  199. +++ kmod-30.new/testsuite/test-util.c 2023-01-19 00:17:00.475954251 +0100
  200. @@ -154,6 +154,7 @@
  201. #ifdef ENABLE_ZLIB
  202. { "/bla.ko.gz", true },
  203. #endif
  204. + { "/bla.ko.lz", true },
  205. #ifdef ENABLE_XZ
  206. { "/bla.ko.xz", true },
  207. #endif