Commit Graph

4694 Commits

Author SHA1 Message Date
Frediano Ziglio
c8e4e467be red-worker: Reduce casts needed in dispatcher handlers
Use a template to deduct type and avoid casts in every handler.
The reinterpret_cast seems strong but is safe as converting
a function with 2 typed pointers and a void return into a function
with 2 void pointers and a void return.
The unsafety left (not a regressions) is the association between
handler number and message type.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2021-06-01 22:08:55 +01:00
Frediano Ziglio
84e1788d3a reds: Fix closure of SpiceServer in case of connected clients
When spice_server_destroy is called with pending clients (currently
not a big issue, usually the programs using SPICE server are
exiting then), some leaks can happen.
This is due to the fact that some dispatcher messages are queued
to handle some serialization but then they are neved executed as
the entire system is closed.
Close all connections and handle all main dispatcher messages
to remove these leaks.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2021-06-01 21:47:29 +01:00
Frediano Ziglio
c63f166bb1 display-channel: Rename parameter for consistency
display_channel -> display.
In all the rest of the file display is used.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2021-06-01 21:47:27 +01:00
Frediano Ziglio
435ba9228f display-channel: Use constructor and destructor for Drawable
This will allow to use not trivial objects inside the structure.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2021-06-01 21:47:21 +01:00
Rosen Penev
3f5ba6e565 red-client: Remove FOREACH_CHANNEL_CLIENT macro
Since the conversion to a for range loop, there's no point to this
macro.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-06-01 09:02:48 +01:00
Rosen Penev
4b56942bf5 reds: Remove FOREACH_QXL_INSTANCE macro
Since the conversion to a for range loop, there's no point to this
macro.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-06-01 09:02:32 +01:00
Rosen Penev
115260e4e5 Manual algorithm changes
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-31 08:08:26 +01:00
Frediano Ziglio
3de587a76c red-stream: Fix issue with SASL and no-Glibc
Using Unix sockets and no-Glibc C libraries (like Musl) getnameinfo
will fail causing SASL code to fail initialization.
Replicate Glibc behavior and report "localhost" as host and an
empty port string.

This fixes https://gitlab.freedesktop.org/spice/spice/-/issues/58.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-24 08:37:11 +01:00
Frediano Ziglio
9376d5ed30 Update spice-common submodule
This brings in the following changes:

Frediano Ziglio (3):
      canvas_base: Fix missing ntohl for Win32 platform
      meson: Generate missing intermediate target
      codegen: Make input structures for marshaller constant

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-24 08:16:30 +01:00
Rosen Penev
8104fc3456 Manual algorithm changes
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-23 10:32:07 +01:00
Rosen Penev
51092046f7 Remove several usages of SPICE_N_ELEMENTS
It's simpler to just use a for range loop.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-23 10:01:39 +01:00
Frediano Ziglio
c5412b071a stream-channel: Fix compiler warning
This removes:

In function ‘stream_channel_get_supported_codecs’,
    inlined from ‘on_connect’ at ../server/stream-channel.cpp:364:60:
../server/stream-channel.cpp:326:31: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  326 |             out_codecs[num++] = codec;
      |                               ^
../server/stream-channel.cpp: In member function ‘on_connect’:
/usr/include/spice-1/spice/stream-device.h:209:13: note: destination object ‘codecs’ of size 0
  209 |     uint8_t codecs[0];
      |             ^

Reported by by Tomasz Kłoczko in
https://gitlab.freedesktop.org/spice/spice/-/issues/44

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 10:14:26 +01:00
Frediano Ziglio
0b86b6808a tests: Fix -Wodr warning compiling tests with LTO enabled
Avoid the compiler to see 2 different defines of the same
structure.
Reported by Tomasz Kłoczko in
https://gitlab.freedesktop.org/spice/spice/-/issues/44

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 10:14:21 +01:00
Frediano Ziglio
cb9bd1b09e Make headers independent
Make sure all headers can be compiled alone.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 10:13:41 +01:00
Frediano Ziglio
e2f6f1c7aa build: Update git-version-gen
Pick up new version from https://github.com/coreutils/gnulib.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 10:13:09 +01:00
Frediano Ziglio
1201113acd build: Better version checks and handling for Meson
Strip dirty and git hash.
Check that there are at least 3 numbers at the beginning.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 09:40:28 +01:00
Frediano Ziglio
a5e0f86bc2 Removed only written "items" field from PixmapCache
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 08:38:27 +01:00
orbea
c5fe3df1ef build: Fix undefined pthread references
The build fails with slibtool while GNU libtool hide the issue
by silently ignoring -no-undefined.

