mirror of
https://github.com/systemd/systemd.git
synced 2025-03-08 08:58:27 +03:00
userdb: fix a memory leak
[ 49.275617] testsuite-46.sh[1862]: ================================================================= [ 49.275870] testsuite-46.sh[1862]: ==1862==ERROR: LeakSanitizer: detected memory leaks [ 49.276039] testsuite-46.sh[1862]: Direct leak of 103 byte(s) in 14 object(s) allocated from: [ 49.276515] testsuite-46.sh[1862]: #0 0x7f4dbc07243b in strdup (/lib64/libasan.so.8+0x7243b) [ 49.276707] testsuite-46.sh[1862]: #1 0x7f4dbb3900d5 in free_and_strdup ../src/basic/string-util.c:952 [ 49.276931] testsuite-46.sh[1862]: #2 0x7f4dbb15c67d in json_dispatch_user_group_name ../src/shared/json.c:4699 [ 49.277134] testsuite-46.sh[1862]: #3 0x7f4dbb16da9b in json_dispatch ../src/shared/json.c:4395 [ 49.277352] testsuite-46.sh[1862]: #4 0x7f4dbb25b28e in userdb_on_query_reply ../src/shared/userdb.c:305 [ 49.277603] testsuite-46.sh[1862]: #5 0x7f4dbb2748b9 in varlink_dispatch_reply ../src/shared/varlink.c:760 [ 49.277766] testsuite-46.sh[1862]: #6 0x7f4dbb2748b9 in varlink_process ../src/shared/varlink.c:951 [ 49.277975] testsuite-46.sh[1862]: #7 0x7f4dbb27a001 in defer_callback ../src/shared/varlink.c:1897 [ 49.278197] testsuite-46.sh[1862]: #8 0x7f4dbb5d57dd in source_dispatch ../src/libsystemd/sd-event/sd-event.c:4191 [ 49.278421] testsuite-46.sh[1862]: #9 0x7f4dbb5d685d in sd_event_dispatch ../src/libsystemd/sd-event/sd-event.c:4780 [ 49.278675] testsuite-46.sh[1862]: #10 0x7f4dbb5d70bf in sd_event_run ../src/libsystemd/sd-event/sd-event.c:4841 [ 49.278873] testsuite-46.sh[1862]: #11 0x7f4dbb257e7c in userdb_process ../src/shared/userdb.c:591 [ 49.279048] testsuite-46.sh[1862]: #12 0x7f4dbb25f78f in membershipdb_iterator_get ../src/shared/userdb.c:1411 [ 49.279280] testsuite-46.sh[1862]: #13 0x7f4dbb23a98c in user_record_show ../src/shared/user-record-show.c:187 [ 49.279504] testsuite-46.sh[1862]: #14 0x404ae3 in show_user ../src/userdb/userdbctl.c:93 [ 49.279710] testsuite-46.sh[1862]: #15 0x40b4f5 in display_user ../src/userdb/userdbctl.c:418 [ 49.279961] testsuite-46.sh[1862]: #16 0x7f4dbb2804d2 in dispatch_verb ../src/shared/verbs.c:110 [ 49.280233] testsuite-46.sh[1862]: #17 0x40dcf3 in run ../src/userdb/userdbctl.c:1327 [ 49.280434] testsuite-46.sh[1862]: #18 0x40dcf3 in main ../src/userdb/userdbctl.c:1330 [ 49.280657] testsuite-46.sh[1862]: #19 0x7f4db9e4a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f) [ 49.280907] testsuite-46.sh[1862]: SUMMARY: AddressSanitizer: 103 byte(s) leaked in 14 allocation(s).
This commit is contained in:
parent
98fa6c7210
commit
d31706384d
@ -146,6 +146,16 @@ static void user_group_data_release(struct user_group_data *d) {
|
||||
json_variant_unref(d->record);
|
||||
}
|
||||
|
||||
struct membership_data {
|
||||
char *user_name;
|
||||
char *group_name;
|
||||
};
|
||||
|
||||
static void membership_data_done(struct membership_data *d) {
|
||||
free(d->user_name);
|
||||
free(d->group_name);
|
||||
}
|
||||
|
||||
static int userdb_on_query_reply(
|
||||
Varlink *link,
|
||||
JsonVariant *parameters,
|
||||
@ -288,10 +298,7 @@ static int userdb_on_query_reply(
|
||||
}
|
||||
|
||||
case LOOKUP_MEMBERSHIP: {
|
||||
struct membership_data {
|
||||
const char *user_name;
|
||||
const char *group_name;
|
||||
} membership_data = {};
|
||||
_cleanup_(membership_data_done) struct membership_data membership_data = {};
|
||||
|
||||
static const JsonDispatch dispatch_table[] = {
|
||||
{ "userName", JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(struct membership_data, user_name), JSON_RELAX },
|
||||
@ -306,21 +313,8 @@ static int userdb_on_query_reply(
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
iterator->found_user_name = mfree(iterator->found_user_name);
|
||||
iterator->found_group_name = mfree(iterator->found_group_name);
|
||||
|
||||
iterator->found_user_name = strdup(membership_data.user_name);
|
||||
if (!iterator->found_user_name) {
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
iterator->found_group_name = strdup(membership_data.group_name);
|
||||
if (!iterator->found_group_name) {
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
iterator->found_user_name = TAKE_PTR(membership_data.user_name);
|
||||
iterator->found_group_name = TAKE_PTR(membership_data.group_name);
|
||||
iterator->n_found++;
|
||||
|
||||
if (FLAGS_SET(flags, VARLINK_REPLY_CONTINUES))
|
||||
|
Loading…
x
Reference in New Issue
Block a user