]> git.hungrycats.org Git - linux/commitdiff
samples/landlock: Fix incorrect free in populate_ruleset_net
authorIvanov Mikhail <ivanov.mikhail1@huawei-partners.com>
Tue, 26 Mar 2024 09:56:25 +0000 (17:56 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 May 2024 07:49:49 +0000 (09:49 +0200)
[ Upstream commit 42212936d9d811c7cf6efc4804747a6c417aafd4 ]

Pointer env_port_name changes after strsep(). Memory allocated via
strdup() will not be freed if landlock_add_rule() returns non-zero value.

Fixes: 5e990dcef12e ("samples/landlock: Support TCP restrictions")
Signed-off-by: Ivanov Mikhail <ivanov.mikhail1@huawei-partners.com>
Reviewed-by: Konstantin Meskhidze <konstantin.meskhidze@huawei.com>
Link: https://lore.kernel.org/r/20240326095625.3576164-1-ivanov.mikhail1@huawei-partners.com
Signed-off-by: Mickaël Salaün <mic@digikod.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
samples/landlock/sandboxer.c

index 08596c0ef0707c3cb478a4c3c24540020c9848f6..e6c59f688573a8e38f985cddad426f8905548670 100644 (file)
@@ -151,7 +151,7 @@ static int populate_ruleset_net(const char *const env_var, const int ruleset_fd,
                                const __u64 allowed_access)
 {
        int ret = 1;
-       char *env_port_name, *strport;
+       char *env_port_name, *env_port_name_next, *strport;
        struct landlock_net_port_attr net_port = {
                .allowed_access = allowed_access,
                .port = 0,
@@ -163,7 +163,8 @@ static int populate_ruleset_net(const char *const env_var, const int ruleset_fd,
        env_port_name = strdup(env_port_name);
        unsetenv(env_var);
 
-       while ((strport = strsep(&env_port_name, ENV_DELIMITER))) {
+       env_port_name_next = env_port_name;
+       while ((strport = strsep(&env_port_name_next, ENV_DELIMITER))) {
                net_port.port = atoi(strport);
                if (landlock_add_rule(ruleset_fd, LANDLOCK_RULE_NET_PORT,
                                      &net_port, 0)) {