CVE-2011-1486 Make error reporting in libvirtd thread safe
Closes: #623222
Guido Günther
12 years ago
0 | From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org> | |
1 | Date: Tue, 12 Jul 2011 22:46:37 +0200 | |
2 | Subject: Make error reporting in libvirtd thread safe | |
3 | ||
4 | Origin: upstream, http://libvirt.org/git/?p=libvirt.git;a=commit;h=f44bfb7fb978c9313ce050a1c4149bf04aa0a670 | |
5 | ||
6 | CVE: 2011-1486 | |
7 | Closes: #623222 | |
8 | ||
9 | --- | |
10 | daemon/dispatch.c | 8 +-- | |
11 | daemon/remote.c | 216 +++++++++++++++++++++++++++------------------------- | |
12 | 2 files changed, 114 insertions(+), 110 deletions(-) | |
13 | ||
14 | diff --git a/daemon/dispatch.c b/daemon/dispatch.c | |
15 | index 3028298..6262fa5 100644 | |
16 | --- a/daemon/dispatch.c | |
17 | +++ b/daemon/dispatch.c | |
18 | @@ -113,14 +113,10 @@ void remoteDispatchOOMError (remote_error *rerr) | |
19 | ||
20 | ||
21 | void remoteDispatchConnError (remote_error *rerr, | |
22 | - virConnectPtr conn) | |
23 | + virConnectPtr conn ATTRIBUTE_UNUSED) | |
24 | { | |
25 | - virErrorPtr verr; | |
26 | + virErrorPtr verr = virGetLastError(); | |
27 | ||
28 | - if (conn) | |
29 | - verr = virConnGetLastError(conn); | |
30 | - else | |
31 | - verr = virGetLastError(); | |
32 | if (verr) | |
33 | remoteDispatchCopyError(rerr, verr); | |
34 | else | |
35 | diff --git a/daemon/remote.c b/daemon/remote.c | |
36 | index 118654c..a8258ca 100644 | |
37 | --- a/daemon/remote.c | |
38 | +++ b/daemon/remote.c | |
39 | @@ -732,8 +732,8 @@ remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUS | |
40 | ||
41 | type = virDomainGetSchedulerType (dom, &nparams); | |
42 | if (type == NULL) { | |
43 | - virDomainFree(dom); | |
44 | remoteDispatchConnError(rerr, conn); | |
45 | + virDomainFree(dom); | |
46 | return -1; | |
47 | } | |
48 | ||
49 | @@ -776,9 +776,9 @@ remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUT | |
50 | ||
51 | r = virDomainGetSchedulerParameters (dom, params, &nparams); | |
52 | if (r == -1) { | |
53 | + remoteDispatchConnError(rerr, conn); | |
54 | virDomainFree(dom); | |
55 | VIR_FREE(params); | |
56 | - remoteDispatchConnError(rerr, conn); | |
57 | return -1; | |
58 | } | |
59 | ||
60 | @@ -883,12 +883,13 @@ remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUT | |
61 | } | |
62 | ||
63 | r = virDomainSetSchedulerParameters (dom, params, nparams); | |
64 | - virDomainFree(dom); | |
65 | VIR_FREE(params); | |
66 | if (r == -1) { | |
67 | remoteDispatchConnError(rerr, conn); | |
68 | + virDomainFree(dom); | |
69 | return -1; | |
70 | } | |
71 | + virDomainFree(dom); | |
72 | ||
73 | return 0; | |
74 | } | |
75 | @@ -914,8 +915,8 @@ remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED, | |
76 | path = args->path; | |
77 | ||
78 | if (virDomainBlockStats (dom, path, &stats, sizeof stats) == -1) { | |
79 | - virDomainFree (dom); | |
80 | remoteDispatchConnError(rerr, conn); | |
81 | + virDomainFree (dom); | |
82 | return -1; | |
83 | } | |
84 | virDomainFree (dom); | |
85 | @@ -950,8 +951,8 @@ remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED | |
86 | path = args->path; | |
87 | ||
88 | if (virDomainInterfaceStats (dom, path, &stats, sizeof stats) == -1) { | |
89 | - virDomainFree (dom); | |
90 | remoteDispatchConnError(rerr, conn); | |
91 | + virDomainFree (dom); | |
92 | return -1; | |
93 | } | |
94 | virDomainFree (dom); | |
95 | @@ -1001,12 +1002,13 @@ remoteDispatchDomainMemoryStats (struct qemud_server *server ATTRIBUTE_UNUSED, | |
96 | } | |
97 | ||
98 | nr_stats = virDomainMemoryStats (dom, stats, args->maxStats, 0); | |
99 | - virDomainFree (dom); | |
100 | if (nr_stats == -1) { | |
101 | VIR_FREE(stats); | |
102 | remoteDispatchConnError(rerr, conn); | |
103 | + virDomainFree (dom); | |
104 | return -1; | |
105 | } | |
106 | + virDomainFree (dom); | |
107 | ||
108 | /* Allocate return buffer */ | |
109 | if (VIR_ALLOC_N(ret->stats.stats_val, args->maxStats) < 0) { | |
110 | @@ -1067,8 +1069,8 @@ remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED, | |
111 | if (virDomainBlockPeek (dom, path, offset, size, | |
112 | ret->buffer.buffer_val, flags) == -1) { | |
113 | /* free (ret->buffer.buffer_val); - caller frees */ | |
114 | - virDomainFree (dom); | |
115 | remoteDispatchConnError(rerr, conn); | |
116 | + virDomainFree (dom); | |
117 | return -1; | |
118 | } | |
119 | virDomainFree (dom); | |
120 | @@ -1116,8 +1118,8 @@ remoteDispatchDomainMemoryPeek (struct qemud_server *server ATTRIBUTE_UNUSED, | |
121 | if (virDomainMemoryPeek (dom, offset, size, | |
122 | ret->buffer.buffer_val, flags) == -1) { | |
123 | /* free (ret->buffer.buffer_val); - caller frees */ | |
124 | - virDomainFree (dom); | |
125 | remoteDispatchConnError(rerr, conn); | |
126 | + virDomainFree (dom); | |
127 | return -1; | |
128 | } | |
129 | virDomainFree (dom); | |
130 | @@ -1143,8 +1145,8 @@ remoteDispatchDomainAttachDevice (struct qemud_server *server ATTRIBUTE_UNUSED, | |
131 | } | |
132 | ||
133 | if (virDomainAttachDevice (dom, args->xml) == -1) { | |
134 | - virDomainFree(dom); | |
135 | remoteDispatchConnError(rerr, conn); | |
136 | + virDomainFree(dom); | |
137 | return -1; | |
138 | } | |
139 | virDomainFree(dom); | |
140 | @@ -1169,8 +1171,8 @@ remoteDispatchDomainAttachDeviceFlags (struct qemud_server *server ATTRIBUTE_UNU | |
141 | } | |
142 | ||
143 | if (virDomainAttachDeviceFlags (dom, args->xml, args->flags) == -1) { | |
144 | - virDomainFree(dom); | |
145 | remoteDispatchConnError(rerr, conn); | |
146 | + virDomainFree(dom); | |
147 | return -1; | |
148 | } | |
149 | virDomainFree(dom); | |
150 | @@ -1195,8 +1197,8 @@ remoteDispatchDomainUpdateDeviceFlags (struct qemud_server *server ATTRIBUTE_UNU | |
151 | } | |
152 | ||
153 | if (virDomainUpdateDeviceFlags (dom, args->xml, args->flags) == -1) { | |
154 | - virDomainFree(dom); | |
155 | remoteDispatchConnError(rerr, conn); | |
156 | + virDomainFree(dom); | |
157 | return -1; | |
158 | } | |
159 | virDomainFree(dom); | |
160 | @@ -1221,8 +1223,8 @@ remoteDispatchDomainCreate (struct qemud_server *server ATTRIBUTE_UNUSED, | |
161 | } | |
162 | ||
163 | if (virDomainCreate (dom) == -1) { | |
164 | - virDomainFree(dom); | |
165 | remoteDispatchConnError(rerr, conn); | |
166 | + virDomainFree(dom); | |
167 | return -1; | |
168 | } | |
169 | virDomainFree(dom); | |
170 | @@ -1247,8 +1249,8 @@ remoteDispatchDomainCreateWithFlags (struct qemud_server *server ATTRIBUTE_UNUSE | |
171 | } | |
172 | ||
173 | if (virDomainCreateWithFlags (dom, args->flags) == -1) { | |
174 | - virDomainFree(dom); | |
175 | remoteDispatchConnError(rerr, conn); | |
176 | + virDomainFree(dom); | |
177 | return -1; | |
178 | } | |
179 | ||
180 | @@ -1321,8 +1323,8 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, | |
181 | } | |
182 | ||
183 | if (virDomainDestroy (dom) == -1) { | |
184 | - virDomainFree(dom); | |
185 | remoteDispatchConnError(rerr, conn); | |
186 | + virDomainFree(dom); | |
187 | return -1; | |
188 | } | |
189 | virDomainFree(dom); | |
190 | @@ -1347,8 +1349,8 @@ remoteDispatchDomainDetachDevice (struct qemud_server *server ATTRIBUTE_UNUSED, | |
191 | } | |
192 | ||
193 | if (virDomainDetachDevice (dom, args->xml) == -1) { | |
194 | - virDomainFree(dom); | |
195 | remoteDispatchConnError(rerr, conn); | |
196 | + virDomainFree(dom); | |
197 | return -1; | |
198 | } | |
199 | ||
200 | @@ -1374,8 +1376,8 @@ remoteDispatchDomainDetachDeviceFlags (struct qemud_server *server ATTRIBUTE_UNU | |
201 | } | |
202 | ||
203 | if (virDomainDetachDeviceFlags (dom, args->xml, args->flags) == -1) { | |
204 | - virDomainFree(dom); | |
205 | remoteDispatchConnError(rerr, conn); | |
206 | + virDomainFree(dom); | |
207 | return -1; | |
208 | } | |
209 | ||
210 | @@ -1403,8 +1405,8 @@ remoteDispatchDomainDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, | |
211 | /* remoteDispatchClientRequest will free this. */ | |
212 | ret->xml = virDomainGetXMLDesc (dom, args->flags); | |
213 | if (!ret->xml) { | |
214 | - virDomainFree(dom); | |
215 | remoteDispatchConnError(rerr, conn); | |
216 | + virDomainFree(dom); | |
217 | return -1; | |
218 | } | |
219 | virDomainFree(dom); | |
220 | @@ -1472,8 +1474,8 @@ remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, | |
221 | } | |
222 | ||
223 | if (virDomainGetAutostart (dom, &ret->autostart) == -1) { | |
224 | - virDomainFree(dom); | |
225 | remoteDispatchConnError(rerr, conn); | |
226 | + virDomainFree(dom); | |
227 | return -1; | |
228 | } | |
229 | virDomainFree(dom); | |
230 | @@ -1499,8 +1501,8 @@ remoteDispatchDomainGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, | |
231 | } | |
232 | ||
233 | if (virDomainGetInfo (dom, &info) == -1) { | |
234 | - virDomainFree(dom); | |
235 | remoteDispatchConnError(rerr, conn); | |
236 | + virDomainFree(dom); | |
237 | return -1; | |
238 | } | |
239 | ||
240 | @@ -1534,8 +1536,8 @@ remoteDispatchDomainGetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED, | |
241 | ||
242 | ret->memory = virDomainGetMaxMemory (dom); | |
243 | if (ret->memory == 0) { | |
244 | - virDomainFree(dom); | |
245 | remoteDispatchConnError(rerr, conn); | |
246 | + virDomainFree(dom); | |
247 | return -1; | |
248 | } | |
249 | virDomainFree(dom); | |
250 | @@ -1561,8 +1563,8 @@ remoteDispatchDomainGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, | |
251 | ||
252 | ret->num = virDomainGetMaxVcpus (dom); | |
253 | if (ret->num == -1) { | |
254 | - virDomainFree(dom); | |
255 | remoteDispatchConnError(rerr, conn); | |
256 | + virDomainFree(dom); | |
257 | return -1; | |
258 | } | |
259 | virDomainFree(dom); | |
260 | @@ -1589,8 +1591,8 @@ remoteDispatchDomainGetSecurityLabel(struct qemud_server *server ATTRIBUTE_UNUSE | |
261 | ||
262 | memset(&seclabel, 0, sizeof seclabel); | |
263 | if (virDomainGetSecurityLabel(dom, &seclabel) == -1) { | |
264 | - virDomainFree(dom); | |
265 | remoteDispatchConnError(rerr, conn); | |
266 | + virDomainFree(dom); | |
267 | return -1; | |
268 | } | |
269 | ||
270 | @@ -1661,8 +1663,8 @@ remoteDispatchDomainGetOsType (struct qemud_server *server ATTRIBUTE_UNUSED, | |
271 | /* remoteDispatchClientRequest will free this */ | |
272 | ret->type = virDomainGetOSType (dom); | |
273 | if (ret->type == NULL) { | |
274 | - virDomainFree(dom); | |
275 | remoteDispatchConnError(rerr, conn); | |
276 | + virDomainFree(dom); | |
277 | return -1; | |
278 | } | |
279 | virDomainFree(dom); | |
280 | @@ -1712,10 +1714,10 @@ remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, | |
281 | info, args->maxinfo, | |
282 | cpumaps, args->maplen); | |
283 | if (info_len == -1) { | |
284 | + remoteDispatchConnError(rerr, conn); | |
285 | VIR_FREE(info); | |
286 | VIR_FREE(cpumaps); | |
287 | virDomainFree(dom); | |
288 | - remoteDispatchConnError(rerr, conn); | |
289 | return -1; | |
290 | } | |
291 | ||
292 | @@ -1825,11 +1827,12 @@ remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED | |
293 | args->cookie.cookie_len, | |
294 | args->uri, | |
295 | args->flags, dname, args->resource); | |
296 | - virDomainFree (dom); | |
297 | if (r == -1) { | |
298 | remoteDispatchConnError(rerr, conn); | |
299 | + virDomainFree (dom); | |
300 | return -1; | |
301 | } | |
302 | + virDomainFree (dom); | |
303 | ||
304 | return 0; | |
305 | } | |
306 | @@ -1961,8 +1964,8 @@ remoteDispatchDomainMigratePrepareTunnel(struct qemud_server *server ATTRIBUTE_U | |
307 | args->flags, dname, args->resource, | |
308 | args->dom_xml); | |
309 | if (r == -1) { | |
310 | - remoteFreeClientStream(client, stream); | |
311 | remoteDispatchConnError(rerr, conn); | |
312 | + remoteFreeClientStream(client, stream); | |
313 | return -1; | |
314 | } | |
315 | ||
316 | @@ -2123,8 +2126,8 @@ remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED, | |
317 | (unsigned char *) args->cpumap.cpumap_val, | |
318 | args->cpumap.cpumap_len); | |
319 | if (rv == -1) { | |
320 | - virDomainFree(dom); | |
321 | remoteDispatchConnError(rerr, conn); | |
322 | + virDomainFree(dom); | |
323 | return -1; | |
324 | } | |
325 | virDomainFree(dom); | |
326 | @@ -2149,8 +2152,8 @@ remoteDispatchDomainReboot (struct qemud_server *server ATTRIBUTE_UNUSED, | |
327 | } | |
328 | ||
329 | if (virDomainReboot (dom, args->flags) == -1) { | |
330 | - virDomainFree(dom); | |
331 | remoteDispatchConnError(rerr, conn); | |
332 | + virDomainFree(dom); | |
333 | return -1; | |
334 | } | |
335 | virDomainFree(dom); | |
336 | @@ -2193,8 +2196,8 @@ remoteDispatchDomainResume (struct qemud_server *server ATTRIBUTE_UNUSED, | |
337 | } | |
338 | ||
339 | if (virDomainResume (dom) == -1) { | |
340 | - virDomainFree(dom); | |
341 | remoteDispatchConnError(rerr, conn); | |
342 | + virDomainFree(dom); | |
343 | return -1; | |
344 | } | |
345 | virDomainFree(dom); | |
346 | @@ -2219,8 +2222,8 @@ remoteDispatchDomainSave (struct qemud_server *server ATTRIBUTE_UNUSED, | |
347 | } | |
348 | ||
349 | if (virDomainSave (dom, args->to) == -1) { | |
350 | - virDomainFree(dom); | |
351 | remoteDispatchConnError(rerr, conn); | |
352 | + virDomainFree(dom); | |
353 | return -1; | |
354 | } | |
355 | virDomainFree(dom); | |
356 | @@ -2245,8 +2248,8 @@ remoteDispatchDomainCoreDump (struct qemud_server *server ATTRIBUTE_UNUSED, | |
357 | } | |
358 | ||
359 | if (virDomainCoreDump (dom, args->to, args->flags) == -1) { | |
360 | - virDomainFree(dom); | |
361 | remoteDispatchConnError(rerr, conn); | |
362 | + virDomainFree(dom); | |
363 | return -1; | |
364 | } | |
365 | virDomainFree(dom); | |
366 | @@ -2271,8 +2274,8 @@ remoteDispatchDomainSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, | |
367 | } | |
368 | ||
369 | if (virDomainSetAutostart (dom, args->autostart) == -1) { | |
370 | - virDomainFree(dom); | |
371 | remoteDispatchConnError(rerr, conn); | |
372 | + virDomainFree(dom); | |
373 | return -1; | |
374 | } | |
375 | virDomainFree(dom); | |
376 | @@ -2297,8 +2300,8 @@ remoteDispatchDomainSetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED, | |
377 | } | |
378 | ||
379 | if (virDomainSetMaxMemory (dom, args->memory) == -1) { | |
380 | - virDomainFree(dom); | |
381 | remoteDispatchConnError(rerr, conn); | |
382 | + virDomainFree(dom); | |
383 | return -1; | |
384 | } | |
385 | virDomainFree(dom); | |
386 | @@ -2323,8 +2326,8 @@ remoteDispatchDomainSetMemory (struct qemud_server *server ATTRIBUTE_UNUSED, | |
387 | } | |
388 | ||
389 | if (virDomainSetMemory (dom, args->memory) == -1) { | |
390 | - virDomainFree(dom); | |
391 | remoteDispatchConnError(rerr, conn); | |
392 | + virDomainFree(dom); | |
393 | return -1; | |
394 | } | |
395 | virDomainFree(dom); | |
396 | @@ -2349,8 +2352,8 @@ remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, | |
397 | } | |
398 | ||
399 | if (virDomainSetVcpus (dom, args->nvcpus) == -1) { | |
400 | - virDomainFree(dom); | |
401 | remoteDispatchConnError(rerr, conn); | |
402 | + virDomainFree(dom); | |
403 | return -1; | |
404 | } | |
405 | virDomainFree(dom); | |
406 | @@ -2375,8 +2378,8 @@ remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED, | |
407 | } | |
408 | ||
409 | if (virDomainShutdown (dom) == -1) { | |
410 | - virDomainFree(dom); | |
411 | remoteDispatchConnError(rerr, conn); | |
412 | + virDomainFree(dom); | |
413 | return -1; | |
414 | } | |
415 | virDomainFree(dom); | |
416 | @@ -2401,8 +2404,8 @@ remoteDispatchDomainSuspend (struct qemud_server *server ATTRIBUTE_UNUSED, | |
417 | } | |
418 | ||
419 | if (virDomainSuspend (dom) == -1) { | |
420 | - virDomainFree(dom); | |
421 | remoteDispatchConnError(rerr, conn); | |
422 | + virDomainFree(dom); | |
423 | return -1; | |
424 | } | |
425 | virDomainFree(dom); | |
426 | @@ -2427,8 +2430,8 @@ remoteDispatchDomainUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, | |
427 | } | |
428 | ||
429 | if (virDomainUndefine (dom) == -1) { | |
430 | - virDomainFree(dom); | |
431 | remoteDispatchConnError(rerr, conn); | |
432 | + virDomainFree(dom); | |
433 | return -1; | |
434 | } | |
435 | virDomainFree(dom); | |
436 | @@ -2520,8 +2523,8 @@ remoteDispatchDomainManagedSave (struct qemud_server *server ATTRIBUTE_UNUSED, | |
437 | } | |
438 | ||
439 | if (virDomainManagedSave (dom, args->flags) == -1) { | |
440 | - virDomainFree(dom); | |
441 | remoteDispatchConnError(rerr, conn); | |
442 | + virDomainFree(dom); | |
443 | return -1; | |
444 | } | |
445 | virDomainFree(dom); | |
446 | @@ -2547,8 +2550,8 @@ remoteDispatchDomainHasManagedSaveImage (struct qemud_server *server ATTRIBUTE_U | |
447 | ||
448 | ret->ret = virDomainHasManagedSaveImage (dom, args->flags); | |
449 | if (ret->ret == -1) { | |
450 | - virDomainFree(dom); | |
451 | remoteDispatchConnError(rerr, conn); | |
452 | + virDomainFree(dom); | |
453 | return -1; | |
454 | } | |
455 | virDomainFree(dom); | |
456 | @@ -2573,8 +2576,8 @@ remoteDispatchDomainManagedSaveRemove (struct qemud_server *server ATTRIBUTE_UNU | |
457 | } | |
458 | ||
459 | if (virDomainManagedSaveRemove (dom, args->flags) == -1) { | |
460 | - virDomainFree(dom); | |
461 | remoteDispatchConnError(rerr, conn); | |
462 | + virDomainFree(dom); | |
463 | return -1; | |
464 | } | |
465 | virDomainFree(dom); | |
466 | @@ -2633,8 +2636,8 @@ remoteDispatchNetworkCreate (struct qemud_server *server ATTRIBUTE_UNUSED, | |
467 | } | |
468 | ||
469 | if (virNetworkCreate (net) == -1) { | |
470 | - virNetworkFree(net); | |
471 | remoteDispatchConnError(rerr, conn); | |
472 | + virNetworkFree(net); | |
473 | return -1; | |
474 | } | |
475 | virNetworkFree(net); | |
476 | @@ -2703,8 +2706,8 @@ remoteDispatchNetworkDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, | |
477 | } | |
478 | ||
479 | if (virNetworkDestroy (net) == -1) { | |
480 | - virNetworkFree(net); | |
481 | remoteDispatchConnError(rerr, conn); | |
482 | + virNetworkFree(net); | |
483 | return -1; | |
484 | } | |
485 | virNetworkFree(net); | |
486 | @@ -2731,8 +2734,8 @@ remoteDispatchNetworkDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, | |
487 | /* remoteDispatchClientRequest will free this. */ | |
488 | ret->xml = virNetworkGetXMLDesc (net, args->flags); | |
489 | if (!ret->xml) { | |
490 | - virNetworkFree(net); | |
491 | remoteDispatchConnError(rerr, conn); | |
492 | + virNetworkFree(net); | |
493 | return -1; | |
494 | } | |
495 | virNetworkFree(net); | |
496 | @@ -2757,8 +2760,8 @@ remoteDispatchNetworkGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, | |
497 | } | |
498 | ||
499 | if (virNetworkGetAutostart (net, &ret->autostart) == -1) { | |
500 | - virNetworkFree(net); | |
501 | remoteDispatchConnError(rerr, conn); | |
502 | + virNetworkFree(net); | |
503 | return -1; | |
504 | } | |
505 | virNetworkFree(net); | |
506 | @@ -2785,8 +2788,8 @@ remoteDispatchNetworkGetBridgeName (struct qemud_server *server ATTRIBUTE_UNUSED | |
507 | /* remoteDispatchClientRequest will free this. */ | |
508 | ret->name = virNetworkGetBridgeName (net); | |
509 | if (!ret->name) { | |
510 | - virNetworkFree(net); | |
511 | remoteDispatchConnError(rerr, conn); | |
512 | + virNetworkFree(net); | |
513 | return -1; | |
514 | } | |
515 | virNetworkFree(net); | |
516 | @@ -2855,8 +2858,8 @@ remoteDispatchNetworkSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, | |
517 | } | |
518 | ||
519 | if (virNetworkSetAutostart (net, args->autostart) == -1) { | |
520 | - virNetworkFree(net); | |
521 | remoteDispatchConnError(rerr, conn); | |
522 | + virNetworkFree(net); | |
523 | return -1; | |
524 | } | |
525 | virNetworkFree(net); | |
526 | @@ -2881,8 +2884,8 @@ remoteDispatchNetworkUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, | |
527 | } | |
528 | ||
529 | if (virNetworkUndefine (net) == -1) { | |
530 | - virNetworkFree(net); | |
531 | remoteDispatchConnError(rerr, conn); | |
532 | + virNetworkFree(net); | |
533 | return -1; | |
534 | } | |
535 | virNetworkFree(net); | |
536 | @@ -3118,8 +3121,8 @@ remoteDispatchInterfaceGetXmlDesc (struct qemud_server *server ATTRIBUTE_UNUSED, | |
537 | /* remoteDispatchClientRequest will free this. */ | |
538 | ret->xml = virInterfaceGetXMLDesc (iface, args->flags); | |
539 | if (!ret->xml) { | |
540 | - virInterfaceFree(iface); | |
541 | remoteDispatchConnError(rerr, conn); | |
542 | + virInterfaceFree(iface); | |
543 | return -1; | |
544 | } | |
545 | virInterfaceFree(iface); | |
546 | @@ -3166,8 +3169,8 @@ remoteDispatchInterfaceUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, | |
547 | } | |
548 | ||
549 | if (virInterfaceUndefine (iface) == -1) { | |
550 | - virInterfaceFree(iface); | |
551 | remoteDispatchConnError(rerr, conn); | |
552 | + virInterfaceFree(iface); | |
553 | return -1; | |
554 | } | |
555 | virInterfaceFree(iface); | |
556 | @@ -3192,8 +3195,8 @@ remoteDispatchInterfaceCreate (struct qemud_server *server ATTRIBUTE_UNUSED, | |
557 | } | |
558 | ||
559 | if (virInterfaceCreate (iface, args->flags) == -1) { | |
560 | - virInterfaceFree(iface); | |
561 | remoteDispatchConnError(rerr, conn); | |
562 | + virInterfaceFree(iface); | |
563 | return -1; | |
564 | } | |
565 | virInterfaceFree(iface); | |
566 | @@ -3218,8 +3221,8 @@ remoteDispatchInterfaceDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, | |
567 | } | |
568 | ||
569 | if (virInterfaceDestroy (iface, args->flags) == -1) { | |
570 | - virInterfaceFree(iface); | |
571 | remoteDispatchConnError(rerr, conn); | |
572 | + virInterfaceFree(iface); | |
573 | return -1; | |
574 | } | |
575 | virInterfaceFree(iface); | |
576 | @@ -4100,8 +4103,8 @@ remoteDispatchStoragePoolCreate (struct qemud_server *server ATTRIBUTE_UNUSED, | |
577 | } | |
578 | ||
579 | if (virStoragePoolCreate (pool, args->flags) == -1) { | |
580 | - virStoragePoolFree(pool); | |
581 | remoteDispatchConnError(rerr, conn); | |
582 | + virStoragePoolFree(pool); | |
583 | return -1; | |
584 | } | |
585 | virStoragePoolFree(pool); | |
586 | @@ -4170,8 +4173,8 @@ remoteDispatchStoragePoolBuild (struct qemud_server *server ATTRIBUTE_UNUSED, | |
587 | } | |
588 | ||
589 | if (virStoragePoolBuild (pool, args->flags) == -1) { | |
590 | - virStoragePoolFree(pool); | |
591 | remoteDispatchConnError(rerr, conn); | |
592 | + virStoragePoolFree(pool); | |
593 | return -1; | |
594 | } | |
595 | virStoragePoolFree(pool); | |
596 | @@ -4197,8 +4200,8 @@ remoteDispatchStoragePoolDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, | |
597 | } | |
598 | ||
599 | if (virStoragePoolDestroy (pool) == -1) { | |
600 | - virStoragePoolFree(pool); | |
601 | remoteDispatchConnError(rerr, conn); | |
602 | + virStoragePoolFree(pool); | |
603 | return -1; | |
604 | } | |
605 | virStoragePoolFree(pool); | |
606 | @@ -4223,8 +4226,8 @@ remoteDispatchStoragePoolDelete (struct qemud_server *server ATTRIBUTE_UNUSED, | |
607 | } | |
608 | ||
609 | if (virStoragePoolDelete (pool, args->flags) == -1) { | |
610 | - virStoragePoolFree(pool); | |
611 | remoteDispatchConnError(rerr, conn); | |
612 | + virStoragePoolFree(pool); | |
613 | return -1; | |
614 | } | |
615 | virStoragePoolFree(pool); | |
616 | @@ -4249,8 +4252,8 @@ remoteDispatchStoragePoolRefresh (struct qemud_server *server ATTRIBUTE_UNUSED, | |
617 | } | |
618 | ||
619 | if (virStoragePoolRefresh (pool, args->flags) == -1) { | |
620 | - virStoragePoolFree(pool); | |
621 | remoteDispatchConnError(rerr, conn); | |
622 | + virStoragePoolFree(pool); | |
623 | return -1; | |
624 | } | |
625 | virStoragePoolFree(pool); | |
626 | @@ -4276,8 +4279,8 @@ remoteDispatchStoragePoolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, | |
627 | } | |
628 | ||
629 | if (virStoragePoolGetInfo (pool, &info) == -1) { | |
630 | - virStoragePoolFree(pool); | |
631 | remoteDispatchConnError(rerr, conn); | |
632 | + virStoragePoolFree(pool); | |
633 | return -1; | |
634 | } | |
635 | ||
636 | @@ -4311,8 +4314,8 @@ remoteDispatchStoragePoolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, | |
637 | /* remoteDispatchClientRequest will free this. */ | |
638 | ret->xml = virStoragePoolGetXMLDesc (pool, args->flags); | |
639 | if (!ret->xml) { | |
640 | - virStoragePoolFree(pool); | |
641 | remoteDispatchConnError(rerr, conn); | |
642 | + virStoragePoolFree(pool); | |
643 | return -1; | |
644 | } | |
645 | virStoragePoolFree(pool); | |
646 | @@ -4337,8 +4340,8 @@ remoteDispatchStoragePoolGetAutostart (struct qemud_server *server ATTRIBUTE_UNU | |
647 | } | |
648 | ||
649 | if (virStoragePoolGetAutostart (pool, &ret->autostart) == -1) { | |
650 | - virStoragePoolFree(pool); | |
651 | remoteDispatchConnError(rerr, conn); | |
652 | + virStoragePoolFree(pool); | |
653 | return -1; | |
654 | } | |
655 | virStoragePoolFree(pool); | |
656 | @@ -4409,11 +4412,12 @@ remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server ATTRIBUTE_U | |
657 | } | |
658 | ||
659 | pool = virStoragePoolLookupByVolume (vol); | |
660 | - virStorageVolFree(vol); | |
661 | if (pool == NULL) { | |
662 | remoteDispatchConnError(rerr, conn); | |
663 | + virStorageVolFree(vol); | |
664 | return -1; | |
665 | } | |
666 | + virStorageVolFree(vol); | |
667 | ||
668 | make_nonnull_storage_pool (&ret->pool, pool); | |
669 | virStoragePoolFree(pool); | |
670 | @@ -4438,8 +4442,8 @@ remoteDispatchStoragePoolSetAutostart (struct qemud_server *server ATTRIBUTE_UNU | |
671 | } | |
672 | ||
673 | if (virStoragePoolSetAutostart (pool, args->autostart) == -1) { | |
674 | - virStoragePoolFree(pool); | |
675 | remoteDispatchConnError(rerr, conn); | |
676 | + virStoragePoolFree(pool); | |
677 | return -1; | |
678 | } | |
679 | virStoragePoolFree(pool); | |
680 | @@ -4464,8 +4468,8 @@ remoteDispatchStoragePoolUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, | |
681 | } | |
682 | ||
683 | if (virStoragePoolUndefine (pool) == -1) { | |
684 | - virStoragePoolFree(pool); | |
685 | remoteDispatchConnError(rerr, conn); | |
686 | + virStoragePoolFree(pool); | |
687 | return -1; | |
688 | } | |
689 | virStoragePoolFree(pool); | |
690 | @@ -4607,11 +4611,12 @@ remoteDispatchStorageVolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED, | |
691 | } | |
692 | ||
693 | vol = virStorageVolCreateXML (pool, args->xml, args->flags); | |
694 | - virStoragePoolFree(pool); | |
695 | if (vol == NULL) { | |
696 | remoteDispatchConnError(rerr, conn); | |
697 | + virStoragePoolFree(pool); | |
698 | return -1; | |
699 | } | |
700 | + virStoragePoolFree(pool); | |
701 | ||
702 | make_nonnull_storage_vol (&ret->vol, vol); | |
703 | virStorageVolFree(vol); | |
704 | @@ -4638,19 +4643,21 @@ remoteDispatchStorageVolCreateXmlFrom (struct qemud_server *server ATTRIBUTE_UNU | |
705 | ||
706 | clonevol = get_nonnull_storage_vol (conn, args->clonevol); | |
707 | if (clonevol == NULL) { | |
708 | - virStoragePoolFree(pool); | |
709 | remoteDispatchConnError(rerr, conn); | |
710 | + virStoragePoolFree(pool); | |
711 | return -1; | |
712 | } | |
713 | ||
714 | newvol = virStorageVolCreateXMLFrom (pool, args->xml, clonevol, | |
715 | args->flags); | |
716 | - virStorageVolFree(clonevol); | |
717 | - virStoragePoolFree(pool); | |
718 | if (newvol == NULL) { | |
719 | remoteDispatchConnError(rerr, conn); | |
720 | + virStorageVolFree(clonevol); | |
721 | + virStoragePoolFree(pool); | |
722 | return -1; | |
723 | } | |
724 | + virStorageVolFree(clonevol); | |
725 | + virStoragePoolFree(pool); | |
726 | ||
727 | make_nonnull_storage_vol (&ret->vol, newvol); | |
728 | virStorageVolFree(newvol); | |
729 | @@ -4675,8 +4682,8 @@ remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED, | |
730 | } | |
731 | ||
732 | if (virStorageVolDelete (vol, args->flags) == -1) { | |
733 | - virStorageVolFree(vol); | |
734 | remoteDispatchConnError(rerr, conn); | |
735 | + virStorageVolFree(vol); | |
736 | return -1; | |
737 | } | |
738 | virStorageVolFree(vol); | |
739 | @@ -4734,8 +4741,8 @@ remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, | |
740 | } | |
741 | ||
742 | if (virStorageVolGetInfo (vol, &info) == -1) { | |
743 | - virStorageVolFree(vol); | |
744 | remoteDispatchConnError(rerr, conn); | |
745 | + virStorageVolFree(vol); | |
746 | return -1; | |
747 | } | |
748 | ||
749 | @@ -4768,8 +4775,8 @@ remoteDispatchStorageVolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, | |
750 | /* remoteDispatchClientRequest will free this. */ | |
751 | ret->xml = virStorageVolGetXMLDesc (vol, args->flags); | |
752 | if (!ret->xml) { | |
753 | - virStorageVolFree(vol); | |
754 | remoteDispatchConnError(rerr, conn); | |
755 | + virStorageVolFree(vol); | |
756 | return -1; | |
757 | } | |
758 | virStorageVolFree(vol); | |
759 | @@ -4797,8 +4804,8 @@ remoteDispatchStorageVolGetPath (struct qemud_server *server ATTRIBUTE_UNUSED, | |
760 | /* remoteDispatchClientRequest will free this. */ | |
761 | ret->name = virStorageVolGetPath (vol); | |
762 | if (!ret->name) { | |
763 | - virStorageVolFree(vol); | |
764 | remoteDispatchConnError(rerr, conn); | |
765 | + virStorageVolFree(vol); | |
766 | return -1; | |
767 | } | |
768 | virStorageVolFree(vol); | |
769 | @@ -4825,11 +4832,12 @@ remoteDispatchStorageVolLookupByName (struct qemud_server *server ATTRIBUTE_UNUS | |
770 | } | |
771 | ||
772 | vol = virStorageVolLookupByName (pool, args->name); | |
773 | - virStoragePoolFree(pool); | |
774 | if (vol == NULL) { | |
775 | remoteDispatchConnError(rerr, conn); | |
776 | + virStoragePoolFree(pool); | |
777 | return -1; | |
778 | } | |
779 | + virStoragePoolFree(pool); | |
780 | ||
781 | make_nonnull_storage_vol (&ret->vol, vol); | |
782 | virStorageVolFree(vol); | |
783 | @@ -5066,8 +5074,8 @@ remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server ATTRIBUTE_UNUSED, | |
784 | ||
785 | ret->num = virNodeDeviceNumOfCaps(dev); | |
786 | if (ret->num < 0) { | |
787 | - virNodeDeviceFree(dev); | |
788 | remoteDispatchConnError(rerr, conn); | |
789 | + virNodeDeviceFree(dev); | |
790 | return -1; | |
791 | } | |
792 | ||
793 | @@ -5112,8 +5120,8 @@ remoteDispatchNodeDeviceListCaps (struct qemud_server *server ATTRIBUTE_UNUSED, | |
794 | virNodeDeviceListCaps (dev, ret->names.names_val, | |
795 | args->maxnames); | |
796 | if (ret->names.names_len == -1) { | |
797 | - virNodeDeviceFree(dev); | |
798 | remoteDispatchConnError(rerr, conn); | |
799 | + virNodeDeviceFree(dev); | |
800 | VIR_FREE(ret->names.names_val); | |
801 | return -1; | |
802 | } | |
803 | @@ -5142,8 +5150,8 @@ remoteDispatchNodeDeviceDettach (struct qemud_server *server ATTRIBUTE_UNUSED, | |
804 | } | |
805 | ||
806 | if (virNodeDeviceDettach(dev) == -1) { | |
807 | - virNodeDeviceFree(dev); | |
808 | remoteDispatchConnError(rerr, conn); | |
809 | + virNodeDeviceFree(dev); | |
810 | return -1; | |
811 | } | |
812 | ||
813 | @@ -5171,8 +5179,8 @@ remoteDispatchNodeDeviceReAttach (struct qemud_server *server ATTRIBUTE_UNUSED, | |
814 | } | |
815 | ||
816 | if (virNodeDeviceReAttach(dev) == -1) { | |
817 | - virNodeDeviceFree(dev); | |
818 | remoteDispatchConnError(rerr, conn); | |
819 | + virNodeDeviceFree(dev); | |
820 | return -1; | |
821 | } | |
822 | ||
823 | @@ -5200,8 +5208,8 @@ remoteDispatchNodeDeviceReset (struct qemud_server *server ATTRIBUTE_UNUSED, | |
824 | } | |
825 | ||
826 | if (virNodeDeviceReset(dev) == -1) { | |
827 | - virNodeDeviceFree(dev); | |
828 | remoteDispatchConnError(rerr, conn); | |
829 | + virNodeDeviceFree(dev); | |
830 | return -1; | |
831 | } | |
832 | ||
833 | @@ -5252,8 +5260,8 @@ remoteDispatchNodeDeviceDestroy(struct qemud_server *server ATTRIBUTE_UNUSED, | |
834 | } | |
835 | ||
836 | if (virNodeDeviceDestroy(dev) == -1) { | |
837 | - virNodeDeviceFree(dev); | |
838 | remoteDispatchConnError(rerr, conn); | |
839 | + virNodeDeviceFree(dev); | |
840 | return -1; | |
841 | } | |
842 | ||
843 | @@ -5631,8 +5639,8 @@ static int remoteDispatchDomainIsActive(struct qemud_server *server ATTRIBUTE_UN | |
844 | ret->active = virDomainIsActive(domain); | |
845 | ||
846 | if (ret->active < 0) { | |
847 | - virDomainFree(domain); | |
848 | remoteDispatchConnError(err, conn); | |
849 | + virDomainFree(domain); | |
850 | return -1; | |
851 | } | |
852 | ||
853 | @@ -5659,8 +5667,8 @@ static int remoteDispatchDomainIsPersistent(struct qemud_server *server ATTRIBUT | |
854 | ret->persistent = virDomainIsPersistent(domain); | |
855 | ||
856 | if (ret->persistent < 0) { | |
857 | - virDomainFree(domain); | |
858 | remoteDispatchConnError(err, conn); | |
859 | + virDomainFree(domain); | |
860 | return -1; | |
861 | } | |
862 | ||
863 | @@ -5687,8 +5695,8 @@ static int remoteDispatchInterfaceIsActive(struct qemud_server *server ATTRIBUTE | |
864 | ret->active = virInterfaceIsActive(iface); | |
865 | ||
866 | if (ret->active < 0) { | |
867 | - virInterfaceFree(iface); | |
868 | remoteDispatchConnError(err, conn); | |
869 | + virInterfaceFree(iface); | |
870 | return -1; | |
871 | } | |
872 | ||
873 | @@ -5715,8 +5723,8 @@ static int remoteDispatchNetworkIsActive(struct qemud_server *server ATTRIBUTE_U | |
874 | ret->active = virNetworkIsActive(network); | |
875 | ||
876 | if (ret->active < 0) { | |
877 | - virNetworkFree(network); | |
878 | remoteDispatchConnError(err, conn); | |
879 | + virNetworkFree(network); | |
880 | return -1; | |
881 | } | |
882 | ||
883 | @@ -5743,8 +5751,8 @@ static int remoteDispatchNetworkIsPersistent(struct qemud_server *server ATTRIBU | |
884 | ret->persistent = virNetworkIsPersistent(network); | |
885 | ||
886 | if (ret->persistent < 0) { | |
887 | - virNetworkFree(network); | |
888 | remoteDispatchConnError(err, conn); | |
889 | + virNetworkFree(network); | |
890 | return -1; | |
891 | } | |
892 | ||
893 | @@ -5771,8 +5779,8 @@ static int remoteDispatchStoragePoolIsActive(struct qemud_server *server ATTRIBU | |
894 | ret->active = virStoragePoolIsActive(pool); | |
895 | ||
896 | if (ret->active < 0) { | |
897 | - virStoragePoolFree(pool); | |
898 | remoteDispatchConnError(err, conn); | |
899 | + virStoragePoolFree(pool); | |
900 | return -1; | |
901 | } | |
902 | ||
903 | @@ -5799,8 +5807,8 @@ static int remoteDispatchStoragePoolIsPersistent(struct qemud_server *server ATT | |
904 | ret->persistent = virStoragePoolIsPersistent(pool); | |
905 | ||
906 | if (ret->persistent < 0) { | |
907 | - virStoragePoolFree(pool); | |
908 | remoteDispatchConnError(err, conn); | |
909 | + virStoragePoolFree(pool); | |
910 | return -1; | |
911 | } | |
912 | ||
913 | @@ -5895,8 +5903,8 @@ remoteDispatchDomainGetJobInfo (struct qemud_server *server ATTRIBUTE_UNUSED, | |
914 | } | |
915 | ||
916 | if (virDomainGetJobInfo (dom, &info) == -1) { | |
917 | - virDomainFree(dom); | |
918 | remoteDispatchConnError(rerr, conn); | |
919 | + virDomainFree(dom); | |
920 | return -1; | |
921 | } | |
922 | ||
923 | @@ -5937,8 +5945,8 @@ remoteDispatchDomainAbortJob (struct qemud_server *server ATTRIBUTE_UNUSED, | |
924 | } | |
925 | ||
926 | if (virDomainAbortJob (dom) == -1) { | |
927 | - virDomainFree(dom); | |
928 | remoteDispatchConnError(rerr, conn); | |
929 | + virDomainFree(dom); | |
930 | return -1; | |
931 | } | |
932 | ||
933 | @@ -5966,8 +5974,8 @@ remoteDispatchDomainMigrateSetMaxDowntime(struct qemud_server *server ATTRIBUTE_ | |
934 | } | |
935 | ||
936 | if (virDomainMigrateSetMaxDowntime(dom, args->downtime, args->flags) == -1) { | |
937 | - virDomainFree(dom); | |
938 | remoteDispatchConnError(rerr, conn); | |
939 | + virDomainFree(dom); | |
940 | return -1; | |
941 | } | |
942 | ||
943 | @@ -5996,8 +6004,8 @@ remoteDispatchDomainSnapshotCreateXml (struct qemud_server *server ATTRIBUTE_UNU | |
944 | ||
945 | snapshot = virDomainSnapshotCreateXML(domain, args->xml_desc, args->flags); | |
946 | if (snapshot == NULL) { | |
947 | - virDomainFree(domain); | |
948 | remoteDispatchConnError(rerr, conn); | |
949 | + virDomainFree(domain); | |
950 | return -1; | |
951 | } | |
952 | ||
953 | @@ -6038,12 +6046,12 @@ remoteDispatchDomainSnapshotDumpXml (struct qemud_server *server ATTRIBUTE_UNUSE | |
954 | rc = 0; | |
955 | ||
956 | cleanup: | |
957 | + if (rc < 0) | |
958 | + remoteDispatchConnError(rerr, conn); | |
959 | if (snapshot) | |
960 | virDomainSnapshotFree(snapshot); | |
961 | if (domain) | |
962 | virDomainFree(domain); | |
963 | - if (rc < 0) | |
964 | - remoteDispatchConnError(rerr, conn); | |
965 | ||
966 | return rc; | |
967 | } | |
968 | @@ -6067,8 +6075,8 @@ remoteDispatchDomainSnapshotNum (struct qemud_server *server ATTRIBUTE_UNUSED, | |
969 | ||
970 | ret->num = virDomainSnapshotNum(domain, args->flags); | |
971 | if (ret->num == -1) { | |
972 | - virDomainFree(domain); | |
973 | remoteDispatchConnError(rerr, conn); | |
974 | + virDomainFree(domain); | |
975 | return -1; | |
976 | } | |
977 | ||
978 | @@ -6112,9 +6120,9 @@ remoteDispatchDomainSnapshotListNames (struct qemud_server *server ATTRIBUTE_UNU | |
979 | args->nameslen, | |
980 | args->flags); | |
981 | if (ret->names.names_len == -1) { | |
982 | + remoteDispatchConnError(rerr, conn); | |
983 | virDomainFree(domain); | |
984 | VIR_FREE(ret->names.names_val); | |
985 | - remoteDispatchConnError(rerr, conn); | |
986 | return -1; | |
987 | } | |
988 | ||
989 | @@ -6143,8 +6151,8 @@ remoteDispatchDomainSnapshotLookupByName (struct qemud_server *server ATTRIBUTE_ | |
990 | ||
991 | snapshot = virDomainSnapshotLookupByName(domain, args->name, args->flags); | |
992 | if (snapshot == NULL) { | |
993 | - virDomainFree(domain); | |
994 | remoteDispatchConnError(rerr, conn); | |
995 | + virDomainFree(domain); | |
996 | return -1; | |
997 | } | |
998 | ||
999 | @@ -6176,8 +6184,8 @@ remoteDispatchDomainHasCurrentSnapshot(struct qemud_server *server ATTRIBUTE_UNU | |
1000 | ||
1001 | result = virDomainHasCurrentSnapshot(domain, args->flags); | |
1002 | if (result < 0) { | |
1003 | - virDomainFree(domain); | |
1004 | remoteDispatchConnError(rerr, conn); | |
1005 | + virDomainFree(domain); | |
1006 | return -1; | |
1007 | } | |
1008 | ||
1009 | @@ -6208,8 +6216,8 @@ remoteDispatchDomainSnapshotCurrent(struct qemud_server *server ATTRIBUTE_UNUSED | |
1010 | ||
1011 | snapshot = virDomainSnapshotCurrent(domain, args->flags); | |
1012 | if (snapshot == NULL) { | |
1013 | - virDomainFree(domain); | |
1014 | remoteDispatchConnError(rerr, conn); | |
1015 | + virDomainFree(domain); | |
1016 | return -1; | |
1017 | } | |
1018 | ||
1019 | @@ -6248,12 +6256,12 @@ remoteDispatchDomainRevertToSnapshot (struct qemud_server *server ATTRIBUTE_UNUS | |
1020 | rc = 0; | |
1021 | ||
1022 | cleanup: | |
1023 | + if (rc < 0) | |
1024 | + remoteDispatchConnError(rerr, conn); | |
1025 | if (snapshot) | |
1026 | virDomainSnapshotFree(snapshot); | |
1027 | if (domain) | |
1028 | virDomainFree(domain); | |
1029 | - if (rc < 0) | |
1030 | - remoteDispatchConnError(rerr, conn); | |
1031 | ||
1032 | return rc; | |
1033 | } | |
1034 | @@ -6285,12 +6293,12 @@ remoteDispatchDomainSnapshotDelete (struct qemud_server *server ATTRIBUTE_UNUSED | |
1035 | rc = 0; | |
1036 | ||
1037 | cleanup: | |
1038 | + if (rc < 0) | |
1039 | + remoteDispatchConnError(rerr, conn); | |
1040 | if (snapshot) | |
1041 | virDomainSnapshotFree(snapshot); | |
1042 | if (domain) | |
1043 | virDomainFree(domain); | |
1044 | - if (rc < 0) | |
1045 | - remoteDispatchConnError(rerr, conn); | |
1046 | ||
1047 | return rc; | |
1048 | } | |
1049 | @@ -6455,8 +6463,8 @@ remoteDispatchNwfilterUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, | |
1050 | } | |
1051 | ||
1052 | if (virNWFilterUndefine (nwfilter) == -1) { | |
1053 | - virNWFilterFree(nwfilter); | |
1054 | remoteDispatchConnError(rerr, conn); | |
1055 | + virNWFilterFree(nwfilter); | |
1056 | return -1; | |
1057 | } | |
1058 | virNWFilterFree(nwfilter); | |
1059 | @@ -6518,8 +6526,8 @@ remoteDispatchNwfilterGetXmlDesc (struct qemud_server *server ATTRIBUTE_UNUSED, | |
1060 | /* remoteDispatchClientRequest will free this. */ | |
1061 | ret->xml = virNWFilterGetXMLDesc (nwfilter, args->flags); | |
1062 | if (!ret->xml) { | |
1063 | - virNWFilterFree(nwfilter); | |
1064 | remoteDispatchConnError(rerr, conn); | |
1065 | + virNWFilterFree(nwfilter); | |
1066 | return -1; | |
1067 | } | |
1068 | virNWFilterFree(nwfilter); | |
1069 | @@ -6566,8 +6574,8 @@ remoteDispatchDomainGetBlockInfo (struct qemud_server *server ATTRIBUTE_UNUSED, | |
1070 | } | |
1071 | ||
1072 | if (virDomainGetBlockInfo (dom, args->path, &info, args->flags) == -1) { | |
1073 | - virDomainFree(dom); | |
1074 | remoteDispatchConnError(rerr, conn); | |
1075 | + virDomainFree(dom); | |
1076 | return -1; | |
1077 | } | |
1078 | ||
1079 | @@ -6599,8 +6607,8 @@ qemuDispatchMonitorCommand (struct qemud_server *server ATTRIBUTE_UNUSED, | |
1080 | ||
1081 | if (virDomainQemuMonitorCommand(domain, args->cmd, &ret->result, | |
1082 | args->flags) == -1) { | |
1083 | - virDomainFree(domain); | |
1084 | remoteDispatchConnError(rerr, conn); | |
1085 | + virDomainFree(domain); | |
1086 | return -1; | |
1087 | } | |
1088 | ||
1089 | -- |