1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-28 20:25:25 +03:00

networkd: plug some memleaks in rule serialization/deserialization

This fixes the (mostly theoretical, since we're only parsing data that we write
ourselves) memleak when iif or oif is deserialized multiple times. Unfortunately
it does not fix the memleak when rule is freed, but that'll require a bigger
effort.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2017-11-27 12:01:41 +00:00
parent 9491f55f74
commit 93f9da6e0a
2 changed files with 7 additions and 4 deletions

View File

@ -1017,13 +1017,12 @@ int routing_policy_load_rules(const char *state_file, Set **rules) {
}
} else if (streq(a, "iif")) {
rule->iif = strdup(b);
if (!rule->iif)
if (free_and_strdup(&rule->iif, b) < 0)
return log_oom();
} else if (streq(a, "oif")) {
rule->oif = strdup(b);
if (!rule->oif)
if (free_and_strdup(&rule->oif, b) < 0)
return log_oom();
}
}

View File

@ -96,5 +96,9 @@ int main(int argc, char **argv) {
test_rule_serialization("outgoing interface",
"RULE=from=1::2/64 to=2::3/64 oif=eth0 table=1", NULL);
test_rule_serialization("freeing interface names",
"RULE=from=1::2/64 to=2::3/64 iif=e0 iif=e1 oif=e0 oif=e1 table=1",
"RULE=from=1::2/64 to=2::3/64 iif=e1 oif=e1 table=1");
return 0;
}