ax_pthread.m4 is sourced from:

e68e8f6f62/m4/ax_pthread.m4

Downstream issue: https://bugs.gentoo.org/780027

Signed-off-by: orbea <orbea@riseup.net>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 08:30:15 +01:00
Frediano Ziglio
7169c710a9 syntax-check: Add missing contributor name to AUTHORS
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-18 08:30:11 +01:00
Rosen Penev
9462537d24 clang-tidy: fix inconsistent declarations
Found with readability-inconsistent-declaration-parameter-name

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-09 11:19:30 +01:00
Rosen Penev
aefcd7d1c4 clang-tidy: use uppercase numeric literals
Found with readability-uppercase-literal-suffix

Avoids readability problems between lower case l and uppercase I.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-09 07:00:21 +01:00
Rosen Penev
9fb945c31b clang-tidy: replace typedef with using
Found with modernize-use-using

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-09 06:38:36 +01:00
Frediano Ziglio
748cc409f6 dispatcher: Avoid casts for raw buffers
Usually buffers to raw data are passed using void* pointers
to avoid casts and mark the buffer as raw.
Use them for read_safe and write_safe to avoid useless casts
in caller code.
As a minor convert a parameter to bool as changing the same
lines.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2021-05-05 09:13:33 +01:00
Rosen Penev
0bc7e80ec6 clang-tidy: convert C casts to C++ ones
Found with google-readability-casting

https://google.github.io/styleguide/cppguide.html#Casting

Makes the operation clearer.

