57 lines
2.4 KiB
Diff
57 lines
2.4 KiB
Diff
From e40c3001ab4ec57c78b0a0093c165cf850f5540a Mon Sep 17 00:00:00 2001
|
|
From: Evgeny Vereshchagin <evvers@ya.ru>
|
|
Date: Tue, 24 Jan 2017 05:12:58 +0300
|
|
Subject: [PATCH] sd-network: fix memleak in dhcp6_lease_set_domains (#5113)
|
|
|
|
The simplest way to reproduce:
|
|
```diff
|
|
diff --git a/src/libsystemd-network/test-dhcp6-client.c b/src/libsystemd-network/test-dhcp6-client.c
|
|
index bd289fa..4e14d8f 100644
|
|
--- a/src/libsystemd-network/test-dhcp6-client.c
|
|
+++ b/src/libsystemd-network/test-dhcp6-client.c
|
|
@@ -286,6 +286,8 @@ static int test_advertise_option(sd_event *e) {
|
|
assert_se(optlen == 11);
|
|
assert_se(dhcp6_lease_set_domains(lease, optval,
|
|
optlen) >= 0);
|
|
+ assert_se(dhcp6_lease_set_domains(lease, optval,
|
|
+ optlen) >= 0);
|
|
break;
|
|
|
|
case SD_DHCP6_OPTION_SNTP_SERVERS:
|
|
```
|
|
|
|
Fixes:
|
|
```
|
|
==27369==ERROR: LeakSanitizer: detected memory leaks
|
|
|
|
Direct leak of 10 byte(s) in 1 object(s) allocated from:
|
|
#0 0x7f90e7d21160 in strdup (/lib64/libasan.so.3+0x5a160)
|
|
#1 0x7f90e7467f69 in strv_extend src/basic/strv.c:552
|
|
#2 0x5612fcc19379 in dhcp6_option_parse_domainname src/libsystemd-network/dhcp6-option.c:399
|
|
#3 0x5612fcc1acdf in dhcp6_lease_set_domains src/libsystemd-network/sd-dhcp6-lease.c:225
|
|
#4 0x5612fcc06b95 in test_advertise_option src/libsystemd-network/test-dhcp6-client.c:287
|
|
#5 0x5612fcc0a987 in main src/libsystemd-network/test-dhcp6-client.c:761
|
|
#6 0x7f90e6d46400 in __libc_start_main (/lib64/libc.so.6+0x20400)
|
|
|
|
SUMMARY: AddressSanitizer: 10 byte(s) leaked in 1 allocation(s).
|
|
```
|
|
|
|
(cherry picked from commit 0b75a95ace6e1d82772f6b5f1809f4839b810628)
|
|
---
|
|
src/libsystemd-network/sd-dhcp6-lease.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/libsystemd-network/sd-dhcp6-lease.c b/src/libsystemd-network/sd-dhcp6-lease.c
|
|
index 5c10a6326a..681384b3ff 100644
|
|
--- a/src/libsystemd-network/sd-dhcp6-lease.c
|
|
+++ b/src/libsystemd-network/sd-dhcp6-lease.c
|
|
@@ -226,7 +226,7 @@ int dhcp6_lease_set_domains(sd_dhcp6_lease *lease, uint8_t *optval,
|
|
if (r < 0)
|
|
return 0;
|
|
|
|
- free(lease->domains);
|
|
+ strv_free(lease->domains);
|
|
lease->domains = domains;
|
|
lease->domains_count = r;
|
|
|