[libvirt] [PATCH 3/3] virISCSIGetSession: Don't leak memory
Michal Privoznik
mprivozn at redhat.com
Thu Apr 6 05:21:52 UTC 2017
On 04/05/2017 10:34 PM, John Ferlan wrote:
>
>
> On 04/05/2017 04:16 PM, Martin Kletzander wrote:
>> On Wed, Apr 05, 2017 at 03:11:52PM -0400, John Ferlan wrote:
>>>
>>>
>>> On 04/05/2017 04:50 AM, Michal Privoznik wrote:
>>>> This function runs an iscsi command and parses its output.
>>>> However, due to the nature of things, virISCSIExtractSession()
>>>> callback can be called multiple times. In each run it would
>>>> allocate new memory and overwrite the variable where we keep
>>>> pointer to it and thus leaking old allocations.
>>>>
>>>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>>>> ---
>>>> src/util/viriscsi.c | 3 ++-
>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/util/viriscsi.c b/src/util/viriscsi.c
>>>> index 504ffbd..9c6fde0 100644
>>>> --- a/src/util/viriscsi.c
>>>> +++ b/src/util/viriscsi.c
>>>> @@ -52,7 +52,8 @@ virISCSIExtractSession(char **const groups,
>>>> {
>>>> struct virISCSISessionData *data = opaque;
>>>>
>>>> - if (STREQ(groups[1], data->devpath))
>>>> + if (!data->devpath &&
>>>> + STREQ(groups[1], data->devpath))
>>>> return VIR_STRDUP(data->session, groups[0]);
>>>> return 0;
>>>> }
>>>>
>>>
>>> I see you fixed your typo "!data->devpath" to "!data->session" before
>>
>> I wonder how I missed that, maybe because this wasn't the first time I
>> saw the patch O:-)
>>
>>> pushing, but the reality is this is a no-op considering at most we can
>>> only match once, but because virCommandRunRegex only bails if the return
>>
>> It is not no-op. The function is ran on every line of output and, as
>> we've noticed on Michal's machine, he got 2 lines with the same
>> group[1], so to speak.
>>
>
> So what's the output from a "iscsiadm --mode session" on Michal's
> machine? And then if there is a duplicate - how did it happen?
# iscsiadm --mode session
tcp: [31] 10.34.126.253:3260,1 iqn.2017-03.com.mprivozn:server
tcp: [32] virt-iscsi-server.usersys.redhat.com:3260,1 iqn.2017-03.com.mprivozn:server
where the URL from "line" [32] resolves to the IP from "line" [31].
Michal
More information about the libvir-list
mailing list