mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
rpc: Fix potentially segfaults
We have to allocate first and if, and only if, it was successful we can set the count. A segfault has occurred in virNetServerServiceNewPostExecRestart() when VIR_ALLOC_N(svc->socks, n) has failed, but svc->nsocsk = n was already set. Thus virObejectUnref(svc) was called and therefore it was possible that virNetServerServiceDispose was called => segmentation fault. For safeness NULL pointer check were added in virNetServerServiceDispose(). Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
This commit is contained in:
parent
5620c60959
commit
d6bc7622f0
@ -228,9 +228,9 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
|
|||||||
svc->tls = virObjectRef(tls);
|
svc->tls = virObjectRef(tls);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
svc->nsocks = 1;
|
if (VIR_ALLOC_N(svc->socks, 1) < 0)
|
||||||
if (VIR_ALLOC_N(svc->socks, svc->nsocks) < 0)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
svc->nsocks = 1;
|
||||||
|
|
||||||
if (virNetSocketNewListenUNIX(path,
|
if (virNetSocketNewListenUNIX(path,
|
||||||
mask,
|
mask,
|
||||||
@ -289,9 +289,9 @@ virNetServerServicePtr virNetServerServiceNewFD(int fd,
|
|||||||
svc->tls = virObjectRef(tls);
|
svc->tls = virObjectRef(tls);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
svc->nsocks = 1;
|
if (VIR_ALLOC_N(svc->socks, 1) < 0)
|
||||||
if (VIR_ALLOC_N(svc->socks, svc->nsocks) < 0)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
svc->nsocks = 1;
|
||||||
|
|
||||||
if (virNetSocketNewListenFD(fd,
|
if (virNetSocketNewListenFD(fd,
|
||||||
&svc->socks[0]) < 0)
|
&svc->socks[0]) < 0)
|
||||||
@ -367,9 +367,9 @@ virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValuePtr obj
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
svc->nsocks = n;
|
if (VIR_ALLOC_N(svc->socks, n) < 0)
|
||||||
if (VIR_ALLOC_N(svc->socks, svc->nsocks) < 0)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
svc->nsocks = n;
|
||||||
|
|
||||||
for (i = 0; i < svc->nsocks; i++) {
|
for (i = 0; i < svc->nsocks; i++) {
|
||||||
virJSONValuePtr child = virJSONValueArrayGet(socks, i);
|
virJSONValuePtr child = virJSONValueArrayGet(socks, i);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user