From: Thomas Huth <[email protected]> pthread_join() stores the thread's return value (a "void *", i.e. 8 bytes on 64 bit computers) into the address of "status", but the "status" variable is declared as "int" with only 4 bytes. The extra four bytes clobber whatever is adjacent on the stack, which could silently corrupt other local variables. Use "intptr_t" to declare the "status" variables with the correct size.
Signed-off-by: Thomas Huth <[email protected]> --- tools/testing/selftests/nci/nci_dev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/nci/nci_dev.c b/tools/testing/selftests/nci/nci_dev.c index 312f84ee0444f..4e7a5856f7ea3 100644 --- a/tools/testing/selftests/nci/nci_dev.c +++ b/tools/testing/selftests/nci/nci_dev.c @@ -6,6 +6,7 @@ * Test code for nci */ +#include <stdint.h> #include <stdlib.h> #include <errno.h> #include <string.h> @@ -404,7 +405,7 @@ FIXTURE_SETUP(NCI) struct msgtemplate msg; pthread_t thread_t; __u32 event_group; - int status; + intptr_t status; int rc; self->open_state = false; @@ -497,7 +498,7 @@ static void *virtual_deinit_v2(void *data) FIXTURE_TEARDOWN(NCI) { pthread_t thread_t; - int status; + intptr_t status; int rc; if (self->open_state) { @@ -585,7 +586,7 @@ int start_polling(int dev_idx, int proto, int virtual_fd, int sd, int fid, int p void *nla_start_poll_data[2] = {&dev_idx, &proto}; int nla_start_poll_len[2] = {4, 4}; pthread_t thread_t; - int status; + intptr_t status; int rc; rc = pthread_create(&thread_t, NULL, virtual_poll_start, @@ -605,7 +606,7 @@ int start_polling(int dev_idx, int proto, int virtual_fd, int sd, int fid, int p int stop_polling(int dev_idx, int virtual_fd, int sd, int fid, int pid) { pthread_t thread_t; - int status; + intptr_t status; int rc; rc = pthread_create(&thread_t, NULL, virtual_poll_stop, @@ -816,7 +817,7 @@ int disconnect_tag(int nfc_sock, int virtual_fd) { pthread_t thread_t; char buf[256]; - int status; + intptr_t status; int len; send(nfc_sock, &nci_t4t_select_cmd3[3], sizeof(nci_t4t_select_cmd3) - 3, 0); @@ -860,7 +861,7 @@ TEST_F(NCI, deinit) { struct msgtemplate msg; pthread_t thread_t; - int status; + intptr_t status; int rc; rc = get_nci_devid(self->sd, self->fid, self->pid, self->dev_idex, -- 2.55.0

