observed memory leak in wpa_supplicant

Naveen Singh naveensingh0977 at gmail.com
Tue Feb 9 17:28:59 PST 2016


On Wed, Feb 3, 2016 at 10:13 PM, Naveen Singh <naveensingh0977 at gmail.com> wrote:
> On Wed, Feb 3, 2016 at 4:20 AM, Jouni Malinen <j at w1.fi> wrote:
>> On Wed, Jan 27, 2016 at 10:06:32PM -0800, Naveen Singh wrote:
>>> We have been running some stress test of sending a deauth with reason
>>> code 6 and 7 from an AP to an associated client and monitoring the
>>> memory usage of wpa_supplicant. In our setup wpa_supplicant talks to
>>> connman over dbus. Running this stress test reveals memory leak in wpa
>>> supplicant (memory usage of wpa supplicant keeps on growing).
>>
>> Have you checked that this is actually a real memory leak? For example,
>> run wpa_supplicant under valgrind and see whether such memory gets freed
>> when the process exits.
>
> Yes I ran valgrind. Valgrind reported this memory as still reachable
> as it is lying in list. It is ideally not a leak because all the
> pointers point to same network,
>>
>>> For connection after getting disconnected connman does "AddNetwork"
>>> DBUS call to the previously connected SSID. This ends up causing
>>> memory to be allocated for struct wpa_ssid (os_zalloc called). At this
>>> time there is already a structure allocated for same SSID as a result
>>> of previous connection. Every connection ends up creating a memory
>>> which is never freed.
>>
>> Are you sure it is not freed when wpa_supplicant process terminates? All
>> the added network blocks should be freed at that point in time..
> When supplicant terminates or is restarted it reclaims all the memory.
>>
>>> This surely causes memory usage of wpa_supplicant to go up. Should not
>>> we be allocating memory only if that profile (for that SSID does not
>>> exist?)
>>
>> Memory is allocated only if a new profile is added. There can be
>> multiple profiles for a single SSID.
> I guess that is intent but surely that is not happening. We are
> allocating memory for same profile (same SSID and security)
>>
>>> I am talking about this function:
>>> struct wpa_ssid * wpa_config_add_network(struct wpa_config *config)
>>
>> This needs to add a new network profile and allocate memory for it.
>>
>> If you do not want more memory to be used, it is responsibility of the
>> program managing wpa_supplicant (either through the control interface or
>> through D-Bus) to re-use existing network profiles or remove profiles
>> they have added.
> I guess that is the solution. I am working on a patch to remove the
> network once it is not needed. It is slightly tricky to do so because
> we just do not want to remove the network when wpa_supplicant is
> trying to connect to same network.
>>
>> --
>> Jouni Malinen                                            PGP id EFC895FA



More information about the Hostap mailing list