Commit f9da5b14 authored by John Johansen's avatar John Johansen
Browse files

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: default avatarkernel test robot <lkp@intel.com>
Fixes: abfb9c0725f2 ("apparmor: make export of raw binary profile to userspace optional")
Signed-off-by: default avatarJohn Johansen <john.johansen@canonical.com>
parent 3e2a3a08
Loading
Loading
Loading
Loading
+33 −30
Original line number Diff line number Diff line
@@ -1296,16 +1296,11 @@ SEQ_RAWDATA_FOPS(compressed_size);

static int deflate_decompress(char *src, size_t slen, char *dst, size_t dlen)
{
	int error;
#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));

		strm.workspace = kvzalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
@@ -1333,8 +1328,16 @@ static int deflate_decompress(char *src, size_t slen, char *dst, size_t dlen)
		zlib_inflateEnd(&strm);
fail_inflate_init:
		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,
			    loff_t *ppos)
+7 −1
Original line number Diff line number Diff line
@@ -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 @@ static int deflate_compress(const char *src, size_t slen, char **dst,
fail_deflate:
	kvfree(stgbuf);
	goto fail_stg_alloc;
#else
	*dlen = slen;
	return 0;
#endif
}

static int compress_loaddata(struct aa_loaddata *data)
@@ -1145,6 +1150,7 @@ static int compress_loaddata(struct aa_loaddata *data)
		if (error)
			return error;

		if (udata != data->data)
			kvfree(udata);
	} else
		data->compressed_size = data->size;