[Openvpn-devel,v2] dco-win: use proper calling convention on x86

Message ID 20230131125448.1913-1-lstipakov@gmail.com
State Accepted
Headers show
Series [Openvpn-devel,v2] dco-win: use proper calling convention on x86 | expand

Commit Message

Lev Stipakov Jan. 31, 2023, 12:54 p.m. UTC
From: Lev Stipakov <lev@openvpn.net>

WinAPI uses __stdcall calling convention on x86. Wrong
calling convention causes UB, which in this case breaks
dco-win functionality.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
---
 v2:
  - use WINAPI instead of __stdcall
  - replace another existing occurence of __stdcall with WINAPI
  - uncrustify

 src/openvpn/dco_win.c | 2 +-
 src/openvpn/win32.c   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Gert Doering Feb. 13, 2023, 7:05 p.m. UTC | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

I'm no windows expert, but googling says "this is what you do for
windows function calls".  MinGW compiles without complaints, as
does GHA.

The GetOverlappedResultEx() can be cleaned up as soon as we drop
Windows 7 support, not sure about the IsWow64Process2() thing.

Can we add windows/x64 tests to the GHA automated windows build/test
thing?  Or do we even have some, the errors just do not make it back?

Your patch has been applied to the master and release/2.6 branch.

commit b78360875cfe2f3ffc0d0aa0785ba3070b597da6 (master)
commit 3c02417c95567dcbc3eafe25c28451fb39005f43 (release/2.6)
Author: Lev Stipakov
Date:   Tue Jan 31 14:54:48 2023 +0200

     dco-win: use proper calling convention on x86

     Signed-off-by: Lev Stipakov <lev@openvpn.net>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20230131125448.1913-1-lstipakov@gmail.com>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26113.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/dco_win.c b/src/openvpn/dco_win.c
index 7594024c..0931fb30 100644
--- a/src/openvpn/dco_win.c
+++ b/src/openvpn/dco_win.c
@@ -110,7 +110,7 @@  dco_connect_wait(HANDLE handle, OVERLAPPED *ov, int timeout, struct signal_info
 {
     volatile int *signal_received = &sig_info->signal_received;
     /* GetOverlappedResultEx is available starting from Windows 8 */
-    typedef BOOL (*get_overlapped_result_ex_t) (HANDLE, LPOVERLAPPED, LPDWORD, DWORD, BOOL);
+    typedef BOOL (WINAPI *get_overlapped_result_ex_t)(HANDLE, LPOVERLAPPED, LPDWORD, DWORD, BOOL);
     get_overlapped_result_ex_t get_overlapped_result_ex =
         (get_overlapped_result_ex_t)GetProcAddress(GetModuleHandle("Kernel32.dll"),
                                                    "GetOverlappedResultEx");
diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c
index 44176936..6d482ef8 100644
--- a/src/openvpn/win32.c
+++ b/src/openvpn/win32.c
@@ -1352,7 +1352,7 @@  win32_get_arch(arch_t *process_arch, arch_t *host_arch)
     *process_arch = ARCH_UNKNOWN;
     *host_arch = ARCH_NATIVE;
 
-    typedef BOOL (__stdcall *is_wow64_process2_t)(HANDLE, USHORT *, USHORT *);
+    typedef BOOL (WINAPI *is_wow64_process2_t)(HANDLE, USHORT *, USHORT *);
     is_wow64_process2_t is_wow64_process2 = (is_wow64_process2_t)
                                             GetProcAddress(GetModuleHandle("Kernel32.dll"), "IsWow64Process2");