[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] io/channel-socket: Fix -fsanitize=undefined problem with latest
From: |
Thomas Huth |
Subject: |
[PATCH] io/channel-socket: Fix -fsanitize=undefined problem with latest Clang |
Date: |
Wed, 29 May 2024 15:31:06 +0200 |
Casting function pointers from one type to another causes undefined
behavior errors when compiling with -fsanitize=undefined with Clang v18:
$ QTEST_QEMU_BINARY=./qemu-system-mips64 tests/qtest/netdev-socket
TAP version 13
# random seed: R02S4424f4f460de783fdd3d72c5571d3adc
1..10
# Start of mips64 tests
# Start of netdev tests
# Start of stream tests
# starting QEMU: exec ./qemu-system-mips64 -qtest unix:/tmp/qtest-1213196.sock
-qtest-log /dev/null -chardev socket,path=/tmp/qtest-1213196.qmp,id=char0 -mon
chardev=char0,mode=control -display none -audio none -nodefaults -M none
-netdev stream,id=st0,addr.type=fd,addr.str=3 -accel qtest
../io/task.c:78:13: runtime error: call to function qapi_free_SocketAddress
through pointer to incorrect function type 'void (*)(void *)'
/tmp/qemu-sanitize/qapi/qapi-types-sockets.c:170: note:
qapi_free_SocketAddress defined here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../io/task.c:78:13
Add a wrapper function to avoid the problem.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
io/channel-socket.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/io/channel-socket.c b/io/channel-socket.c
index 3a899b0608..aa2a1c8586 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -193,6 +193,10 @@ static void qio_channel_socket_connect_worker(QIOTask
*task,
qio_task_set_error(task, err);
}
+static void qio_qapi_free_SocketAddress(gpointer sa)
+{
+ qapi_free_SocketAddress(sa);
+}
void qio_channel_socket_connect_async(QIOChannelSocket *ioc,
SocketAddress *addr,
@@ -213,7 +217,7 @@ void qio_channel_socket_connect_async(QIOChannelSocket *ioc,
qio_task_run_in_thread(task,
qio_channel_socket_connect_worker,
addrCopy,
- (GDestroyNotify)qapi_free_SocketAddress,
+ qio_qapi_free_SocketAddress,
context);
}
--
2.45.1
- [PATCH] io/channel-socket: Fix -fsanitize=undefined problem with latest Clang,
Thomas Huth <=