mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
apparmor: Fix undefined reference to `zlib_deflate_workspacesize'
IF CONFIG_SECURITY_APPARMOR_EXPORT_BINARY is disabled, there remains some unneed references to zlib, and can result in undefined symbol references if ZLIB_INFLATE or ZLIB_DEFLATE are not defined. Reported-by: kernel test robot <lkp@intel.com> Fixes: abfb9c0725f2 ("apparmor: make export of raw binary profile to userspace optional") Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
parent
3e2a3a0830
commit
f9da5b1452
@ -1296,44 +1296,47 @@ SEQ_RAWDATA_FOPS(compressed_size);
|
||||
|
||||
static int deflate_decompress(char *src, size_t slen, char *dst, size_t dlen)
|
||||
{
|
||||
int error;
|
||||
struct z_stream_s strm;
|
||||
#ifdef CONFIG_SECURITY_APPARMOR_EXPORT_BINARY
|
||||
if (aa_g_rawdata_compression_level != 0) {
|
||||
int error = 0;
|
||||
struct z_stream_s strm;
|
||||
|
||||
if (aa_g_rawdata_compression_level == 0) {
|
||||
if (dlen < slen)
|
||||
return -EINVAL;
|
||||
memcpy(dst, src, slen);
|
||||
return 0;
|
||||
}
|
||||
memset(&strm, 0, sizeof(strm));
|
||||
|
||||
memset(&strm, 0, sizeof(strm));
|
||||
strm.workspace = kvzalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
|
||||
if (!strm.workspace)
|
||||
return -ENOMEM;
|
||||
|
||||
strm.workspace = kvzalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
|
||||
if (!strm.workspace)
|
||||
return -ENOMEM;
|
||||
strm.next_in = src;
|
||||
strm.avail_in = slen;
|
||||
|
||||
strm.next_in = src;
|
||||
strm.avail_in = slen;
|
||||
error = zlib_inflateInit(&strm);
|
||||
if (error != Z_OK) {
|
||||
error = -ENOMEM;
|
||||
goto fail_inflate_init;
|
||||
}
|
||||
|
||||
error = zlib_inflateInit(&strm);
|
||||
if (error != Z_OK) {
|
||||
error = -ENOMEM;
|
||||
goto fail_inflate_init;
|
||||
}
|
||||
strm.next_out = dst;
|
||||
strm.avail_out = dlen;
|
||||
|
||||
strm.next_out = dst;
|
||||
strm.avail_out = dlen;
|
||||
error = zlib_inflate(&strm, Z_FINISH);
|
||||
if (error != Z_STREAM_END)
|
||||
error = -EINVAL;
|
||||
else
|
||||
error = 0;
|
||||
|
||||
error = zlib_inflate(&strm, Z_FINISH);
|
||||
if (error != Z_STREAM_END)
|
||||
error = -EINVAL;
|
||||
else
|
||||
error = 0;
|
||||
|
||||
zlib_inflateEnd(&strm);
|
||||
zlib_inflateEnd(&strm);
|
||||
fail_inflate_init:
|
||||
kvfree(strm.workspace);
|
||||
return error;
|
||||
kvfree(strm.workspace);
|
||||
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dlen < slen)
|
||||
return -EINVAL;
|
||||
memcpy(dst, src, slen);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t rawdata_read(struct file *file, char __user *buf, size_t size,
|
||||
|
@ -1056,6 +1056,7 @@ struct aa_load_ent *aa_load_ent_alloc(void)
|
||||
static int deflate_compress(const char *src, size_t slen, char **dst,
|
||||
size_t *dlen)
|
||||
{
|
||||
#ifdef CONFIG_SECURITY_APPARMOR_EXPORT_BINARY
|
||||
int error;
|
||||
struct z_stream_s strm;
|
||||
void *stgbuf, *dstbuf;
|
||||
@ -1127,6 +1128,10 @@ fail_deflate_init:
|
||||
fail_deflate:
|
||||
kvfree(stgbuf);
|
||||
goto fail_stg_alloc;
|
||||
#else
|
||||
*dlen = slen;
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int compress_loaddata(struct aa_loaddata *data)
|
||||
@ -1145,7 +1150,8 @@ static int compress_loaddata(struct aa_loaddata *data)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
kvfree(udata);
|
||||
if (udata != data->data)
|
||||
kvfree(udata);
|
||||
} else
|
||||
data->compressed_size = data->size;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user