提交 e2d846ac 编写于 作者: B Bernard Zhao 提交者: Zheng Zengkai

selinux: fix potential memleak in selinux_add_opt()

stable inclusion
from stable-v5.10.94
commit b2b1b490bd2983c84566c94b4bf3b0e4279f3ea7
bugzilla: https://gitee.com/openeuler/kernel/issues/I531X9

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=b2b1b490bd2983c84566c94b4bf3b0e4279f3ea7

--------------------------------

[ Upstream commit 2e08df3c ]

This patch try to fix potential memleak in error branch.

Fixes: ba641862 ("selinux: new helper - selinux_add_opt()")
Signed-off-by: NBernard Zhao <bernard@vivo.com>
[PM: tweak the subject line, add Fixes tag]
Signed-off-by: NPaul Moore <paul@paul-moore.com>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
Acked-by: NXie XiuQi <xiexiuqi@huawei.com>
上级 3e906c6c
......@@ -947,18 +947,22 @@ static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
static int selinux_add_opt(int token, const char *s, void **mnt_opts)
{
struct selinux_mnt_opts *opts = *mnt_opts;
bool is_alloc_opts = false;
if (token == Opt_seclabel) /* eaten and completely ignored */
return 0;
if (!s)
return -ENOMEM;
if (!opts) {
opts = kzalloc(sizeof(struct selinux_mnt_opts), GFP_KERNEL);
if (!opts)
return -ENOMEM;
*mnt_opts = opts;
is_alloc_opts = true;
}
if (!s)
return -ENOMEM;
switch (token) {
case Opt_context:
if (opts->context || opts->defcontext)
......@@ -983,6 +987,10 @@ static int selinux_add_opt(int token, const char *s, void **mnt_opts)
}
return 0;
Einval:
if (is_alloc_opts) {
kfree(opts);
*mnt_opts = NULL;
}
pr_warn(SEL_MOUNT_FAIL_MSG);
return -EINVAL;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册