]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - crypto/zlib.c
Merge branch 'stable/bug-fixes-rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[mv-sheeva.git] / crypto / zlib.c
index c3015733c9909cbf90554477a79430b1a31ab286..d11d761a5e418191c29a987f923ac3e2be0f20a6 100644 (file)
@@ -85,6 +85,7 @@ static int zlib_compress_setup(struct crypto_pcomp *tfm, void *params,
        struct zlib_ctx *ctx = crypto_tfm_ctx(crypto_pcomp_tfm(tfm));
        struct z_stream_s *stream = &ctx->comp_stream;
        struct nlattr *tb[ZLIB_COMP_MAX + 1];
+       int window_bits, mem_level;
        size_t workspacesize;
        int ret;
 
@@ -94,12 +95,18 @@ static int zlib_compress_setup(struct crypto_pcomp *tfm, void *params,
 
        zlib_comp_exit(ctx);
 
-       workspacesize = zlib_deflate_workspacesize();
-       stream->workspace = vmalloc(workspacesize);
+       window_bits = tb[ZLIB_COMP_WINDOWBITS]
+                                       ? nla_get_u32(tb[ZLIB_COMP_WINDOWBITS])
+                                       : MAX_WBITS;
+       mem_level = tb[ZLIB_COMP_MEMLEVEL]
+                                       ? nla_get_u32(tb[ZLIB_COMP_MEMLEVEL])
+                                       : DEF_MEM_LEVEL;
+
+       workspacesize = zlib_deflate_workspacesize(window_bits, mem_level);
+       stream->workspace = vzalloc(workspacesize);
        if (!stream->workspace)
                return -ENOMEM;
 
-       memset(stream->workspace, 0, workspacesize);
        ret = zlib_deflateInit2(stream,
                                tb[ZLIB_COMP_LEVEL]
                                        ? nla_get_u32(tb[ZLIB_COMP_LEVEL])
@@ -107,12 +114,8 @@ static int zlib_compress_setup(struct crypto_pcomp *tfm, void *params,
                                tb[ZLIB_COMP_METHOD]
                                        ? nla_get_u32(tb[ZLIB_COMP_METHOD])
                                        : Z_DEFLATED,
-                               tb[ZLIB_COMP_WINDOWBITS]
-                                       ? nla_get_u32(tb[ZLIB_COMP_WINDOWBITS])
-                                       : MAX_WBITS,
-                               tb[ZLIB_COMP_MEMLEVEL]
-                                       ? nla_get_u32(tb[ZLIB_COMP_MEMLEVEL])
-                                       : DEF_MEM_LEVEL,
+                               window_bits,
+                               mem_level,
                                tb[ZLIB_COMP_STRATEGY]
                                        ? nla_get_u32(tb[ZLIB_COMP_STRATEGY])
                                        : Z_DEFAULT_STRATEGY);