[libvirt] [PATCHv2] waitpid: improve safety

Eric Blake eblake at redhat.com
Mon Oct 24 22:01:36 UTC 2011


On 10/24/2011 01:58 AM, Daniel P. Berrange wrote:
> On Fri, Oct 21, 2011 at 02:30:28PM -0600, Eric Blake wrote:
>> Based on a report by Coverity.  waitpid() can leak resources if it
>> fails with EINTR, so it should never be used without checking return
>> status.  But we already have a helper function that does that, so
>> use it in more places.
>>

>> +++ b/src/lxc/lxc_controller.c
>> @@ -59,6 +59,7 @@
>>   #include "util.h"
>>   #include "virfile.h"
>>   #include "virpidfile.h"
>> +#include "command.h"
>>
>>   #define VIR_FROM_THIS VIR_FROM_LXC
>>
>> @@ -515,7 +516,8 @@ ignorable_epoll_accept_errno(int errnum)
>>   static bool
>>   lxcPidGone(pid_t container)
>>   {
>> -    waitpid(container, NULL, WNOHANG);
>> +    if (waitpid(container, NULL, WNOHANG)<  0)
>> +        return false;
>>
>>       if (kill(container, 0)<  0&&
>>           errno == ESRCH)
>> @@ -1021,14 +1023,8 @@ cleanup:
>>           VIR_FORCE_CLOSE(loopDevs[i]);
>>       VIR_FREE(loopDevs);
>>
>> -    if (container>  1) {
>> -        int status;
>> -        kill(container, SIGTERM);
>> -        if (!(waitpid(container,&status, WNOHANG) == 0&&
>> -            WIFEXITED(status)))
>> -            kill(container, SIGKILL);
>> -        waitpid(container, NULL, 0);
>> -    }
>> +    virPidAbort(container);
>> +
>>       return rc;
>>   }
>>
>
> This entire method goes away on my patches here
>
> https://www.redhat.com/archives/libvir-list/2011-October/msg00974.html

I guess I'd better review that, then :)

>
> ACK to the other chunks

OK, I split out the lxc_controller fixes (I'm saving them on my tree, 
though, until I know that your patches are in), and pushed the rest.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list