Codebase list libvirt / ac67c93
CVE-2011-1486 Make error reporting in libvirtd thread safe Closes: #623222 Guido Günther 12 years ago
2 changed file(s) with 1091 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
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 --
1010 0011-OpenVZ-take-veid-from-vmdef-name-when-defining-new-d.patch
1111 0012-OpenVZ-Fix-some-overwritten-error-codes.patch
1212 security/0013-Add-missing-checks-for-read-only-connections.patch
13 security/0014-Make-error-reporting-in-libvirtd-thread-safe.patch