This commit uses const_cast where needed.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-05-05 07:03:55 +01:00
Frediano Ziglio
127c047ad7 ci: Enable -Werror again
By default after commit b24da37074 (cfr: "build: Disable
default -Werror if source is a git repository") -Werror is
by default disabled using Autoconf.
Enabled for the CI.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-05 06:36:21 +01:00
Frediano Ziglio
62dd7e47e9 tests: Remove some compiler warnings
Remove warnings like:

In file included from /usr/include/glib-2.0/glib.h:86,
                 from ../server/tests/test-glib-compat.h:21,
                 from ../server/tests/test-channel.cpp:25:
In function 'void send_ack_sync(int, uint32_t)',
    inlined from 'void channel_loop()' at ../server/tests/test-channel.cpp:250:18:
../server/sys-socket.h:28:43: error: 'ssize_t write(int, const void*, size_t)' reading 10 bytes from a region of size 2 [-Werror=stringop-overread]
   28 | #define socket_write(sock, buf, len) write(sock, buf, len)
/usr/include/glib-2.0/glib/gtestutils.h:50:61: note: in definition of macro 'g_assert_cmpint'
   50 |                                              gint64 __n1 = (n1), __n2 = (n2); \
      |                                                             ^~
../server/tests/test-channel.cpp:132:21: note: in expansion of macro 'socket_write'
  132 |     g_assert_cmpint(socket_write(socket, &msg.type, 10), ==, 10);
      |                     ^~~~~~~~~~~~
../server/tests/test-channel.cpp: In function 'void channel_loop()':
../server/tests/test-channel.cpp:123:18: note: source object 'send_ack_sync(int, uint32_t)::<unnamed struct>::type' of size 2
  123 |         uint16_t type;
      |                  ^~~~
In file included from ../server/tests/test-channel.cpp:22:
/usr/include/unistd.h:367:16: note: in a call to function 'ssize_t write(int, const void*, size_t)' declared with attribute 'access (read_only, 2, 3)'
  367 | extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur
      |                ^~~~~
cc1plus: all warnings being treated as errors

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-05 06:36:18 +01:00
Frediano Ziglio
e39412644c ci: Ignore a leak in glib threading pool
The leak is detected by Valgrind on Fedora 34as:

==19603== 400 bytes in 1 blocks are possibly lost in loss record 2,296 of 2,441
==19603==    at 0x4845464: calloc (vg_replace_malloc.c:1117)
==19603==    by 0x40135FB: _dl_allocate_tls (in /usr/lib64/ld-2.33.so)
==19603==    by 0x57EB008: pthread_create@@GLIBC_2.2.5 (in /usr/lib64/libpthread-2.33.so)
==19603==    by 0x53A1130: UnknownInlinedFun (gthread-posix.c:1323)
==19603==    by 0x53A1130: g_thread_new_internal (gthread.c:931)
==19603==    by 0x53C4953: g_thread_pool_start_thread.constprop.0 (gthreadpool.c:477)
==19603==    by 0x53A2902: g_thread_pool_push (gthreadpool.c:691)
==19603==    by 0x519AE11: g_task_run_in_thread_sync (gtask.c:1593)
==19603==    by 0x80D8A74: ??? (in /usr/lib64/gio/modules/libgiolibproxy.so)
==19603==    by 0x5181966: g_proxy_address_enumerator_next (gproxyaddressenumerator.c:176)
==19603==    by 0x519281A: g_socket_client_connect (gsocketclient.c:1098)

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-05 06:36:14 +01:00
Frediano Ziglio
7fe49b6465 Update glib.supp to new version
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-05 06:36:12 +01:00
Frediano Ziglio
8c458fa35e Fix g_memdup deprecation warning with glib >= 2.68
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-05-05 06:35:56 +01:00
Qiuhao Li
1fae1191e5 reds: fix nullptr deref in red-parse-qxl.cpp
At red-parse-qxl.cpp#L535

        if (qxl_flags & QXL_BITMAP_DIRECT) {
            red->u.bitmap.data = red_get_image_data_flat(slots, group_id,
                                                         qxl->bitmap.data,
                                                         bitmap_size);

Since qxl->bitmap.data may from the guest, an attacker can make the
memslot_get_virt() check in red_get_image_data_flat() fail and
return a nullptr.

Then at red-parse-qxl.cpp#L550

        if (qxl_flags & QXL_BITMAP_UNSTABLE) {
            red->u.bitmap.data->flags |= SPICE_CHUNKS_FLAGS_UNSTABLE;
        }

qxl_flags is assigned as qxl->bitmap.flags before, which can also be
controlled by the attacker, resulting in a NULL pointer dereference.

This dereference seems to be introduced by commit 5ac88aa7.

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
2021-04-23 06:52:48 +01:00
Frediano Ziglio
848c231d63 syntax-check: Add missing contributor name to AUTHORS
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-23 06:52:48 +01:00
Frediano Ziglio
b24da37074 build: Disable default -Werror if source is a git repository
By default configure script detected if source directory is a
git repository and by default enable -Werror option.
This normally detects that you are developing but some build
packagers (like rpm spec with git_am option) uses git to manage
additional patches on top of source making the detection fail
and causing the build to fail.
Build packagers should not use -Werror.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-21 08:00:42 +00:00
Frediano Ziglio
ed25d920ea docs: Fix building manual with Meson from tarball
manual.conf needs to be distributed otherwise making manual
fails.

Avoids this failure

  FAILED: docs/manual/manual.chunked
  /usr/bin/a2x -f chunked -D /tmp/spice-0.15.0/meson/docs/manual -a data-uri -a icons -a toc ../docs/manual/manual.txt
  a2x: ERROR: "/usr/bin/asciidoc.py" --backend docbook -a "a2x-format=chunked"  --attribute "data-uri" --attribute "icons" --attribute "toc"  --out-file "/tmp/spice-0.15.0/meson/docs/manual/manual.xml" "/tmp/spice-0.15.0/docs/manual/manual.txt" returned non-zero exit status 1


Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-19 17:05:29 +01:00
Tomasz Kłoczko
79110cdf97 Add doxygen.sh to EXTRA_DIST
This commit fixes #56

Signed-off-by: Tomasz Kłoczko <kloczek@github.com>
2021-04-19 16:50:08 +01:00
Frediano Ziglio
f09b8e63bc syntax-check: Add missing contributor name to AUTHORS
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-19 16:50:08 +01:00
Roman Bogorodskiy
3c1d87ccfe Fix setsockopt on FreeBSD
FreeBSD's setsockopt() behaves just like Dawrin, i.e. sets errno to
EINVAL instead of ENOTSUP, so extend the Darwin workaround to work for
FreeBSD as well.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-17 13:19:17 +01:00
Roman Bogorodskiy
8b03c6fb64 red-stream: add missing include
On FreeBSD, netinet/in.h needs to be included to use IPPROTO_TCP.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-17 13:19:17 +01:00
Frediano Ziglio
9787df2ddd syntax-check: Add missing contributor name to AUTHORS
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-17 13:19:17 +01:00
Frediano Ziglio
2f42c1ca7d build: Prepare for 0.15 release
Mostly minor updates since 0.14.91.
See CHANGELOG.md.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-16 12:06:21 +01:00
Stefan Weil
691bd67ff8 Avoid build error caused by conflicting types for INT32
Compiler error for cross builds using mingw-w64:

In file included from /usr/share/mingw-w64/include/winnt.h:150,
                 from /usr/share/mingw-w64/include/minwindef.h:163,
                 from /usr/share/mingw-w64/include/windef.h:9,
                 from /usr/share/mingw-w64/include/windows.h:69,
                 from /usr/share/mingw-w64/include/winsock2.h:23,
                 from ../../../server/spice-core.h:29,
                 from ../../../server/spice.h:24,
                 from ../../../server/spice-wrapped.h:35,
                 from ../../../server/red-common.h:35,
                 from ../../../server/jpeg-encoder.c:22:
/usr/share/mingw-w64/include/basetsd.h:31:22: error: conflicting types for ‘INT32’
   typedef signed int INT32,*PINT32;
                      ^~~~~
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/jpeglib.h:31,
                 from ../../../server/jpeg-encoder.c:20:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/jmorecfg.h:179:14: note: previous declaration of ‘INT32’ was here
 typedef long INT32;
              ^~~~~

Signed-off-by: Stefan Weil <sw@weilnetz.de>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-15 08:51:44 +01:00
Marc-André Lureau
6e299f5081 Update spice-common
Frediano Ziglio (7):
      codegen: Remove bytes array length support
      codegen: Make "output_attrs" variable global
      codegen: Add a check to array type
      codegen: Propagate attributes to element under pointers
      codegen: Propagate zero_terminated attribute
      codegen: Handle zero_terminated attribute in demashaller
      helper-fuzzer-demarshallers: Check also test demarshallers
      Fix make distcheck

Marc-André Lureau (2):
      Fix invalid vdagent buffer access
      Fix build as meson subproject

Stefan Weil (1):
      Add missing include file string.h

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2021-04-14 21:43:06 +04:00
Frediano Ziglio
9bd0d5cc81 Fix failure strings in tests
Otherwise tests will fail due to source code change.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-14 19:05:09 +04:00
Rosen Penev
5f8d49efaa clang-tidy: remove pointless move
Found with performance-move-const-arg

Allows better optimization as the compiler does not have to deal with an
rvalue reference. Especially in C++17 where std::move can prevent copy
elision.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-14 13:07:40 +01:00
Rosen Penev
8af176b15e clang-tidy: use nullptr
Found with modernize-use-nullptr

NULL in C++ is 0 whereas it is a void pointer in C. Avoids implicit
conversions.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-12 06:50:05 +01:00
Rosen Penev
24dfe33c06 clang-tidy: use const reference for loop
Found with performance-for-range-copy

Avoids unnecessary copying when the loop does not modify the variable.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-12 06:50:03 +01:00
Rosen Penev
fc9ca6c71a clang-tidy: do not use else after return
Found with readability-else-after-return

Easier to read.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-04-11 07:49:21 +01:00
Rosen Penev
944dc8662e clang-tidy: use auto
Found with modernize-use-auto

auto is shorter and can sometimes disambiguate pointer constness.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-04-11 07:44:42 +01:00
Rosen Penev
04e885b291 clang-tidy: test for empty instead of size
Found with readability-container-size-empty

This has the potential for extra performance as it's not checking for
every single element.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-09 08:23:52 +01:00
Rosen Penev
23bd93bfb4 clang-tidy: use bool literals
Found with modernize-use-bool-literals

Avoids implicit conversions.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-09 08:21:48 +01:00
Rosen Penev
68b0f3029d clang-tidy: use const reference for loop
Found with performance-for-range-copy

Avoids unnecessary copying when the loop does not modify the variable.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Acked-by: Frediano Ziglio <freddy77@gmail.com>
2021-04-09 08:21:19 +01:00