1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-18 10:35:55 +00:00

Fix memory leak possible in error case.

Use free_rule() instead of free(), it will also release memory allocated
for rule counters.

Obtained from:	Yandex LLC
Sponsored by:	Yandex LLC
This commit is contained in:
Andrey V. Elsukov 2016-05-11 10:04:32 +00:00
parent 377b6d1e7c
commit 9f2e5ed3cc
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=299420

View File

@ -2751,7 +2751,7 @@ add_rules(struct ip_fw_chain *chain, ip_fw3_opheader *op3,
if ((error = commit_rules(chain, cbuf, rtlv->count)) != 0) {
/* Free allocate krules */
for (i = 0, ci = cbuf; i < rtlv->count; i++, ci++)
free(ci->krule, M_IPFW);
free_rule(ci->krule);
}
if (cbuf != NULL && cbuf != &rci)
@ -3574,7 +3574,9 @@ ipfw_ctl(struct sockopt *sopt)
ci.krule = krule;
import_rule0(&ci);
error = commit_rules(chain, &ci, 1);
if (!error && sopt->sopt_dir == SOPT_GET) {
if (error != 0)
free_rule(ci.krule);
else if (sopt->sopt_dir == SOPT_GET) {
if (is7) {
error = convert_rule_to_7(rule);
size = RULESIZE7(rule);