[ Upstream commit 3737df782c740b944912ed93420c57344b1cf864 ]
Use a similar approach as commit a419beac4a07 ("module/decompress: use
vmalloc() for zstd decompression workspace") and replace kmalloc() with
vmalloc() also for the gzip module decompression workspace.
In this case the workspace is represented by struct inflate_workspace
that can be fairly large for kmalloc() and it can potentially lead to
allocation errors on certain systems:
$ pahole inflate_workspace
struct inflate_workspace {
struct inflate_state inflate_state; /* 0 9544 */
/* --- cacheline 149 boundary (9536 bytes) was 8 bytes ago --- */
unsigned char working_window[32768]; /* 9544 32768 */
/* size: 42312, cachelines: 662, members: 2 */
/* last cacheline: 8 bytes */
};
Considering that there is no need to use continuous physical memory,
simply switch to vmalloc() to provide a more reliable in-kernel module
decompression.
Fixes:
|
||
|---|---|---|
| .. | ||
| debug_kmemleak.c | ||
| decompress.c | ||
| internal.h | ||
| kallsyms.c | ||
| Kconfig | ||
| kdb.c | ||
| livepatch.c | ||
| main.c | ||
| Makefile | ||
| procfs.c | ||
| signing.c | ||
| strict_rwx.c | ||
| sysfs.c | ||
| tracking.c | ||
| tree_lookup.c | ||
| version.c | ||