blob: 687eb359cfd9bbd0fa422994734bf93a21920471 [file] [log] [blame]
Andrew Geissler595f6302022-01-24 19:11:47 +00001From d54e532821d40f8094a49742831d32ec7e76caed Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Thu, 16 Dec 2021 15:18:21 -0800
4Subject: [PATCH] kcapi-kernel-if: Adjust for musl msghdr struct compatibility
5
6musl sticks to POSIX and defines msg_iovlen and msg_controllen as int
7and socklen_t types respectively whereas glibc and kernel mark them as
8size_t which is them assumed as such in the code here as well, Make the
9needed conversions to get it going on musl/linux also see [1] for more
10info
11
12[1] https://git.musl-libc.org/cgit/musl/commit/?id=7168790763cdeb794df52be6e3b39fbb021c5a64
13
14Upstream-Status: Submitted [https://github.com/smuellerDD/libkcapi/pull/131]
15Signed-off-by: Khem Raj <raj.khem@gmail.com>
16---
17 lib/kcapi-kernel-if.c | 22 ++++++++++++++++++----
18 1 file changed, 18 insertions(+), 4 deletions(-)
19
20diff --git a/lib/kcapi-kernel-if.c b/lib/kcapi-kernel-if.c
21index 739841e..e5d15d4 100644
22--- a/lib/kcapi-kernel-if.c
23+++ b/lib/kcapi-kernel-if.c
24@@ -168,10 +168,14 @@ ssize_t _kcapi_common_send_meta(struct kcapi_handle *handle,
25 }
26
27 msg.msg_control = buffer_p;
28- msg.msg_controllen = bufferlen;
29 msg.msg_iov = iov;
30+#ifdef __GLIBC__
31 msg.msg_iovlen = iovlen;
32-
33+ msg.msg_controllen = bufferlen;
34+#else
35+ msg.msg_iovlen = (int)iovlen;
36+ msg.msg_controllen = (socklen_t)bufferlen;
37+#endif
38 /* encrypt/decrypt operation */
39 header = CMSG_FIRSTHDR(&msg);
40 if (!header) {
41@@ -193,7 +197,11 @@ ssize_t _kcapi_common_send_meta(struct kcapi_handle *handle,
42 }
43 header->cmsg_level = SOL_ALG;
44 header->cmsg_type = ALG_SET_IV;
45+#ifdef __GLIBC__
46 header->cmsg_len = iv_msg_size;
47+#else
48+ header->cmsg_len = (socklen_t)iv_msg_size;
49+#endif
50 alg_iv = (void*)CMSG_DATA(header);
51 alg_iv->ivlen = tfm->info.ivsize;
52 memcpy(alg_iv->iv, handle->cipher.iv, tfm->info.ivsize);
53@@ -244,8 +252,11 @@ ssize_t _kcapi_common_send_data(struct kcapi_handle *handle,
54 msg.msg_controllen = 0;
55 msg.msg_flags = 0;
56 msg.msg_iov = iov;
57+#ifdef __GLIBC__
58 msg.msg_iovlen = iovlen;
59-
60+#else
61+ msg.msg_iovlen = (int)iovlen;
62+#endif
63 ret = sendmsg(*_kcapi_get_opfd(handle), &msg, (int)flags);
64 if (ret < 0)
65 ret = -errno;
66@@ -542,8 +553,11 @@ ssize_t _kcapi_common_recv_data(struct kcapi_handle *handle,
67 msg.msg_controllen = 0;
68 msg.msg_flags = 0;
69 msg.msg_iov = iov;
70+#ifdef __GLIBC__
71 msg.msg_iovlen = iovlen;
72-
73+#else
74+ msg.msg_iovlen = (int)iovlen;
75+#endif
76 ret = recvmsg(*_kcapi_get_opfd(handle), &msg, 0);
77 if (ret < 0)
78 ret = -errno;
79--
802.34.1
81