xref: /qemu/scripts/coverity-scan/model.c (revision 04a0afe52852e6b6d6f81230b6d7acd25dac88dd)
1e40cdb0eSPaolo Bonzini /* Coverity Scan model
2e40cdb0eSPaolo Bonzini  *
3e40cdb0eSPaolo Bonzini  * Copyright (C) 2014 Red Hat, Inc.
4e40cdb0eSPaolo Bonzini  *
5e40cdb0eSPaolo Bonzini  * Authors:
6e40cdb0eSPaolo Bonzini  *  Markus Armbruster <armbru@redhat.com>
7e40cdb0eSPaolo Bonzini  *  Paolo Bonzini <pbonzini@redhat.com>
8e40cdb0eSPaolo Bonzini  *
9e40cdb0eSPaolo Bonzini  * This work is licensed under the terms of the GNU GPL, version 2 or, at your
10e40cdb0eSPaolo Bonzini  * option, any later version.  See the COPYING file in the top-level directory.
11e40cdb0eSPaolo Bonzini  */
12e40cdb0eSPaolo Bonzini 
13e40cdb0eSPaolo Bonzini 
14e40cdb0eSPaolo Bonzini /*
15e40cdb0eSPaolo Bonzini  * This is the source code for our Coverity user model file.  The
16e40cdb0eSPaolo Bonzini  * purpose of user models is to increase scanning accuracy by explaining
17e40cdb0eSPaolo Bonzini  * code Coverity can't see (out of tree libraries) or doesn't
18e40cdb0eSPaolo Bonzini  * sufficiently understand.  Better accuracy means both fewer false
19e40cdb0eSPaolo Bonzini  * positives and more true defects.  Memory leaks in particular.
20e40cdb0eSPaolo Bonzini  *
21e40cdb0eSPaolo Bonzini  * - A model file can't import any header files.  Some built-in primitives are
22e40cdb0eSPaolo Bonzini  *   available but not wchar_t, NULL etc.
23e40cdb0eSPaolo Bonzini  * - Modeling doesn't need full structs and typedefs. Rudimentary structs
24e40cdb0eSPaolo Bonzini  *   and similar types are sufficient.
25e40cdb0eSPaolo Bonzini  * - An uninitialized local variable signifies that the variable could be
26e40cdb0eSPaolo Bonzini  *   any value.
27e40cdb0eSPaolo Bonzini  *
28e40cdb0eSPaolo Bonzini  * The model file must be uploaded by an admin in the analysis settings of
29e40cdb0eSPaolo Bonzini  * http://scan.coverity.com/projects/378
30e40cdb0eSPaolo Bonzini  */
31e40cdb0eSPaolo Bonzini 
32e40cdb0eSPaolo Bonzini #define NULL ((void *)0)
33e40cdb0eSPaolo Bonzini 
34e40cdb0eSPaolo Bonzini typedef unsigned char uint8_t;
35e40cdb0eSPaolo Bonzini typedef char int8_t;
36e40cdb0eSPaolo Bonzini typedef unsigned int uint32_t;
37e40cdb0eSPaolo Bonzini typedef int int32_t;
38e40cdb0eSPaolo Bonzini typedef long ssize_t;
39e40cdb0eSPaolo Bonzini typedef unsigned long long uint64_t;
40e40cdb0eSPaolo Bonzini typedef long long int64_t;
41e40cdb0eSPaolo Bonzini typedef _Bool bool;
42e40cdb0eSPaolo Bonzini 
43e4b77daaSMarkus Armbruster typedef struct va_list_str *va_list;
44e4b77daaSMarkus Armbruster 
45e40cdb0eSPaolo Bonzini /* exec.c */
46e40cdb0eSPaolo Bonzini 
47e40cdb0eSPaolo Bonzini typedef struct AddressSpace AddressSpace;
48e40cdb0eSPaolo Bonzini typedef uint64_t hwaddr;
495c9eb028SPeter Maydell typedef uint32_t MemTxResult;
505c9eb028SPeter Maydell typedef uint64_t MemTxAttrs;
51e40cdb0eSPaolo Bonzini 
522e1c92daSPaolo Bonzini static void __bufwrite(uint8_t *buf, ssize_t len)
53e40cdb0eSPaolo Bonzini {
54e40cdb0eSPaolo Bonzini     int first, last;
55e40cdb0eSPaolo Bonzini     __coverity_negative_sink__(len);
56e40cdb0eSPaolo Bonzini     if (len == 0) return;
57e40cdb0eSPaolo Bonzini     buf[0] = first;
58e40cdb0eSPaolo Bonzini     buf[len-1] = last;
59e40cdb0eSPaolo Bonzini     __coverity_writeall__(buf);
60e40cdb0eSPaolo Bonzini }
61e40cdb0eSPaolo Bonzini 
622e1c92daSPaolo Bonzini static void __bufread(uint8_t *buf, ssize_t len)
63e40cdb0eSPaolo Bonzini {
64e40cdb0eSPaolo Bonzini     __coverity_negative_sink__(len);
65e40cdb0eSPaolo Bonzini     if (len == 0) return;
66e40cdb0eSPaolo Bonzini     int first = buf[0];
67e40cdb0eSPaolo Bonzini     int last = buf[len-1];
68e40cdb0eSPaolo Bonzini }
69e40cdb0eSPaolo Bonzini 
704d0e7239SPaolo Bonzini MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
714d0e7239SPaolo Bonzini                                MemTxAttrs attrs,
724d0e7239SPaolo Bonzini                                uint8_t *buf, int len)
73e40cdb0eSPaolo Bonzini {
745c9eb028SPeter Maydell     MemTxResult result;
75e40cdb0eSPaolo Bonzini     // TODO: investigate impact of treating reads as producing
76e40cdb0eSPaolo Bonzini     // tainted data, with __coverity_tainted_data_argument__(buf).
774d0e7239SPaolo Bonzini     __bufwrite(buf, len);
78e40cdb0eSPaolo Bonzini     return result;
79e40cdb0eSPaolo Bonzini }
80e40cdb0eSPaolo Bonzini 
814d0e7239SPaolo Bonzini MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
824d0e7239SPaolo Bonzini                                 MemTxAttrs attrs,
834d0e7239SPaolo Bonzini                                 const uint8_t *buf, int len)
844d0e7239SPaolo Bonzini {
854d0e7239SPaolo Bonzini     MemTxResult result;
864d0e7239SPaolo Bonzini     __bufread(buf, len);
874d0e7239SPaolo Bonzini     return result;
884d0e7239SPaolo Bonzini }
894d0e7239SPaolo Bonzini 
904d0e7239SPaolo Bonzini 
91e40cdb0eSPaolo Bonzini /* Tainting */
92e40cdb0eSPaolo Bonzini 
93e40cdb0eSPaolo Bonzini typedef struct {} name2keysym_t;
94e40cdb0eSPaolo Bonzini static int get_keysym(const name2keysym_t *table,
95e40cdb0eSPaolo Bonzini                       const char *name)
96e40cdb0eSPaolo Bonzini {
97e40cdb0eSPaolo Bonzini     int result;
98e40cdb0eSPaolo Bonzini     if (result > 0) {
99e40cdb0eSPaolo Bonzini         __coverity_tainted_string_sanitize_content__(name);
100e40cdb0eSPaolo Bonzini         return result;
101e40cdb0eSPaolo Bonzini     } else {
102e40cdb0eSPaolo Bonzini         return 0;
103e40cdb0eSPaolo Bonzini     }
104e40cdb0eSPaolo Bonzini }
105e40cdb0eSPaolo Bonzini 
106*04a0afe5SPaolo Bonzini /* Replay data is considered trusted.  */
107*04a0afe5SPaolo Bonzini uint8_t replay_get_byte(void)
108*04a0afe5SPaolo Bonzini {
109*04a0afe5SPaolo Bonzini      uint8_t byte = 0;
110*04a0afe5SPaolo Bonzini      if (replay_file) {
111*04a0afe5SPaolo Bonzini          uint8_t c;
112*04a0afe5SPaolo Bonzini          byte = c;
113*04a0afe5SPaolo Bonzini      }
114*04a0afe5SPaolo Bonzini      return byte;
115*04a0afe5SPaolo Bonzini }
116*04a0afe5SPaolo Bonzini 
117*04a0afe5SPaolo Bonzini 
1189d7a4c66SMarkus Armbruster /*
1199d7a4c66SMarkus Armbruster  * GLib memory allocation functions.
120e40cdb0eSPaolo Bonzini  *
121e40cdb0eSPaolo Bonzini  * Note that we ignore the fact that g_malloc of 0 bytes returns NULL,
122e40cdb0eSPaolo Bonzini  * and g_realloc of 0 bytes frees the pointer.
123e40cdb0eSPaolo Bonzini  *
124e40cdb0eSPaolo Bonzini  * Modeling this would result in Coverity flagging a lot of memory
125e40cdb0eSPaolo Bonzini  * allocations as potentially returning NULL, and asking us to check
126e40cdb0eSPaolo Bonzini  * whether the result of the allocation is NULL or not.  However, the
127e40cdb0eSPaolo Bonzini  * resulting pointer should never be dereferenced anyway, and in fact
128e40cdb0eSPaolo Bonzini  * it is not in the vast majority of cases.
129e40cdb0eSPaolo Bonzini  *
130e40cdb0eSPaolo Bonzini  * If a dereference did happen, this would suppress a defect report
131e40cdb0eSPaolo Bonzini  * for an actual null pointer dereference.  But it's too unlikely to
132e40cdb0eSPaolo Bonzini  * be worth wading through the false positives, and with some luck
133e40cdb0eSPaolo Bonzini  * we'll get a buffer overflow reported anyway.
134e40cdb0eSPaolo Bonzini  */
135e40cdb0eSPaolo Bonzini 
1369d7a4c66SMarkus Armbruster /*
1379d7a4c66SMarkus Armbruster  * Allocation primitives, cannot return NULL
1389d7a4c66SMarkus Armbruster  * See also Coverity's library/generic/libc/all/all.c
1399d7a4c66SMarkus Armbruster  */
140e40cdb0eSPaolo Bonzini 
1419d7a4c66SMarkus Armbruster void *g_malloc_n(size_t nmemb, size_t size)
142e40cdb0eSPaolo Bonzini {
1439d7a4c66SMarkus Armbruster     size_t sz;
1449d7a4c66SMarkus Armbruster     void *ptr;
1459d7a4c66SMarkus Armbruster 
1469d7a4c66SMarkus Armbruster     __coverity_negative_sink__(nmemb);
1479d7a4c66SMarkus Armbruster     __coverity_negative_sink__(size);
1489d7a4c66SMarkus Armbruster     sz = nmemb * size;
149906b8babSJan Kiszka     ptr = __coverity_alloc__(sz);
1509d7a4c66SMarkus Armbruster     __coverity_mark_as_uninitialized_buffer__(ptr);
1517ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(ptr, "g_free");
1529d7a4c66SMarkus Armbruster     return ptr;
153e40cdb0eSPaolo Bonzini }
154e40cdb0eSPaolo Bonzini 
1559d7a4c66SMarkus Armbruster void *g_malloc0_n(size_t nmemb, size_t size)
156e40cdb0eSPaolo Bonzini {
1579d7a4c66SMarkus Armbruster     size_t sz;
1589d7a4c66SMarkus Armbruster     void *ptr;
1599d7a4c66SMarkus Armbruster 
1609d7a4c66SMarkus Armbruster     __coverity_negative_sink__(nmemb);
1619d7a4c66SMarkus Armbruster     __coverity_negative_sink__(size);
1629d7a4c66SMarkus Armbruster     sz = nmemb * size;
163906b8babSJan Kiszka     ptr = __coverity_alloc__(sz);
1649d7a4c66SMarkus Armbruster     __coverity_writeall0__(ptr);
1657ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(ptr, "g_free");
1669d7a4c66SMarkus Armbruster     return ptr;
167e40cdb0eSPaolo Bonzini }
168e40cdb0eSPaolo Bonzini 
1699d7a4c66SMarkus Armbruster void *g_realloc_n(void *ptr, size_t nmemb, size_t size)
170e40cdb0eSPaolo Bonzini {
1719d7a4c66SMarkus Armbruster     size_t sz;
1729d7a4c66SMarkus Armbruster 
1739d7a4c66SMarkus Armbruster     __coverity_negative_sink__(nmemb);
1749d7a4c66SMarkus Armbruster     __coverity_negative_sink__(size);
1759d7a4c66SMarkus Armbruster     sz = nmemb * size;
1769d7a4c66SMarkus Armbruster     __coverity_escape__(ptr);
177906b8babSJan Kiszka     ptr = __coverity_alloc__(sz);
1789d7a4c66SMarkus Armbruster     /*
1799d7a4c66SMarkus Armbruster      * Memory beyond the old size isn't actually initialized.  Can't
1809d7a4c66SMarkus Armbruster      * model that.  See Coverity's realloc() model
1819d7a4c66SMarkus Armbruster      */
1829d7a4c66SMarkus Armbruster     __coverity_writeall__(ptr);
1837ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(ptr, "g_free");
1849d7a4c66SMarkus Armbruster     return ptr;
185e40cdb0eSPaolo Bonzini }
186e40cdb0eSPaolo Bonzini 
1879d7a4c66SMarkus Armbruster void g_free(void *ptr)
188e40cdb0eSPaolo Bonzini {
1899d7a4c66SMarkus Armbruster     __coverity_free__(ptr);
1907ad4c720SMarkus Armbruster     __coverity_mark_as_afm_freed__(ptr, "g_free");
191e40cdb0eSPaolo Bonzini }
192e40cdb0eSPaolo Bonzini 
1939d7a4c66SMarkus Armbruster /*
1949d7a4c66SMarkus Armbruster  * Derive the g_try_FOO_n() from the g_FOO_n() by adding indeterminate
1959d7a4c66SMarkus Armbruster  * out of memory conditions
1969d7a4c66SMarkus Armbruster  */
1979d7a4c66SMarkus Armbruster 
1989d7a4c66SMarkus Armbruster void *g_try_malloc_n(size_t nmemb, size_t size)
199e40cdb0eSPaolo Bonzini {
2009d7a4c66SMarkus Armbruster     int nomem;
2019d7a4c66SMarkus Armbruster 
2029d7a4c66SMarkus Armbruster     if (nomem) {
2039d7a4c66SMarkus Armbruster         return NULL;
2049d7a4c66SMarkus Armbruster     }
2059d7a4c66SMarkus Armbruster     return g_malloc_n(nmemb, size);
206e40cdb0eSPaolo Bonzini }
207e40cdb0eSPaolo Bonzini 
2089d7a4c66SMarkus Armbruster void *g_try_malloc0_n(size_t nmemb, size_t size)
209e40cdb0eSPaolo Bonzini {
2109d7a4c66SMarkus Armbruster     int nomem;
2119d7a4c66SMarkus Armbruster 
2129d7a4c66SMarkus Armbruster     if (nomem) {
2139d7a4c66SMarkus Armbruster         return NULL;
2149d7a4c66SMarkus Armbruster     }
2159d7a4c66SMarkus Armbruster     return g_malloc0_n(nmemb, size);
216e40cdb0eSPaolo Bonzini }
217e40cdb0eSPaolo Bonzini 
2189d7a4c66SMarkus Armbruster void *g_try_realloc_n(void *ptr, size_t nmemb, size_t size)
219e40cdb0eSPaolo Bonzini {
2209d7a4c66SMarkus Armbruster     int nomem;
2219d7a4c66SMarkus Armbruster 
2229d7a4c66SMarkus Armbruster     if (nomem) {
2239d7a4c66SMarkus Armbruster         return NULL;
2249d7a4c66SMarkus Armbruster     }
2259d7a4c66SMarkus Armbruster     return g_realloc_n(ptr, nmemb, size);
2269d7a4c66SMarkus Armbruster }
2279d7a4c66SMarkus Armbruster 
2289d7a4c66SMarkus Armbruster /* Trivially derive the g_FOO() from the g_FOO_n() */
2299d7a4c66SMarkus Armbruster 
2309d7a4c66SMarkus Armbruster void *g_malloc(size_t size)
2319d7a4c66SMarkus Armbruster {
2329d7a4c66SMarkus Armbruster     return g_malloc_n(1, size);
2339d7a4c66SMarkus Armbruster }
2349d7a4c66SMarkus Armbruster 
2359d7a4c66SMarkus Armbruster void *g_malloc0(size_t size)
2369d7a4c66SMarkus Armbruster {
2379d7a4c66SMarkus Armbruster     return g_malloc0_n(1, size);
2389d7a4c66SMarkus Armbruster }
2399d7a4c66SMarkus Armbruster 
2409d7a4c66SMarkus Armbruster void *g_realloc(void *ptr, size_t size)
2419d7a4c66SMarkus Armbruster {
2429d7a4c66SMarkus Armbruster     return g_realloc_n(ptr, 1, size);
2439d7a4c66SMarkus Armbruster }
2449d7a4c66SMarkus Armbruster 
2459d7a4c66SMarkus Armbruster void *g_try_malloc(size_t size)
2469d7a4c66SMarkus Armbruster {
2479d7a4c66SMarkus Armbruster     return g_try_malloc_n(1, size);
2489d7a4c66SMarkus Armbruster }
2499d7a4c66SMarkus Armbruster 
2509d7a4c66SMarkus Armbruster void *g_try_malloc0(size_t size)
2519d7a4c66SMarkus Armbruster {
2529d7a4c66SMarkus Armbruster     return g_try_malloc0_n(1, size);
2539d7a4c66SMarkus Armbruster }
2549d7a4c66SMarkus Armbruster 
2559d7a4c66SMarkus Armbruster void *g_try_realloc(void *ptr, size_t size)
2569d7a4c66SMarkus Armbruster {
2579d7a4c66SMarkus Armbruster     return g_try_realloc_n(ptr, 1, size);
258e40cdb0eSPaolo Bonzini }
259e40cdb0eSPaolo Bonzini 
26029cd81ffSMarkus Armbruster /* Other memory allocation functions */
26129cd81ffSMarkus Armbruster 
26229cd81ffSMarkus Armbruster void *g_memdup(const void *ptr, unsigned size)
26329cd81ffSMarkus Armbruster {
26429cd81ffSMarkus Armbruster     unsigned char *dup;
26529cd81ffSMarkus Armbruster     unsigned i;
26629cd81ffSMarkus Armbruster 
26729cd81ffSMarkus Armbruster     if (!ptr) {
26829cd81ffSMarkus Armbruster         return NULL;
26929cd81ffSMarkus Armbruster     }
27029cd81ffSMarkus Armbruster 
27129cd81ffSMarkus Armbruster     dup = g_malloc(size);
27229cd81ffSMarkus Armbruster     for (i = 0; i < size; i++)
27329cd81ffSMarkus Armbruster         dup[i] = ((unsigned char *)ptr)[i];
27429cd81ffSMarkus Armbruster     return dup;
27529cd81ffSMarkus Armbruster }
27629cd81ffSMarkus Armbruster 
277e4b77daaSMarkus Armbruster /*
278e4b77daaSMarkus Armbruster  * GLib string allocation functions
279e4b77daaSMarkus Armbruster  */
280e4b77daaSMarkus Armbruster 
281e4b77daaSMarkus Armbruster char *g_strdup(const char *s)
282e4b77daaSMarkus Armbruster {
283e4b77daaSMarkus Armbruster     char *dup;
284e4b77daaSMarkus Armbruster     size_t i;
285e4b77daaSMarkus Armbruster 
286e4b77daaSMarkus Armbruster     if (!s) {
287e4b77daaSMarkus Armbruster         return NULL;
288e4b77daaSMarkus Armbruster     }
289e4b77daaSMarkus Armbruster 
290e4b77daaSMarkus Armbruster     __coverity_string_null_sink__(s);
291e4b77daaSMarkus Armbruster     __coverity_string_size_sink__(s);
292e4b77daaSMarkus Armbruster     dup = __coverity_alloc_nosize__();
2937ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(dup, "g_free");
294e4b77daaSMarkus Armbruster     for (i = 0; (dup[i] = s[i]); i++) ;
295e4b77daaSMarkus Armbruster     return dup;
296e4b77daaSMarkus Armbruster }
297e4b77daaSMarkus Armbruster 
298e4b77daaSMarkus Armbruster char *g_strndup(const char *s, size_t n)
299e4b77daaSMarkus Armbruster {
300e4b77daaSMarkus Armbruster     char *dup;
301e4b77daaSMarkus Armbruster     size_t i;
302e4b77daaSMarkus Armbruster 
303e4b77daaSMarkus Armbruster     __coverity_negative_sink__(n);
304e4b77daaSMarkus Armbruster 
305e4b77daaSMarkus Armbruster     if (!s) {
306e4b77daaSMarkus Armbruster         return NULL;
307e4b77daaSMarkus Armbruster     }
308e4b77daaSMarkus Armbruster 
309e4b77daaSMarkus Armbruster     dup = g_malloc(n + 1);
310e4b77daaSMarkus Armbruster     for (i = 0; i < n && (dup[i] = s[i]); i++) ;
311e4b77daaSMarkus Armbruster     dup[i] = 0;
312e4b77daaSMarkus Armbruster     return dup;
313e4b77daaSMarkus Armbruster }
314e4b77daaSMarkus Armbruster 
315e4b77daaSMarkus Armbruster char *g_strdup_printf(const char *format, ...)
316e4b77daaSMarkus Armbruster {
317e4b77daaSMarkus Armbruster     char ch, *s;
318e4b77daaSMarkus Armbruster     size_t len;
319e4b77daaSMarkus Armbruster 
320e4b77daaSMarkus Armbruster     __coverity_string_null_sink__(format);
321e4b77daaSMarkus Armbruster     __coverity_string_size_sink__(format);
322e4b77daaSMarkus Armbruster 
323e4b77daaSMarkus Armbruster     ch = *format;
324e4b77daaSMarkus Armbruster 
325e4b77daaSMarkus Armbruster     s = __coverity_alloc_nosize__();
326e4b77daaSMarkus Armbruster     __coverity_writeall__(s);
3277ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(s, "g_free");
328e4b77daaSMarkus Armbruster     return s;
329e4b77daaSMarkus Armbruster }
330e4b77daaSMarkus Armbruster 
331e4b77daaSMarkus Armbruster char *g_strdup_vprintf(const char *format, va_list ap)
332e4b77daaSMarkus Armbruster {
333e4b77daaSMarkus Armbruster     char ch, *s;
334e4b77daaSMarkus Armbruster     size_t len;
335e4b77daaSMarkus Armbruster 
336e4b77daaSMarkus Armbruster     __coverity_string_null_sink__(format);
337e4b77daaSMarkus Armbruster     __coverity_string_size_sink__(format);
338e4b77daaSMarkus Armbruster 
339e4b77daaSMarkus Armbruster     ch = *format;
340e4b77daaSMarkus Armbruster     ch = *(char *)ap;
341e4b77daaSMarkus Armbruster 
342e4b77daaSMarkus Armbruster     s = __coverity_alloc_nosize__();
343e4b77daaSMarkus Armbruster     __coverity_writeall__(s);
3447ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(s, "g_free");
345e4b77daaSMarkus Armbruster 
346e4b77daaSMarkus Armbruster     return len;
347e4b77daaSMarkus Armbruster }
348e4b77daaSMarkus Armbruster 
349e4b77daaSMarkus Armbruster char *g_strconcat(const char *s, ...)
350e4b77daaSMarkus Armbruster {
351e4b77daaSMarkus Armbruster     char *s;
352e4b77daaSMarkus Armbruster 
353e4b77daaSMarkus Armbruster     /*
354e4b77daaSMarkus Armbruster      * Can't model: last argument must be null, the others
355e4b77daaSMarkus Armbruster      * null-terminated strings
356e4b77daaSMarkus Armbruster      */
357e4b77daaSMarkus Armbruster 
358e4b77daaSMarkus Armbruster     s = __coverity_alloc_nosize__();
359e4b77daaSMarkus Armbruster     __coverity_writeall__(s);
3607ad4c720SMarkus Armbruster     __coverity_mark_as_afm_allocated__(s, "g_free");
361e4b77daaSMarkus Armbruster     return s;
362e4b77daaSMarkus Armbruster }
363e4b77daaSMarkus Armbruster 
364e40cdb0eSPaolo Bonzini /* Other glib functions */
365e40cdb0eSPaolo Bonzini 
3661e819697SMarkus Armbruster typedef struct pollfd GPollFD;
3671e819697SMarkus Armbruster 
3681e819697SMarkus Armbruster int poll();
3691e819697SMarkus Armbruster 
3701e819697SMarkus Armbruster int g_poll (GPollFD *fds, unsigned nfds, int timeout)
3711e819697SMarkus Armbruster {
3721e819697SMarkus Armbruster     return poll(fds, nfds, timeout);
3731e819697SMarkus Armbruster }
3741e819697SMarkus Armbruster 
375e40cdb0eSPaolo Bonzini typedef struct _GIOChannel GIOChannel;
376e40cdb0eSPaolo Bonzini GIOChannel *g_io_channel_unix_new(int fd)
377e40cdb0eSPaolo Bonzini {
378e40cdb0eSPaolo Bonzini     GIOChannel *c = g_malloc0(sizeof(GIOChannel));
379e40cdb0eSPaolo Bonzini     __coverity_escape__(fd);
380e40cdb0eSPaolo Bonzini     return c;
381e40cdb0eSPaolo Bonzini }
382e40cdb0eSPaolo Bonzini 
383e40cdb0eSPaolo Bonzini void g_assertion_message_expr(const char     *domain,
384e40cdb0eSPaolo Bonzini                               const char     *file,
385e40cdb0eSPaolo Bonzini                               int             line,
386e40cdb0eSPaolo Bonzini                               const char     *func,
387e40cdb0eSPaolo Bonzini                               const char     *expr)
388e40cdb0eSPaolo Bonzini {
389e40cdb0eSPaolo Bonzini     __coverity_panic__();
390e40cdb0eSPaolo Bonzini }
391