tls.c 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209
  1. // SPDX-License-Identifier: GPL-2.0
  2. #define _GNU_SOURCE
  3. #include <arpa/inet.h>
  4. #include <errno.h>
  5. #include <error.h>
  6. #include <fcntl.h>
  7. #include <poll.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #include <linux/tls.h>
  12. #include <linux/tcp.h>
  13. #include <linux/socket.h>
  14. #include <sys/epoll.h>
  15. #include <sys/types.h>
  16. #include <sys/sendfile.h>
  17. #include <sys/socket.h>
  18. #include <sys/stat.h>
  19. #include "../kselftest_harness.h"
  20. #define TLS_PAYLOAD_MAX_LEN 16384
  21. #define SOL_TLS 282
  22. static int fips_enabled;
  23. struct tls_crypto_info_keys {
  24. union {
  25. struct tls_crypto_info crypto_info;
  26. struct tls12_crypto_info_aes_gcm_128 aes128;
  27. struct tls12_crypto_info_chacha20_poly1305 chacha20;
  28. struct tls12_crypto_info_sm4_gcm sm4gcm;
  29. struct tls12_crypto_info_sm4_ccm sm4ccm;
  30. struct tls12_crypto_info_aes_ccm_128 aesccm128;
  31. struct tls12_crypto_info_aes_gcm_256 aesgcm256;
  32. struct tls12_crypto_info_aria_gcm_128 ariagcm128;
  33. struct tls12_crypto_info_aria_gcm_256 ariagcm256;
  34. };
  35. size_t len;
  36. };
  37. static void tls_crypto_info_init(uint16_t tls_version, uint16_t cipher_type,
  38. struct tls_crypto_info_keys *tls12)
  39. {
  40. memset(tls12, 0, sizeof(*tls12));
  41. switch (cipher_type) {
  42. case TLS_CIPHER_CHACHA20_POLY1305:
  43. tls12->len = sizeof(struct tls12_crypto_info_chacha20_poly1305);
  44. tls12->chacha20.info.version = tls_version;
  45. tls12->chacha20.info.cipher_type = cipher_type;
  46. break;
  47. case TLS_CIPHER_AES_GCM_128:
  48. tls12->len = sizeof(struct tls12_crypto_info_aes_gcm_128);
  49. tls12->aes128.info.version = tls_version;
  50. tls12->aes128.info.cipher_type = cipher_type;
  51. break;
  52. case TLS_CIPHER_SM4_GCM:
  53. tls12->len = sizeof(struct tls12_crypto_info_sm4_gcm);
  54. tls12->sm4gcm.info.version = tls_version;
  55. tls12->sm4gcm.info.cipher_type = cipher_type;
  56. break;
  57. case TLS_CIPHER_SM4_CCM:
  58. tls12->len = sizeof(struct tls12_crypto_info_sm4_ccm);
  59. tls12->sm4ccm.info.version = tls_version;
  60. tls12->sm4ccm.info.cipher_type = cipher_type;
  61. break;
  62. case TLS_CIPHER_AES_CCM_128:
  63. tls12->len = sizeof(struct tls12_crypto_info_aes_ccm_128);
  64. tls12->aesccm128.info.version = tls_version;
  65. tls12->aesccm128.info.cipher_type = cipher_type;
  66. break;
  67. case TLS_CIPHER_AES_GCM_256:
  68. tls12->len = sizeof(struct tls12_crypto_info_aes_gcm_256);
  69. tls12->aesgcm256.info.version = tls_version;
  70. tls12->aesgcm256.info.cipher_type = cipher_type;
  71. break;
  72. case TLS_CIPHER_ARIA_GCM_128:
  73. tls12->len = sizeof(struct tls12_crypto_info_aria_gcm_128);
  74. tls12->ariagcm128.info.version = tls_version;
  75. tls12->ariagcm128.info.cipher_type = cipher_type;
  76. break;
  77. case TLS_CIPHER_ARIA_GCM_256:
  78. tls12->len = sizeof(struct tls12_crypto_info_aria_gcm_256);
  79. tls12->ariagcm256.info.version = tls_version;
  80. tls12->ariagcm256.info.cipher_type = cipher_type;
  81. break;
  82. default:
  83. break;
  84. }
  85. }
  86. static void memrnd(void *s, size_t n)
  87. {
  88. int *dword = s;
  89. char *byte;
  90. for (; n >= 4; n -= 4)
  91. *dword++ = rand();
  92. byte = (void *)dword;
  93. while (n--)
  94. *byte++ = rand();
  95. }
  96. static void ulp_sock_pair(struct __test_metadata *_metadata,
  97. int *fd, int *cfd, bool *notls)
  98. {
  99. struct sockaddr_in addr;
  100. socklen_t len;
  101. int sfd, ret;
  102. *notls = false;
  103. len = sizeof(addr);
  104. addr.sin_family = AF_INET;
  105. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  106. addr.sin_port = 0;
  107. *fd = socket(AF_INET, SOCK_STREAM, 0);
  108. sfd = socket(AF_INET, SOCK_STREAM, 0);
  109. ret = bind(sfd, &addr, sizeof(addr));
  110. ASSERT_EQ(ret, 0);
  111. ret = listen(sfd, 10);
  112. ASSERT_EQ(ret, 0);
  113. ret = getsockname(sfd, &addr, &len);
  114. ASSERT_EQ(ret, 0);
  115. ret = connect(*fd, &addr, sizeof(addr));
  116. ASSERT_EQ(ret, 0);
  117. *cfd = accept(sfd, &addr, &len);
  118. ASSERT_GE(*cfd, 0);
  119. close(sfd);
  120. ret = setsockopt(*fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  121. if (ret != 0) {
  122. ASSERT_EQ(errno, ENOENT);
  123. *notls = true;
  124. printf("Failure setting TCP_ULP, testing without tls\n");
  125. return;
  126. }
  127. ret = setsockopt(*cfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  128. ASSERT_EQ(ret, 0);
  129. }
  130. /* Produce a basic cmsg */
  131. static int tls_send_cmsg(int fd, unsigned char record_type,
  132. void *data, size_t len, int flags)
  133. {
  134. char cbuf[CMSG_SPACE(sizeof(char))];
  135. int cmsg_len = sizeof(char);
  136. struct cmsghdr *cmsg;
  137. struct msghdr msg;
  138. struct iovec vec;
  139. vec.iov_base = data;
  140. vec.iov_len = len;
  141. memset(&msg, 0, sizeof(struct msghdr));
  142. msg.msg_iov = &vec;
  143. msg.msg_iovlen = 1;
  144. msg.msg_control = cbuf;
  145. msg.msg_controllen = sizeof(cbuf);
  146. cmsg = CMSG_FIRSTHDR(&msg);
  147. cmsg->cmsg_level = SOL_TLS;
  148. /* test sending non-record types. */
  149. cmsg->cmsg_type = TLS_SET_RECORD_TYPE;
  150. cmsg->cmsg_len = CMSG_LEN(cmsg_len);
  151. *CMSG_DATA(cmsg) = record_type;
  152. msg.msg_controllen = cmsg->cmsg_len;
  153. return sendmsg(fd, &msg, flags);
  154. }
  155. static int tls_recv_cmsg(struct __test_metadata *_metadata,
  156. int fd, unsigned char record_type,
  157. void *data, size_t len, int flags)
  158. {
  159. char cbuf[CMSG_SPACE(sizeof(char))];
  160. struct cmsghdr *cmsg;
  161. unsigned char ctype;
  162. struct msghdr msg;
  163. struct iovec vec;
  164. int n;
  165. vec.iov_base = data;
  166. vec.iov_len = len;
  167. memset(&msg, 0, sizeof(struct msghdr));
  168. msg.msg_iov = &vec;
  169. msg.msg_iovlen = 1;
  170. msg.msg_control = cbuf;
  171. msg.msg_controllen = sizeof(cbuf);
  172. n = recvmsg(fd, &msg, flags);
  173. cmsg = CMSG_FIRSTHDR(&msg);
  174. EXPECT_NE(cmsg, NULL);
  175. EXPECT_EQ(cmsg->cmsg_level, SOL_TLS);
  176. EXPECT_EQ(cmsg->cmsg_type, TLS_GET_RECORD_TYPE);
  177. ctype = *((unsigned char *)CMSG_DATA(cmsg));
  178. EXPECT_EQ(ctype, record_type);
  179. return n;
  180. }
  181. FIXTURE(tls_basic)
  182. {
  183. int fd, cfd;
  184. bool notls;
  185. };
  186. FIXTURE_SETUP(tls_basic)
  187. {
  188. ulp_sock_pair(_metadata, &self->fd, &self->cfd, &self->notls);
  189. }
  190. FIXTURE_TEARDOWN(tls_basic)
  191. {
  192. close(self->fd);
  193. close(self->cfd);
  194. }
  195. /* Send some data through with ULP but no keys */
  196. TEST_F(tls_basic, base_base)
  197. {
  198. char const *test_str = "test_read";
  199. int send_len = 10;
  200. char buf[10];
  201. ASSERT_EQ(strlen(test_str) + 1, send_len);
  202. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  203. EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
  204. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  205. };
  206. TEST_F(tls_basic, bad_cipher)
  207. {
  208. struct tls_crypto_info_keys tls12;
  209. tls12.crypto_info.version = 200;
  210. tls12.crypto_info.cipher_type = TLS_CIPHER_AES_GCM_128;
  211. EXPECT_EQ(setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, sizeof(struct tls12_crypto_info_aes_gcm_128)), -1);
  212. tls12.crypto_info.version = TLS_1_2_VERSION;
  213. tls12.crypto_info.cipher_type = 50;
  214. EXPECT_EQ(setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, sizeof(struct tls12_crypto_info_aes_gcm_128)), -1);
  215. tls12.crypto_info.version = TLS_1_2_VERSION;
  216. tls12.crypto_info.cipher_type = 59;
  217. EXPECT_EQ(setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, sizeof(struct tls12_crypto_info_aes_gcm_128)), -1);
  218. tls12.crypto_info.version = TLS_1_2_VERSION;
  219. tls12.crypto_info.cipher_type = 10;
  220. EXPECT_EQ(setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, sizeof(struct tls12_crypto_info_aes_gcm_128)), -1);
  221. tls12.crypto_info.version = TLS_1_2_VERSION;
  222. tls12.crypto_info.cipher_type = 70;
  223. EXPECT_EQ(setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, sizeof(struct tls12_crypto_info_aes_gcm_128)), -1);
  224. }
  225. FIXTURE(tls)
  226. {
  227. int fd, cfd;
  228. bool notls;
  229. };
  230. FIXTURE_VARIANT(tls)
  231. {
  232. uint16_t tls_version;
  233. uint16_t cipher_type;
  234. bool nopad, fips_non_compliant;
  235. };
  236. FIXTURE_VARIANT_ADD(tls, 12_aes_gcm)
  237. {
  238. .tls_version = TLS_1_2_VERSION,
  239. .cipher_type = TLS_CIPHER_AES_GCM_128,
  240. };
  241. FIXTURE_VARIANT_ADD(tls, 13_aes_gcm)
  242. {
  243. .tls_version = TLS_1_3_VERSION,
  244. .cipher_type = TLS_CIPHER_AES_GCM_128,
  245. };
  246. FIXTURE_VARIANT_ADD(tls, 12_chacha)
  247. {
  248. .tls_version = TLS_1_2_VERSION,
  249. .cipher_type = TLS_CIPHER_CHACHA20_POLY1305,
  250. .fips_non_compliant = true,
  251. };
  252. FIXTURE_VARIANT_ADD(tls, 13_chacha)
  253. {
  254. .tls_version = TLS_1_3_VERSION,
  255. .cipher_type = TLS_CIPHER_CHACHA20_POLY1305,
  256. .fips_non_compliant = true,
  257. };
  258. FIXTURE_VARIANT_ADD(tls, 13_sm4_gcm)
  259. {
  260. .tls_version = TLS_1_3_VERSION,
  261. .cipher_type = TLS_CIPHER_SM4_GCM,
  262. .fips_non_compliant = true,
  263. };
  264. FIXTURE_VARIANT_ADD(tls, 13_sm4_ccm)
  265. {
  266. .tls_version = TLS_1_3_VERSION,
  267. .cipher_type = TLS_CIPHER_SM4_CCM,
  268. .fips_non_compliant = true,
  269. };
  270. FIXTURE_VARIANT_ADD(tls, 12_aes_ccm)
  271. {
  272. .tls_version = TLS_1_2_VERSION,
  273. .cipher_type = TLS_CIPHER_AES_CCM_128,
  274. };
  275. FIXTURE_VARIANT_ADD(tls, 13_aes_ccm)
  276. {
  277. .tls_version = TLS_1_3_VERSION,
  278. .cipher_type = TLS_CIPHER_AES_CCM_128,
  279. };
  280. FIXTURE_VARIANT_ADD(tls, 12_aes_gcm_256)
  281. {
  282. .tls_version = TLS_1_2_VERSION,
  283. .cipher_type = TLS_CIPHER_AES_GCM_256,
  284. };
  285. FIXTURE_VARIANT_ADD(tls, 13_aes_gcm_256)
  286. {
  287. .tls_version = TLS_1_3_VERSION,
  288. .cipher_type = TLS_CIPHER_AES_GCM_256,
  289. };
  290. FIXTURE_VARIANT_ADD(tls, 13_nopad)
  291. {
  292. .tls_version = TLS_1_3_VERSION,
  293. .cipher_type = TLS_CIPHER_AES_GCM_128,
  294. .nopad = true,
  295. };
  296. FIXTURE_VARIANT_ADD(tls, 12_aria_gcm)
  297. {
  298. .tls_version = TLS_1_2_VERSION,
  299. .cipher_type = TLS_CIPHER_ARIA_GCM_128,
  300. };
  301. FIXTURE_VARIANT_ADD(tls, 12_aria_gcm_256)
  302. {
  303. .tls_version = TLS_1_2_VERSION,
  304. .cipher_type = TLS_CIPHER_ARIA_GCM_256,
  305. };
  306. FIXTURE_SETUP(tls)
  307. {
  308. struct tls_crypto_info_keys tls12;
  309. int one = 1;
  310. int ret;
  311. if (fips_enabled && variant->fips_non_compliant)
  312. SKIP(return, "Unsupported cipher in FIPS mode");
  313. tls_crypto_info_init(variant->tls_version, variant->cipher_type,
  314. &tls12);
  315. ulp_sock_pair(_metadata, &self->fd, &self->cfd, &self->notls);
  316. if (self->notls)
  317. return;
  318. ret = setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, tls12.len);
  319. ASSERT_EQ(ret, 0);
  320. ret = setsockopt(self->cfd, SOL_TLS, TLS_RX, &tls12, tls12.len);
  321. ASSERT_EQ(ret, 0);
  322. if (variant->nopad) {
  323. ret = setsockopt(self->cfd, SOL_TLS, TLS_RX_EXPECT_NO_PAD,
  324. (void *)&one, sizeof(one));
  325. ASSERT_EQ(ret, 0);
  326. }
  327. }
  328. FIXTURE_TEARDOWN(tls)
  329. {
  330. close(self->fd);
  331. close(self->cfd);
  332. }
  333. TEST_F(tls, sendfile)
  334. {
  335. int filefd = open("/proc/self/exe", O_RDONLY);
  336. struct stat st;
  337. EXPECT_GE(filefd, 0);
  338. fstat(filefd, &st);
  339. EXPECT_GE(sendfile(self->fd, filefd, 0, st.st_size), 0);
  340. }
  341. TEST_F(tls, send_then_sendfile)
  342. {
  343. int filefd = open("/proc/self/exe", O_RDONLY);
  344. char const *test_str = "test_send";
  345. int to_send = strlen(test_str) + 1;
  346. char recv_buf[10];
  347. struct stat st;
  348. char *buf;
  349. EXPECT_GE(filefd, 0);
  350. fstat(filefd, &st);
  351. buf = (char *)malloc(st.st_size);
  352. EXPECT_EQ(send(self->fd, test_str, to_send, 0), to_send);
  353. EXPECT_EQ(recv(self->cfd, recv_buf, to_send, MSG_WAITALL), to_send);
  354. EXPECT_EQ(memcmp(test_str, recv_buf, to_send), 0);
  355. EXPECT_GE(sendfile(self->fd, filefd, 0, st.st_size), 0);
  356. EXPECT_EQ(recv(self->cfd, buf, st.st_size, MSG_WAITALL), st.st_size);
  357. }
  358. static void chunked_sendfile(struct __test_metadata *_metadata,
  359. struct _test_data_tls *self,
  360. uint16_t chunk_size,
  361. uint16_t extra_payload_size)
  362. {
  363. char buf[TLS_PAYLOAD_MAX_LEN];
  364. uint16_t test_payload_size;
  365. int size = 0;
  366. int ret;
  367. char filename[] = "/tmp/mytemp.XXXXXX";
  368. int fd = mkstemp(filename);
  369. off_t offset = 0;
  370. unlink(filename);
  371. ASSERT_GE(fd, 0);
  372. EXPECT_GE(chunk_size, 1);
  373. test_payload_size = chunk_size + extra_payload_size;
  374. ASSERT_GE(TLS_PAYLOAD_MAX_LEN, test_payload_size);
  375. memset(buf, 1, test_payload_size);
  376. size = write(fd, buf, test_payload_size);
  377. EXPECT_EQ(size, test_payload_size);
  378. fsync(fd);
  379. while (size > 0) {
  380. ret = sendfile(self->fd, fd, &offset, chunk_size);
  381. EXPECT_GE(ret, 0);
  382. size -= ret;
  383. }
  384. EXPECT_EQ(recv(self->cfd, buf, test_payload_size, MSG_WAITALL),
  385. test_payload_size);
  386. close(fd);
  387. }
  388. TEST_F(tls, multi_chunk_sendfile)
  389. {
  390. chunked_sendfile(_metadata, self, 4096, 4096);
  391. chunked_sendfile(_metadata, self, 4096, 0);
  392. chunked_sendfile(_metadata, self, 4096, 1);
  393. chunked_sendfile(_metadata, self, 4096, 2048);
  394. chunked_sendfile(_metadata, self, 8192, 2048);
  395. chunked_sendfile(_metadata, self, 4096, 8192);
  396. chunked_sendfile(_metadata, self, 8192, 4096);
  397. chunked_sendfile(_metadata, self, 12288, 1024);
  398. chunked_sendfile(_metadata, self, 12288, 2000);
  399. chunked_sendfile(_metadata, self, 15360, 100);
  400. chunked_sendfile(_metadata, self, 15360, 300);
  401. chunked_sendfile(_metadata, self, 1, 4096);
  402. chunked_sendfile(_metadata, self, 2048, 4096);
  403. chunked_sendfile(_metadata, self, 2048, 8192);
  404. chunked_sendfile(_metadata, self, 4096, 8192);
  405. chunked_sendfile(_metadata, self, 1024, 12288);
  406. chunked_sendfile(_metadata, self, 2000, 12288);
  407. chunked_sendfile(_metadata, self, 100, 15360);
  408. chunked_sendfile(_metadata, self, 300, 15360);
  409. }
  410. TEST_F(tls, recv_max)
  411. {
  412. unsigned int send_len = TLS_PAYLOAD_MAX_LEN;
  413. char recv_mem[TLS_PAYLOAD_MAX_LEN];
  414. char buf[TLS_PAYLOAD_MAX_LEN];
  415. memrnd(buf, sizeof(buf));
  416. EXPECT_GE(send(self->fd, buf, send_len, 0), 0);
  417. EXPECT_NE(recv(self->cfd, recv_mem, send_len, 0), -1);
  418. EXPECT_EQ(memcmp(buf, recv_mem, send_len), 0);
  419. }
  420. TEST_F(tls, recv_small)
  421. {
  422. char const *test_str = "test_read";
  423. int send_len = 10;
  424. char buf[10];
  425. send_len = strlen(test_str) + 1;
  426. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  427. EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
  428. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  429. }
  430. TEST_F(tls, msg_more)
  431. {
  432. char const *test_str = "test_read";
  433. int send_len = 10;
  434. char buf[10 * 2];
  435. EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
  436. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_DONTWAIT), -1);
  437. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  438. EXPECT_EQ(recv(self->cfd, buf, send_len * 2, MSG_WAITALL),
  439. send_len * 2);
  440. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  441. }
  442. TEST_F(tls, msg_more_unsent)
  443. {
  444. char const *test_str = "test_read";
  445. int send_len = 10;
  446. char buf[10];
  447. EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
  448. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_DONTWAIT), -1);
  449. }
  450. TEST_F(tls, msg_eor)
  451. {
  452. char const *test_str = "test_read";
  453. int send_len = 10;
  454. char buf[10];
  455. EXPECT_EQ(send(self->fd, test_str, send_len, MSG_EOR), send_len);
  456. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_WAITALL), send_len);
  457. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  458. }
  459. TEST_F(tls, sendmsg_single)
  460. {
  461. struct msghdr msg;
  462. char const *test_str = "test_sendmsg";
  463. size_t send_len = 13;
  464. struct iovec vec;
  465. char buf[13];
  466. vec.iov_base = (char *)test_str;
  467. vec.iov_len = send_len;
  468. memset(&msg, 0, sizeof(struct msghdr));
  469. msg.msg_iov = &vec;
  470. msg.msg_iovlen = 1;
  471. EXPECT_EQ(sendmsg(self->fd, &msg, 0), send_len);
  472. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_WAITALL), send_len);
  473. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  474. }
  475. #define MAX_FRAGS 64
  476. #define SEND_LEN 13
  477. TEST_F(tls, sendmsg_fragmented)
  478. {
  479. char const *test_str = "test_sendmsg";
  480. char buf[SEND_LEN * MAX_FRAGS];
  481. struct iovec vec[MAX_FRAGS];
  482. struct msghdr msg;
  483. int i, frags;
  484. for (frags = 1; frags <= MAX_FRAGS; frags++) {
  485. for (i = 0; i < frags; i++) {
  486. vec[i].iov_base = (char *)test_str;
  487. vec[i].iov_len = SEND_LEN;
  488. }
  489. memset(&msg, 0, sizeof(struct msghdr));
  490. msg.msg_iov = vec;
  491. msg.msg_iovlen = frags;
  492. EXPECT_EQ(sendmsg(self->fd, &msg, 0), SEND_LEN * frags);
  493. EXPECT_EQ(recv(self->cfd, buf, SEND_LEN * frags, MSG_WAITALL),
  494. SEND_LEN * frags);
  495. for (i = 0; i < frags; i++)
  496. EXPECT_EQ(memcmp(buf + SEND_LEN * i,
  497. test_str, SEND_LEN), 0);
  498. }
  499. }
  500. #undef MAX_FRAGS
  501. #undef SEND_LEN
  502. TEST_F(tls, sendmsg_large)
  503. {
  504. void *mem = malloc(16384);
  505. size_t send_len = 16384;
  506. size_t sends = 128;
  507. struct msghdr msg;
  508. size_t recvs = 0;
  509. size_t sent = 0;
  510. memset(&msg, 0, sizeof(struct msghdr));
  511. while (sent++ < sends) {
  512. struct iovec vec = { (void *)mem, send_len };
  513. msg.msg_iov = &vec;
  514. msg.msg_iovlen = 1;
  515. EXPECT_EQ(sendmsg(self->fd, &msg, 0), send_len);
  516. }
  517. while (recvs++ < sends) {
  518. EXPECT_NE(recv(self->cfd, mem, send_len, 0), -1);
  519. }
  520. free(mem);
  521. }
  522. TEST_F(tls, sendmsg_multiple)
  523. {
  524. char const *test_str = "test_sendmsg_multiple";
  525. struct iovec vec[5];
  526. char *test_strs[5];
  527. struct msghdr msg;
  528. int total_len = 0;
  529. int len_cmp = 0;
  530. int iov_len = 5;
  531. char *buf;
  532. int i;
  533. memset(&msg, 0, sizeof(struct msghdr));
  534. for (i = 0; i < iov_len; i++) {
  535. test_strs[i] = (char *)malloc(strlen(test_str) + 1);
  536. snprintf(test_strs[i], strlen(test_str) + 1, "%s", test_str);
  537. vec[i].iov_base = (void *)test_strs[i];
  538. vec[i].iov_len = strlen(test_strs[i]) + 1;
  539. total_len += vec[i].iov_len;
  540. }
  541. msg.msg_iov = vec;
  542. msg.msg_iovlen = iov_len;
  543. EXPECT_EQ(sendmsg(self->fd, &msg, 0), total_len);
  544. buf = malloc(total_len);
  545. EXPECT_NE(recv(self->cfd, buf, total_len, 0), -1);
  546. for (i = 0; i < iov_len; i++) {
  547. EXPECT_EQ(memcmp(test_strs[i], buf + len_cmp,
  548. strlen(test_strs[i])),
  549. 0);
  550. len_cmp += strlen(buf + len_cmp) + 1;
  551. }
  552. for (i = 0; i < iov_len; i++)
  553. free(test_strs[i]);
  554. free(buf);
  555. }
  556. TEST_F(tls, sendmsg_multiple_stress)
  557. {
  558. char const *test_str = "abcdefghijklmno";
  559. struct iovec vec[1024];
  560. char *test_strs[1024];
  561. int iov_len = 1024;
  562. int total_len = 0;
  563. char buf[1 << 14];
  564. struct msghdr msg;
  565. int len_cmp = 0;
  566. int i;
  567. memset(&msg, 0, sizeof(struct msghdr));
  568. for (i = 0; i < iov_len; i++) {
  569. test_strs[i] = (char *)malloc(strlen(test_str) + 1);
  570. snprintf(test_strs[i], strlen(test_str) + 1, "%s", test_str);
  571. vec[i].iov_base = (void *)test_strs[i];
  572. vec[i].iov_len = strlen(test_strs[i]) + 1;
  573. total_len += vec[i].iov_len;
  574. }
  575. msg.msg_iov = vec;
  576. msg.msg_iovlen = iov_len;
  577. EXPECT_EQ(sendmsg(self->fd, &msg, 0), total_len);
  578. EXPECT_NE(recv(self->cfd, buf, total_len, 0), -1);
  579. for (i = 0; i < iov_len; i++)
  580. len_cmp += strlen(buf + len_cmp) + 1;
  581. for (i = 0; i < iov_len; i++)
  582. free(test_strs[i]);
  583. }
  584. TEST_F(tls, splice_from_pipe)
  585. {
  586. int send_len = TLS_PAYLOAD_MAX_LEN;
  587. char mem_send[TLS_PAYLOAD_MAX_LEN];
  588. char mem_recv[TLS_PAYLOAD_MAX_LEN];
  589. int p[2];
  590. ASSERT_GE(pipe(p), 0);
  591. EXPECT_GE(write(p[1], mem_send, send_len), 0);
  592. EXPECT_GE(splice(p[0], NULL, self->fd, NULL, send_len, 0), 0);
  593. EXPECT_EQ(recv(self->cfd, mem_recv, send_len, MSG_WAITALL), send_len);
  594. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  595. }
  596. TEST_F(tls, splice_more)
  597. {
  598. unsigned int f = SPLICE_F_NONBLOCK | SPLICE_F_MORE | SPLICE_F_GIFT;
  599. int send_len = TLS_PAYLOAD_MAX_LEN;
  600. char mem_send[TLS_PAYLOAD_MAX_LEN];
  601. int i, send_pipe = 1;
  602. int p[2];
  603. ASSERT_GE(pipe(p), 0);
  604. EXPECT_GE(write(p[1], mem_send, send_len), 0);
  605. for (i = 0; i < 32; i++)
  606. EXPECT_EQ(splice(p[0], NULL, self->fd, NULL, send_pipe, f), 1);
  607. }
  608. TEST_F(tls, splice_from_pipe2)
  609. {
  610. int send_len = 16000;
  611. char mem_send[16000];
  612. char mem_recv[16000];
  613. int p2[2];
  614. int p[2];
  615. memrnd(mem_send, sizeof(mem_send));
  616. ASSERT_GE(pipe(p), 0);
  617. ASSERT_GE(pipe(p2), 0);
  618. EXPECT_EQ(write(p[1], mem_send, 8000), 8000);
  619. EXPECT_EQ(splice(p[0], NULL, self->fd, NULL, 8000, 0), 8000);
  620. EXPECT_EQ(write(p2[1], mem_send + 8000, 8000), 8000);
  621. EXPECT_EQ(splice(p2[0], NULL, self->fd, NULL, 8000, 0), 8000);
  622. EXPECT_EQ(recv(self->cfd, mem_recv, send_len, MSG_WAITALL), send_len);
  623. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  624. }
  625. TEST_F(tls, send_and_splice)
  626. {
  627. int send_len = TLS_PAYLOAD_MAX_LEN;
  628. char mem_send[TLS_PAYLOAD_MAX_LEN];
  629. char mem_recv[TLS_PAYLOAD_MAX_LEN];
  630. char const *test_str = "test_read";
  631. int send_len2 = 10;
  632. char buf[10];
  633. int p[2];
  634. ASSERT_GE(pipe(p), 0);
  635. EXPECT_EQ(send(self->fd, test_str, send_len2, 0), send_len2);
  636. EXPECT_EQ(recv(self->cfd, buf, send_len2, MSG_WAITALL), send_len2);
  637. EXPECT_EQ(memcmp(test_str, buf, send_len2), 0);
  638. EXPECT_GE(write(p[1], mem_send, send_len), send_len);
  639. EXPECT_GE(splice(p[0], NULL, self->fd, NULL, send_len, 0), send_len);
  640. EXPECT_EQ(recv(self->cfd, mem_recv, send_len, MSG_WAITALL), send_len);
  641. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  642. }
  643. TEST_F(tls, splice_to_pipe)
  644. {
  645. int send_len = TLS_PAYLOAD_MAX_LEN;
  646. char mem_send[TLS_PAYLOAD_MAX_LEN];
  647. char mem_recv[TLS_PAYLOAD_MAX_LEN];
  648. int p[2];
  649. memrnd(mem_send, sizeof(mem_send));
  650. ASSERT_GE(pipe(p), 0);
  651. EXPECT_EQ(send(self->fd, mem_send, send_len, 0), send_len);
  652. EXPECT_EQ(splice(self->cfd, NULL, p[1], NULL, send_len, 0), send_len);
  653. EXPECT_EQ(read(p[0], mem_recv, send_len), send_len);
  654. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  655. }
  656. TEST_F(tls, splice_cmsg_to_pipe)
  657. {
  658. char *test_str = "test_read";
  659. char record_type = 100;
  660. int send_len = 10;
  661. char buf[10];
  662. int p[2];
  663. if (self->notls)
  664. SKIP(return, "no TLS support");
  665. ASSERT_GE(pipe(p), 0);
  666. EXPECT_EQ(tls_send_cmsg(self->fd, 100, test_str, send_len, 0), 10);
  667. EXPECT_EQ(splice(self->cfd, NULL, p[1], NULL, send_len, 0), -1);
  668. EXPECT_EQ(errno, EINVAL);
  669. EXPECT_EQ(recv(self->cfd, buf, send_len, 0), -1);
  670. EXPECT_EQ(errno, EIO);
  671. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, record_type,
  672. buf, sizeof(buf), MSG_WAITALL),
  673. send_len);
  674. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  675. }
  676. TEST_F(tls, splice_dec_cmsg_to_pipe)
  677. {
  678. char *test_str = "test_read";
  679. char record_type = 100;
  680. int send_len = 10;
  681. char buf[10];
  682. int p[2];
  683. if (self->notls)
  684. SKIP(return, "no TLS support");
  685. ASSERT_GE(pipe(p), 0);
  686. EXPECT_EQ(tls_send_cmsg(self->fd, 100, test_str, send_len, 0), 10);
  687. EXPECT_EQ(recv(self->cfd, buf, send_len, 0), -1);
  688. EXPECT_EQ(errno, EIO);
  689. EXPECT_EQ(splice(self->cfd, NULL, p[1], NULL, send_len, 0), -1);
  690. EXPECT_EQ(errno, EINVAL);
  691. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, record_type,
  692. buf, sizeof(buf), MSG_WAITALL),
  693. send_len);
  694. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  695. }
  696. TEST_F(tls, recv_and_splice)
  697. {
  698. int send_len = TLS_PAYLOAD_MAX_LEN;
  699. char mem_send[TLS_PAYLOAD_MAX_LEN];
  700. char mem_recv[TLS_PAYLOAD_MAX_LEN];
  701. int half = send_len / 2;
  702. int p[2];
  703. ASSERT_GE(pipe(p), 0);
  704. EXPECT_EQ(send(self->fd, mem_send, send_len, 0), send_len);
  705. /* Recv hald of the record, splice the other half */
  706. EXPECT_EQ(recv(self->cfd, mem_recv, half, MSG_WAITALL), half);
  707. EXPECT_EQ(splice(self->cfd, NULL, p[1], NULL, half, SPLICE_F_NONBLOCK),
  708. half);
  709. EXPECT_EQ(read(p[0], &mem_recv[half], half), half);
  710. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  711. }
  712. TEST_F(tls, peek_and_splice)
  713. {
  714. int send_len = TLS_PAYLOAD_MAX_LEN;
  715. char mem_send[TLS_PAYLOAD_MAX_LEN];
  716. char mem_recv[TLS_PAYLOAD_MAX_LEN];
  717. int chunk = TLS_PAYLOAD_MAX_LEN / 4;
  718. int n, i, p[2];
  719. memrnd(mem_send, sizeof(mem_send));
  720. ASSERT_GE(pipe(p), 0);
  721. for (i = 0; i < 4; i++)
  722. EXPECT_EQ(send(self->fd, &mem_send[chunk * i], chunk, 0),
  723. chunk);
  724. EXPECT_EQ(recv(self->cfd, mem_recv, chunk * 5 / 2,
  725. MSG_WAITALL | MSG_PEEK),
  726. chunk * 5 / 2);
  727. EXPECT_EQ(memcmp(mem_send, mem_recv, chunk * 5 / 2), 0);
  728. n = 0;
  729. while (n < send_len) {
  730. i = splice(self->cfd, NULL, p[1], NULL, send_len - n, 0);
  731. EXPECT_GT(i, 0);
  732. n += i;
  733. }
  734. EXPECT_EQ(n, send_len);
  735. EXPECT_EQ(read(p[0], mem_recv, send_len), send_len);
  736. EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
  737. }
  738. TEST_F(tls, recvmsg_single)
  739. {
  740. char const *test_str = "test_recvmsg_single";
  741. int send_len = strlen(test_str) + 1;
  742. char buf[20];
  743. struct msghdr hdr;
  744. struct iovec vec;
  745. memset(&hdr, 0, sizeof(hdr));
  746. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  747. vec.iov_base = (char *)buf;
  748. vec.iov_len = send_len;
  749. hdr.msg_iovlen = 1;
  750. hdr.msg_iov = &vec;
  751. EXPECT_NE(recvmsg(self->cfd, &hdr, 0), -1);
  752. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  753. }
  754. TEST_F(tls, recvmsg_single_max)
  755. {
  756. int send_len = TLS_PAYLOAD_MAX_LEN;
  757. char send_mem[TLS_PAYLOAD_MAX_LEN];
  758. char recv_mem[TLS_PAYLOAD_MAX_LEN];
  759. struct iovec vec;
  760. struct msghdr hdr;
  761. memrnd(send_mem, sizeof(send_mem));
  762. EXPECT_EQ(send(self->fd, send_mem, send_len, 0), send_len);
  763. vec.iov_base = (char *)recv_mem;
  764. vec.iov_len = TLS_PAYLOAD_MAX_LEN;
  765. hdr.msg_iovlen = 1;
  766. hdr.msg_iov = &vec;
  767. EXPECT_NE(recvmsg(self->cfd, &hdr, 0), -1);
  768. EXPECT_EQ(memcmp(send_mem, recv_mem, send_len), 0);
  769. }
  770. TEST_F(tls, recvmsg_multiple)
  771. {
  772. unsigned int msg_iovlen = 1024;
  773. struct iovec vec[1024];
  774. char *iov_base[1024];
  775. unsigned int iov_len = 16;
  776. int send_len = 1 << 14;
  777. char buf[1 << 14];
  778. struct msghdr hdr;
  779. int i;
  780. memrnd(buf, sizeof(buf));
  781. EXPECT_EQ(send(self->fd, buf, send_len, 0), send_len);
  782. for (i = 0; i < msg_iovlen; i++) {
  783. iov_base[i] = (char *)malloc(iov_len);
  784. vec[i].iov_base = iov_base[i];
  785. vec[i].iov_len = iov_len;
  786. }
  787. hdr.msg_iovlen = msg_iovlen;
  788. hdr.msg_iov = vec;
  789. EXPECT_NE(recvmsg(self->cfd, &hdr, 0), -1);
  790. for (i = 0; i < msg_iovlen; i++)
  791. free(iov_base[i]);
  792. }
  793. TEST_F(tls, single_send_multiple_recv)
  794. {
  795. unsigned int total_len = TLS_PAYLOAD_MAX_LEN * 2;
  796. unsigned int send_len = TLS_PAYLOAD_MAX_LEN;
  797. char send_mem[TLS_PAYLOAD_MAX_LEN * 2];
  798. char recv_mem[TLS_PAYLOAD_MAX_LEN * 2];
  799. memrnd(send_mem, sizeof(send_mem));
  800. EXPECT_GE(send(self->fd, send_mem, total_len, 0), 0);
  801. memset(recv_mem, 0, total_len);
  802. EXPECT_NE(recv(self->cfd, recv_mem, send_len, 0), -1);
  803. EXPECT_NE(recv(self->cfd, recv_mem + send_len, send_len, 0), -1);
  804. EXPECT_EQ(memcmp(send_mem, recv_mem, total_len), 0);
  805. }
  806. TEST_F(tls, multiple_send_single_recv)
  807. {
  808. unsigned int total_len = 2 * 10;
  809. unsigned int send_len = 10;
  810. char recv_mem[2 * 10];
  811. char send_mem[10];
  812. memrnd(send_mem, sizeof(send_mem));
  813. EXPECT_GE(send(self->fd, send_mem, send_len, 0), 0);
  814. EXPECT_GE(send(self->fd, send_mem, send_len, 0), 0);
  815. memset(recv_mem, 0, total_len);
  816. EXPECT_EQ(recv(self->cfd, recv_mem, total_len, MSG_WAITALL), total_len);
  817. EXPECT_EQ(memcmp(send_mem, recv_mem, send_len), 0);
  818. EXPECT_EQ(memcmp(send_mem, recv_mem + send_len, send_len), 0);
  819. }
  820. TEST_F(tls, single_send_multiple_recv_non_align)
  821. {
  822. const unsigned int total_len = 15;
  823. const unsigned int recv_len = 10;
  824. char recv_mem[recv_len * 2];
  825. char send_mem[total_len];
  826. memrnd(send_mem, sizeof(send_mem));
  827. EXPECT_GE(send(self->fd, send_mem, total_len, 0), 0);
  828. memset(recv_mem, 0, total_len);
  829. EXPECT_EQ(recv(self->cfd, recv_mem, recv_len, 0), recv_len);
  830. EXPECT_EQ(recv(self->cfd, recv_mem + recv_len, recv_len, 0), 5);
  831. EXPECT_EQ(memcmp(send_mem, recv_mem, total_len), 0);
  832. }
  833. TEST_F(tls, recv_partial)
  834. {
  835. char const *test_str = "test_read_partial";
  836. char const *test_str_first = "test_read";
  837. char const *test_str_second = "_partial";
  838. int send_len = strlen(test_str) + 1;
  839. char recv_mem[18];
  840. memset(recv_mem, 0, sizeof(recv_mem));
  841. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  842. EXPECT_EQ(recv(self->cfd, recv_mem, strlen(test_str_first),
  843. MSG_WAITALL), strlen(test_str_first));
  844. EXPECT_EQ(memcmp(test_str_first, recv_mem, strlen(test_str_first)), 0);
  845. memset(recv_mem, 0, sizeof(recv_mem));
  846. EXPECT_EQ(recv(self->cfd, recv_mem, strlen(test_str_second),
  847. MSG_WAITALL), strlen(test_str_second));
  848. EXPECT_EQ(memcmp(test_str_second, recv_mem, strlen(test_str_second)),
  849. 0);
  850. }
  851. TEST_F(tls, recv_nonblock)
  852. {
  853. char buf[4096];
  854. bool err;
  855. EXPECT_EQ(recv(self->cfd, buf, sizeof(buf), MSG_DONTWAIT), -1);
  856. err = (errno == EAGAIN || errno == EWOULDBLOCK);
  857. EXPECT_EQ(err, true);
  858. }
  859. TEST_F(tls, recv_peek)
  860. {
  861. char const *test_str = "test_read_peek";
  862. int send_len = strlen(test_str) + 1;
  863. char buf[15];
  864. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  865. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_PEEK), send_len);
  866. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  867. memset(buf, 0, sizeof(buf));
  868. EXPECT_EQ(recv(self->cfd, buf, send_len, 0), send_len);
  869. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  870. }
  871. TEST_F(tls, recv_peek_multiple)
  872. {
  873. char const *test_str = "test_read_peek";
  874. int send_len = strlen(test_str) + 1;
  875. unsigned int num_peeks = 100;
  876. char buf[15];
  877. int i;
  878. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  879. for (i = 0; i < num_peeks; i++) {
  880. EXPECT_NE(recv(self->cfd, buf, send_len, MSG_PEEK), -1);
  881. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  882. memset(buf, 0, sizeof(buf));
  883. }
  884. EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
  885. EXPECT_EQ(memcmp(test_str, buf, send_len), 0);
  886. }
  887. TEST_F(tls, recv_peek_multiple_records)
  888. {
  889. char const *test_str = "test_read_peek_mult_recs";
  890. char const *test_str_first = "test_read_peek";
  891. char const *test_str_second = "_mult_recs";
  892. int len;
  893. char buf[64];
  894. len = strlen(test_str_first);
  895. EXPECT_EQ(send(self->fd, test_str_first, len, 0), len);
  896. len = strlen(test_str_second) + 1;
  897. EXPECT_EQ(send(self->fd, test_str_second, len, 0), len);
  898. len = strlen(test_str_first);
  899. memset(buf, 0, len);
  900. EXPECT_EQ(recv(self->cfd, buf, len, MSG_PEEK | MSG_WAITALL), len);
  901. /* MSG_PEEK can only peek into the current record. */
  902. len = strlen(test_str_first);
  903. EXPECT_EQ(memcmp(test_str_first, buf, len), 0);
  904. len = strlen(test_str) + 1;
  905. memset(buf, 0, len);
  906. EXPECT_EQ(recv(self->cfd, buf, len, MSG_WAITALL), len);
  907. /* Non-MSG_PEEK will advance strparser (and therefore record)
  908. * however.
  909. */
  910. len = strlen(test_str) + 1;
  911. EXPECT_EQ(memcmp(test_str, buf, len), 0);
  912. /* MSG_MORE will hold current record open, so later MSG_PEEK
  913. * will see everything.
  914. */
  915. len = strlen(test_str_first);
  916. EXPECT_EQ(send(self->fd, test_str_first, len, MSG_MORE), len);
  917. len = strlen(test_str_second) + 1;
  918. EXPECT_EQ(send(self->fd, test_str_second, len, 0), len);
  919. len = strlen(test_str) + 1;
  920. memset(buf, 0, len);
  921. EXPECT_EQ(recv(self->cfd, buf, len, MSG_PEEK | MSG_WAITALL), len);
  922. len = strlen(test_str) + 1;
  923. EXPECT_EQ(memcmp(test_str, buf, len), 0);
  924. }
  925. TEST_F(tls, recv_peek_large_buf_mult_recs)
  926. {
  927. char const *test_str = "test_read_peek_mult_recs";
  928. char const *test_str_first = "test_read_peek";
  929. char const *test_str_second = "_mult_recs";
  930. int len;
  931. char buf[64];
  932. len = strlen(test_str_first);
  933. EXPECT_EQ(send(self->fd, test_str_first, len, 0), len);
  934. len = strlen(test_str_second) + 1;
  935. EXPECT_EQ(send(self->fd, test_str_second, len, 0), len);
  936. len = strlen(test_str) + 1;
  937. memset(buf, 0, len);
  938. EXPECT_NE((len = recv(self->cfd, buf, len,
  939. MSG_PEEK | MSG_WAITALL)), -1);
  940. len = strlen(test_str) + 1;
  941. EXPECT_EQ(memcmp(test_str, buf, len), 0);
  942. }
  943. TEST_F(tls, recv_lowat)
  944. {
  945. char send_mem[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  946. char recv_mem[20];
  947. int lowat = 8;
  948. EXPECT_EQ(send(self->fd, send_mem, 10, 0), 10);
  949. EXPECT_EQ(send(self->fd, send_mem, 5, 0), 5);
  950. memset(recv_mem, 0, 20);
  951. EXPECT_EQ(setsockopt(self->cfd, SOL_SOCKET, SO_RCVLOWAT,
  952. &lowat, sizeof(lowat)), 0);
  953. EXPECT_EQ(recv(self->cfd, recv_mem, 1, MSG_WAITALL), 1);
  954. EXPECT_EQ(recv(self->cfd, recv_mem + 1, 6, MSG_WAITALL), 6);
  955. EXPECT_EQ(recv(self->cfd, recv_mem + 7, 10, 0), 8);
  956. EXPECT_EQ(memcmp(send_mem, recv_mem, 10), 0);
  957. EXPECT_EQ(memcmp(send_mem, recv_mem + 10, 5), 0);
  958. }
  959. TEST_F(tls, bidir)
  960. {
  961. char const *test_str = "test_read";
  962. int send_len = 10;
  963. char buf[10];
  964. int ret;
  965. if (!self->notls) {
  966. struct tls_crypto_info_keys tls12;
  967. tls_crypto_info_init(variant->tls_version, variant->cipher_type,
  968. &tls12);
  969. ret = setsockopt(self->fd, SOL_TLS, TLS_RX, &tls12,
  970. tls12.len);
  971. ASSERT_EQ(ret, 0);
  972. ret = setsockopt(self->cfd, SOL_TLS, TLS_TX, &tls12,
  973. tls12.len);
  974. ASSERT_EQ(ret, 0);
  975. }
  976. ASSERT_EQ(strlen(test_str) + 1, send_len);
  977. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  978. EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
  979. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  980. memset(buf, 0, sizeof(buf));
  981. EXPECT_EQ(send(self->cfd, test_str, send_len, 0), send_len);
  982. EXPECT_NE(recv(self->fd, buf, send_len, 0), -1);
  983. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  984. };
  985. TEST_F(tls, pollin)
  986. {
  987. char const *test_str = "test_poll";
  988. struct pollfd fd = { 0, 0, 0 };
  989. char buf[10];
  990. int send_len = 10;
  991. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  992. fd.fd = self->cfd;
  993. fd.events = POLLIN;
  994. EXPECT_EQ(poll(&fd, 1, 20), 1);
  995. EXPECT_EQ(fd.revents & POLLIN, 1);
  996. EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_WAITALL), send_len);
  997. /* Test timing out */
  998. EXPECT_EQ(poll(&fd, 1, 20), 0);
  999. }
  1000. TEST_F(tls, poll_wait)
  1001. {
  1002. char const *test_str = "test_poll_wait";
  1003. int send_len = strlen(test_str) + 1;
  1004. struct pollfd fd = { 0, 0, 0 };
  1005. char recv_mem[15];
  1006. fd.fd = self->cfd;
  1007. fd.events = POLLIN;
  1008. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  1009. /* Set timeout to inf. secs */
  1010. EXPECT_EQ(poll(&fd, 1, -1), 1);
  1011. EXPECT_EQ(fd.revents & POLLIN, 1);
  1012. EXPECT_EQ(recv(self->cfd, recv_mem, send_len, MSG_WAITALL), send_len);
  1013. }
  1014. TEST_F(tls, poll_wait_split)
  1015. {
  1016. struct pollfd fd = { 0, 0, 0 };
  1017. char send_mem[20] = {};
  1018. char recv_mem[15];
  1019. fd.fd = self->cfd;
  1020. fd.events = POLLIN;
  1021. /* Send 20 bytes */
  1022. EXPECT_EQ(send(self->fd, send_mem, sizeof(send_mem), 0),
  1023. sizeof(send_mem));
  1024. /* Poll with inf. timeout */
  1025. EXPECT_EQ(poll(&fd, 1, -1), 1);
  1026. EXPECT_EQ(fd.revents & POLLIN, 1);
  1027. EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), MSG_WAITALL),
  1028. sizeof(recv_mem));
  1029. /* Now the remaining 5 bytes of record data are in TLS ULP */
  1030. fd.fd = self->cfd;
  1031. fd.events = POLLIN;
  1032. EXPECT_EQ(poll(&fd, 1, -1), 1);
  1033. EXPECT_EQ(fd.revents & POLLIN, 1);
  1034. EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), 0),
  1035. sizeof(send_mem) - sizeof(recv_mem));
  1036. }
  1037. TEST_F(tls, blocking)
  1038. {
  1039. size_t data = 100000;
  1040. int res = fork();
  1041. EXPECT_NE(res, -1);
  1042. if (res) {
  1043. /* parent */
  1044. size_t left = data;
  1045. char buf[16384];
  1046. int status;
  1047. int pid2;
  1048. while (left) {
  1049. int res = send(self->fd, buf,
  1050. left > 16384 ? 16384 : left, 0);
  1051. EXPECT_GE(res, 0);
  1052. left -= res;
  1053. }
  1054. pid2 = wait(&status);
  1055. EXPECT_EQ(status, 0);
  1056. EXPECT_EQ(res, pid2);
  1057. } else {
  1058. /* child */
  1059. size_t left = data;
  1060. char buf[16384];
  1061. while (left) {
  1062. int res = recv(self->cfd, buf,
  1063. left > 16384 ? 16384 : left, 0);
  1064. EXPECT_GE(res, 0);
  1065. left -= res;
  1066. }
  1067. }
  1068. }
  1069. TEST_F(tls, nonblocking)
  1070. {
  1071. size_t data = 100000;
  1072. int sendbuf = 100;
  1073. int flags;
  1074. int res;
  1075. flags = fcntl(self->fd, F_GETFL, 0);
  1076. fcntl(self->fd, F_SETFL, flags | O_NONBLOCK);
  1077. fcntl(self->cfd, F_SETFL, flags | O_NONBLOCK);
  1078. /* Ensure nonblocking behavior by imposing a small send
  1079. * buffer.
  1080. */
  1081. EXPECT_EQ(setsockopt(self->fd, SOL_SOCKET, SO_SNDBUF,
  1082. &sendbuf, sizeof(sendbuf)), 0);
  1083. res = fork();
  1084. EXPECT_NE(res, -1);
  1085. if (res) {
  1086. /* parent */
  1087. bool eagain = false;
  1088. size_t left = data;
  1089. char buf[16384];
  1090. int status;
  1091. int pid2;
  1092. while (left) {
  1093. int res = send(self->fd, buf,
  1094. left > 16384 ? 16384 : left, 0);
  1095. if (res == -1 && errno == EAGAIN) {
  1096. eagain = true;
  1097. usleep(10000);
  1098. continue;
  1099. }
  1100. EXPECT_GE(res, 0);
  1101. left -= res;
  1102. }
  1103. EXPECT_TRUE(eagain);
  1104. pid2 = wait(&status);
  1105. EXPECT_EQ(status, 0);
  1106. EXPECT_EQ(res, pid2);
  1107. } else {
  1108. /* child */
  1109. bool eagain = false;
  1110. size_t left = data;
  1111. char buf[16384];
  1112. while (left) {
  1113. int res = recv(self->cfd, buf,
  1114. left > 16384 ? 16384 : left, 0);
  1115. if (res == -1 && errno == EAGAIN) {
  1116. eagain = true;
  1117. usleep(10000);
  1118. continue;
  1119. }
  1120. EXPECT_GE(res, 0);
  1121. left -= res;
  1122. }
  1123. EXPECT_TRUE(eagain);
  1124. }
  1125. }
  1126. static void
  1127. test_mutliproc(struct __test_metadata *_metadata, struct _test_data_tls *self,
  1128. bool sendpg, unsigned int n_readers, unsigned int n_writers)
  1129. {
  1130. const unsigned int n_children = n_readers + n_writers;
  1131. const size_t data = 6 * 1000 * 1000;
  1132. const size_t file_sz = data / 100;
  1133. size_t read_bias, write_bias;
  1134. int i, fd, child_id;
  1135. char buf[file_sz];
  1136. pid_t pid;
  1137. /* Only allow multiples for simplicity */
  1138. ASSERT_EQ(!(n_readers % n_writers) || !(n_writers % n_readers), true);
  1139. read_bias = n_writers / n_readers ?: 1;
  1140. write_bias = n_readers / n_writers ?: 1;
  1141. /* prep a file to send */
  1142. fd = open("/tmp/", O_TMPFILE | O_RDWR, 0600);
  1143. ASSERT_GE(fd, 0);
  1144. memset(buf, 0xac, file_sz);
  1145. ASSERT_EQ(write(fd, buf, file_sz), file_sz);
  1146. /* spawn children */
  1147. for (child_id = 0; child_id < n_children; child_id++) {
  1148. pid = fork();
  1149. ASSERT_NE(pid, -1);
  1150. if (!pid)
  1151. break;
  1152. }
  1153. /* parent waits for all children */
  1154. if (pid) {
  1155. for (i = 0; i < n_children; i++) {
  1156. int status;
  1157. wait(&status);
  1158. EXPECT_EQ(status, 0);
  1159. }
  1160. return;
  1161. }
  1162. /* Split threads for reading and writing */
  1163. if (child_id < n_readers) {
  1164. size_t left = data * read_bias;
  1165. char rb[8001];
  1166. while (left) {
  1167. int res;
  1168. res = recv(self->cfd, rb,
  1169. left > sizeof(rb) ? sizeof(rb) : left, 0);
  1170. EXPECT_GE(res, 0);
  1171. left -= res;
  1172. }
  1173. } else {
  1174. size_t left = data * write_bias;
  1175. while (left) {
  1176. int res;
  1177. ASSERT_EQ(lseek(fd, 0, SEEK_SET), 0);
  1178. if (sendpg)
  1179. res = sendfile(self->fd, fd, NULL,
  1180. left > file_sz ? file_sz : left);
  1181. else
  1182. res = send(self->fd, buf,
  1183. left > file_sz ? file_sz : left, 0);
  1184. EXPECT_GE(res, 0);
  1185. left -= res;
  1186. }
  1187. }
  1188. }
  1189. TEST_F(tls, mutliproc_even)
  1190. {
  1191. test_mutliproc(_metadata, self, false, 6, 6);
  1192. }
  1193. TEST_F(tls, mutliproc_readers)
  1194. {
  1195. test_mutliproc(_metadata, self, false, 4, 12);
  1196. }
  1197. TEST_F(tls, mutliproc_writers)
  1198. {
  1199. test_mutliproc(_metadata, self, false, 10, 2);
  1200. }
  1201. TEST_F(tls, mutliproc_sendpage_even)
  1202. {
  1203. test_mutliproc(_metadata, self, true, 6, 6);
  1204. }
  1205. TEST_F(tls, mutliproc_sendpage_readers)
  1206. {
  1207. test_mutliproc(_metadata, self, true, 4, 12);
  1208. }
  1209. TEST_F(tls, mutliproc_sendpage_writers)
  1210. {
  1211. test_mutliproc(_metadata, self, true, 10, 2);
  1212. }
  1213. TEST_F(tls, control_msg)
  1214. {
  1215. char *test_str = "test_read";
  1216. char record_type = 100;
  1217. int send_len = 10;
  1218. char buf[10];
  1219. if (self->notls)
  1220. SKIP(return, "no TLS support");
  1221. EXPECT_EQ(tls_send_cmsg(self->fd, record_type, test_str, send_len, 0),
  1222. send_len);
  1223. /* Should fail because we didn't provide a control message */
  1224. EXPECT_EQ(recv(self->cfd, buf, send_len, 0), -1);
  1225. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, record_type,
  1226. buf, sizeof(buf), MSG_WAITALL | MSG_PEEK),
  1227. send_len);
  1228. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  1229. /* Recv the message again without MSG_PEEK */
  1230. memset(buf, 0, sizeof(buf));
  1231. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, record_type,
  1232. buf, sizeof(buf), MSG_WAITALL),
  1233. send_len);
  1234. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  1235. }
  1236. TEST_F(tls, control_msg_nomerge)
  1237. {
  1238. char *rec1 = "1111";
  1239. char *rec2 = "2222";
  1240. int send_len = 5;
  1241. char buf[15];
  1242. if (self->notls)
  1243. SKIP(return, "no TLS support");
  1244. EXPECT_EQ(tls_send_cmsg(self->fd, 100, rec1, send_len, 0), send_len);
  1245. EXPECT_EQ(tls_send_cmsg(self->fd, 100, rec2, send_len, 0), send_len);
  1246. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, 100, buf, sizeof(buf), MSG_PEEK), send_len);
  1247. EXPECT_EQ(memcmp(buf, rec1, send_len), 0);
  1248. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, 100, buf, sizeof(buf), MSG_PEEK), send_len);
  1249. EXPECT_EQ(memcmp(buf, rec1, send_len), 0);
  1250. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, 100, buf, sizeof(buf), 0), send_len);
  1251. EXPECT_EQ(memcmp(buf, rec1, send_len), 0);
  1252. EXPECT_EQ(tls_recv_cmsg(_metadata, self->cfd, 100, buf, sizeof(buf), 0), send_len);
  1253. EXPECT_EQ(memcmp(buf, rec2, send_len), 0);
  1254. }
  1255. TEST_F(tls, data_control_data)
  1256. {
  1257. char *rec1 = "1111";
  1258. char *rec2 = "2222";
  1259. char *rec3 = "3333";
  1260. int send_len = 5;
  1261. char buf[15];
  1262. if (self->notls)
  1263. SKIP(return, "no TLS support");
  1264. EXPECT_EQ(send(self->fd, rec1, send_len, 0), send_len);
  1265. EXPECT_EQ(tls_send_cmsg(self->fd, 100, rec2, send_len, 0), send_len);
  1266. EXPECT_EQ(send(self->fd, rec3, send_len, 0), send_len);
  1267. EXPECT_EQ(recv(self->cfd, buf, sizeof(buf), MSG_PEEK), send_len);
  1268. EXPECT_EQ(recv(self->cfd, buf, sizeof(buf), MSG_PEEK), send_len);
  1269. }
  1270. TEST_F(tls, shutdown)
  1271. {
  1272. char const *test_str = "test_read";
  1273. int send_len = 10;
  1274. char buf[10];
  1275. ASSERT_EQ(strlen(test_str) + 1, send_len);
  1276. EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
  1277. EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
  1278. EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
  1279. shutdown(self->fd, SHUT_RDWR);
  1280. shutdown(self->cfd, SHUT_RDWR);
  1281. }
  1282. TEST_F(tls, shutdown_unsent)
  1283. {
  1284. char const *test_str = "test_read";
  1285. int send_len = 10;
  1286. EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
  1287. shutdown(self->fd, SHUT_RDWR);
  1288. shutdown(self->cfd, SHUT_RDWR);
  1289. }
  1290. TEST_F(tls, shutdown_reuse)
  1291. {
  1292. struct sockaddr_in addr;
  1293. int ret;
  1294. shutdown(self->fd, SHUT_RDWR);
  1295. shutdown(self->cfd, SHUT_RDWR);
  1296. close(self->cfd);
  1297. addr.sin_family = AF_INET;
  1298. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  1299. addr.sin_port = 0;
  1300. ret = bind(self->fd, &addr, sizeof(addr));
  1301. EXPECT_EQ(ret, 0);
  1302. ret = listen(self->fd, 10);
  1303. EXPECT_EQ(ret, -1);
  1304. EXPECT_EQ(errno, EINVAL);
  1305. ret = connect(self->fd, &addr, sizeof(addr));
  1306. EXPECT_EQ(ret, -1);
  1307. EXPECT_EQ(errno, EISCONN);
  1308. }
  1309. TEST_F(tls, getsockopt)
  1310. {
  1311. struct tls_crypto_info_keys expect, get;
  1312. socklen_t len;
  1313. /* get only the version/cipher */
  1314. len = sizeof(struct tls_crypto_info);
  1315. memrnd(&get, sizeof(get));
  1316. EXPECT_EQ(getsockopt(self->fd, SOL_TLS, TLS_TX, &get, &len), 0);
  1317. EXPECT_EQ(len, sizeof(struct tls_crypto_info));
  1318. EXPECT_EQ(get.crypto_info.version, variant->tls_version);
  1319. EXPECT_EQ(get.crypto_info.cipher_type, variant->cipher_type);
  1320. /* get the full crypto_info */
  1321. tls_crypto_info_init(variant->tls_version, variant->cipher_type, &expect);
  1322. len = expect.len;
  1323. memrnd(&get, sizeof(get));
  1324. EXPECT_EQ(getsockopt(self->fd, SOL_TLS, TLS_TX, &get, &len), 0);
  1325. EXPECT_EQ(len, expect.len);
  1326. EXPECT_EQ(get.crypto_info.version, variant->tls_version);
  1327. EXPECT_EQ(get.crypto_info.cipher_type, variant->cipher_type);
  1328. EXPECT_EQ(memcmp(&get, &expect, expect.len), 0);
  1329. /* short get should fail */
  1330. len = sizeof(struct tls_crypto_info) - 1;
  1331. EXPECT_EQ(getsockopt(self->fd, SOL_TLS, TLS_TX, &get, &len), -1);
  1332. EXPECT_EQ(errno, EINVAL);
  1333. /* partial get of the cipher data should fail */
  1334. len = expect.len - 1;
  1335. EXPECT_EQ(getsockopt(self->fd, SOL_TLS, TLS_TX, &get, &len), -1);
  1336. EXPECT_EQ(errno, EINVAL);
  1337. }
  1338. TEST_F(tls, recv_efault)
  1339. {
  1340. char *rec1 = "1111111111";
  1341. char *rec2 = "2222222222";
  1342. struct msghdr hdr = {};
  1343. struct iovec iov[2];
  1344. char recv_mem[12];
  1345. int ret;
  1346. if (self->notls)
  1347. SKIP(return, "no TLS support");
  1348. EXPECT_EQ(send(self->fd, rec1, 10, 0), 10);
  1349. EXPECT_EQ(send(self->fd, rec2, 10, 0), 10);
  1350. iov[0].iov_base = recv_mem;
  1351. iov[0].iov_len = sizeof(recv_mem);
  1352. iov[1].iov_base = NULL; /* broken iov to make process_rx_list fail */
  1353. iov[1].iov_len = 1;
  1354. hdr.msg_iovlen = 2;
  1355. hdr.msg_iov = iov;
  1356. EXPECT_EQ(recv(self->cfd, recv_mem, 1, 0), 1);
  1357. EXPECT_EQ(recv_mem[0], rec1[0]);
  1358. ret = recvmsg(self->cfd, &hdr, 0);
  1359. EXPECT_LE(ret, sizeof(recv_mem));
  1360. EXPECT_GE(ret, 9);
  1361. EXPECT_EQ(memcmp(rec1, recv_mem, 9), 0);
  1362. if (ret > 9)
  1363. EXPECT_EQ(memcmp(rec2, recv_mem + 9, ret - 9), 0);
  1364. }
  1365. FIXTURE(tls_err)
  1366. {
  1367. int fd, cfd;
  1368. int fd2, cfd2;
  1369. bool notls;
  1370. };
  1371. FIXTURE_VARIANT(tls_err)
  1372. {
  1373. uint16_t tls_version;
  1374. };
  1375. FIXTURE_VARIANT_ADD(tls_err, 12_aes_gcm)
  1376. {
  1377. .tls_version = TLS_1_2_VERSION,
  1378. };
  1379. FIXTURE_VARIANT_ADD(tls_err, 13_aes_gcm)
  1380. {
  1381. .tls_version = TLS_1_3_VERSION,
  1382. };
  1383. FIXTURE_SETUP(tls_err)
  1384. {
  1385. struct tls_crypto_info_keys tls12;
  1386. int ret;
  1387. tls_crypto_info_init(variant->tls_version, TLS_CIPHER_AES_GCM_128,
  1388. &tls12);
  1389. ulp_sock_pair(_metadata, &self->fd, &self->cfd, &self->notls);
  1390. ulp_sock_pair(_metadata, &self->fd2, &self->cfd2, &self->notls);
  1391. if (self->notls)
  1392. return;
  1393. ret = setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, tls12.len);
  1394. ASSERT_EQ(ret, 0);
  1395. ret = setsockopt(self->cfd2, SOL_TLS, TLS_RX, &tls12, tls12.len);
  1396. ASSERT_EQ(ret, 0);
  1397. }
  1398. FIXTURE_TEARDOWN(tls_err)
  1399. {
  1400. close(self->fd);
  1401. close(self->cfd);
  1402. close(self->fd2);
  1403. close(self->cfd2);
  1404. }
  1405. TEST_F(tls_err, bad_rec)
  1406. {
  1407. char buf[64];
  1408. if (self->notls)
  1409. SKIP(return, "no TLS support");
  1410. memset(buf, 0x55, sizeof(buf));
  1411. EXPECT_EQ(send(self->fd2, buf, sizeof(buf), 0), sizeof(buf));
  1412. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1413. EXPECT_EQ(errno, EMSGSIZE);
  1414. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), MSG_DONTWAIT), -1);
  1415. EXPECT_EQ(errno, EAGAIN);
  1416. }
  1417. TEST_F(tls_err, bad_auth)
  1418. {
  1419. char buf[128];
  1420. int n;
  1421. if (self->notls)
  1422. SKIP(return, "no TLS support");
  1423. memrnd(buf, sizeof(buf) / 2);
  1424. EXPECT_EQ(send(self->fd, buf, sizeof(buf) / 2, 0), sizeof(buf) / 2);
  1425. n = recv(self->cfd, buf, sizeof(buf), 0);
  1426. EXPECT_GT(n, sizeof(buf) / 2);
  1427. buf[n - 1]++;
  1428. EXPECT_EQ(send(self->fd2, buf, n, 0), n);
  1429. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1430. EXPECT_EQ(errno, EBADMSG);
  1431. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1432. EXPECT_EQ(errno, EBADMSG);
  1433. }
  1434. TEST_F(tls_err, bad_in_large_read)
  1435. {
  1436. char txt[3][64];
  1437. char cip[3][128];
  1438. char buf[3 * 128];
  1439. int i, n;
  1440. if (self->notls)
  1441. SKIP(return, "no TLS support");
  1442. /* Put 3 records in the sockets */
  1443. for (i = 0; i < 3; i++) {
  1444. memrnd(txt[i], sizeof(txt[i]));
  1445. EXPECT_EQ(send(self->fd, txt[i], sizeof(txt[i]), 0),
  1446. sizeof(txt[i]));
  1447. n = recv(self->cfd, cip[i], sizeof(cip[i]), 0);
  1448. EXPECT_GT(n, sizeof(txt[i]));
  1449. /* Break the third message */
  1450. if (i == 2)
  1451. cip[2][n - 1]++;
  1452. EXPECT_EQ(send(self->fd2, cip[i], n, 0), n);
  1453. }
  1454. /* We should be able to receive the first two messages */
  1455. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), sizeof(txt[0]) * 2);
  1456. EXPECT_EQ(memcmp(buf, txt[0], sizeof(txt[0])), 0);
  1457. EXPECT_EQ(memcmp(buf + sizeof(txt[0]), txt[1], sizeof(txt[1])), 0);
  1458. /* Third mesasge is bad */
  1459. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1460. EXPECT_EQ(errno, EBADMSG);
  1461. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1462. EXPECT_EQ(errno, EBADMSG);
  1463. }
  1464. TEST_F(tls_err, bad_cmsg)
  1465. {
  1466. char *test_str = "test_read";
  1467. int send_len = 10;
  1468. char cip[128];
  1469. char buf[128];
  1470. char txt[64];
  1471. int n;
  1472. if (self->notls)
  1473. SKIP(return, "no TLS support");
  1474. /* Queue up one data record */
  1475. memrnd(txt, sizeof(txt));
  1476. EXPECT_EQ(send(self->fd, txt, sizeof(txt), 0), sizeof(txt));
  1477. n = recv(self->cfd, cip, sizeof(cip), 0);
  1478. EXPECT_GT(n, sizeof(txt));
  1479. EXPECT_EQ(send(self->fd2, cip, n, 0), n);
  1480. EXPECT_EQ(tls_send_cmsg(self->fd, 100, test_str, send_len, 0), 10);
  1481. n = recv(self->cfd, cip, sizeof(cip), 0);
  1482. cip[n - 1]++; /* Break it */
  1483. EXPECT_GT(n, send_len);
  1484. EXPECT_EQ(send(self->fd2, cip, n, 0), n);
  1485. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), sizeof(txt));
  1486. EXPECT_EQ(memcmp(buf, txt, sizeof(txt)), 0);
  1487. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1488. EXPECT_EQ(errno, EBADMSG);
  1489. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1490. EXPECT_EQ(errno, EBADMSG);
  1491. }
  1492. TEST_F(tls_err, timeo)
  1493. {
  1494. struct timeval tv = { .tv_usec = 10000, };
  1495. char buf[128];
  1496. int ret;
  1497. if (self->notls)
  1498. SKIP(return, "no TLS support");
  1499. ret = setsockopt(self->cfd2, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
  1500. ASSERT_EQ(ret, 0);
  1501. ret = fork();
  1502. ASSERT_GE(ret, 0);
  1503. if (ret) {
  1504. usleep(1000); /* Give child a head start */
  1505. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1506. EXPECT_EQ(errno, EAGAIN);
  1507. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1508. EXPECT_EQ(errno, EAGAIN);
  1509. wait(&ret);
  1510. } else {
  1511. EXPECT_EQ(recv(self->cfd2, buf, sizeof(buf), 0), -1);
  1512. EXPECT_EQ(errno, EAGAIN);
  1513. exit(0);
  1514. }
  1515. }
  1516. TEST_F(tls_err, poll_partial_rec)
  1517. {
  1518. struct pollfd pfd = { };
  1519. ssize_t rec_len;
  1520. char rec[256];
  1521. char buf[128];
  1522. if (self->notls)
  1523. SKIP(return, "no TLS support");
  1524. pfd.fd = self->cfd2;
  1525. pfd.events = POLLIN;
  1526. EXPECT_EQ(poll(&pfd, 1, 1), 0);
  1527. memrnd(buf, sizeof(buf));
  1528. EXPECT_EQ(send(self->fd, buf, sizeof(buf), 0), sizeof(buf));
  1529. rec_len = recv(self->cfd, rec, sizeof(rec), 0);
  1530. EXPECT_GT(rec_len, sizeof(buf));
  1531. /* Write 100B, not the full record ... */
  1532. EXPECT_EQ(send(self->fd2, rec, 100, 0), 100);
  1533. /* ... no full record should mean no POLLIN */
  1534. pfd.fd = self->cfd2;
  1535. pfd.events = POLLIN;
  1536. EXPECT_EQ(poll(&pfd, 1, 1), 0);
  1537. /* Now write the rest, and it should all pop out of the other end. */
  1538. EXPECT_EQ(send(self->fd2, rec + 100, rec_len - 100, 0), rec_len - 100);
  1539. pfd.fd = self->cfd2;
  1540. pfd.events = POLLIN;
  1541. EXPECT_EQ(poll(&pfd, 1, 1), 1);
  1542. EXPECT_EQ(recv(self->cfd2, rec, sizeof(rec), 0), sizeof(buf));
  1543. EXPECT_EQ(memcmp(buf, rec, sizeof(buf)), 0);
  1544. }
  1545. TEST_F(tls_err, epoll_partial_rec)
  1546. {
  1547. struct epoll_event ev, events[10];
  1548. ssize_t rec_len;
  1549. char rec[256];
  1550. char buf[128];
  1551. int epollfd;
  1552. if (self->notls)
  1553. SKIP(return, "no TLS support");
  1554. epollfd = epoll_create1(0);
  1555. ASSERT_GE(epollfd, 0);
  1556. memset(&ev, 0, sizeof(ev));
  1557. ev.events = EPOLLIN;
  1558. ev.data.fd = self->cfd2;
  1559. ASSERT_GE(epoll_ctl(epollfd, EPOLL_CTL_ADD, self->cfd2, &ev), 0);
  1560. EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 0);
  1561. memrnd(buf, sizeof(buf));
  1562. EXPECT_EQ(send(self->fd, buf, sizeof(buf), 0), sizeof(buf));
  1563. rec_len = recv(self->cfd, rec, sizeof(rec), 0);
  1564. EXPECT_GT(rec_len, sizeof(buf));
  1565. /* Write 100B, not the full record ... */
  1566. EXPECT_EQ(send(self->fd2, rec, 100, 0), 100);
  1567. /* ... no full record should mean no POLLIN */
  1568. EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 0);
  1569. /* Now write the rest, and it should all pop out of the other end. */
  1570. EXPECT_EQ(send(self->fd2, rec + 100, rec_len - 100, 0), rec_len - 100);
  1571. EXPECT_EQ(epoll_wait(epollfd, events, 10, 0), 1);
  1572. EXPECT_EQ(recv(self->cfd2, rec, sizeof(rec), 0), sizeof(buf));
  1573. EXPECT_EQ(memcmp(buf, rec, sizeof(buf)), 0);
  1574. close(epollfd);
  1575. }
  1576. TEST_F(tls_err, poll_partial_rec_async)
  1577. {
  1578. struct pollfd pfd = { };
  1579. ssize_t rec_len;
  1580. char rec[256];
  1581. char buf[128];
  1582. char token;
  1583. int p[2];
  1584. int ret;
  1585. if (self->notls)
  1586. SKIP(return, "no TLS support");
  1587. ASSERT_GE(pipe(p), 0);
  1588. memrnd(buf, sizeof(buf));
  1589. EXPECT_EQ(send(self->fd, buf, sizeof(buf), 0), sizeof(buf));
  1590. rec_len = recv(self->cfd, rec, sizeof(rec), 0);
  1591. EXPECT_GT(rec_len, sizeof(buf));
  1592. ret = fork();
  1593. ASSERT_GE(ret, 0);
  1594. if (ret) {
  1595. int status, pid2;
  1596. close(p[1]);
  1597. usleep(1000); /* Give child a head start */
  1598. EXPECT_EQ(send(self->fd2, rec, 100, 0), 100);
  1599. EXPECT_EQ(read(p[0], &token, 1), 1); /* Barrier #1 */
  1600. EXPECT_EQ(send(self->fd2, rec + 100, rec_len - 100, 0),
  1601. rec_len - 100);
  1602. pid2 = wait(&status);
  1603. EXPECT_EQ(pid2, ret);
  1604. EXPECT_EQ(status, 0);
  1605. } else {
  1606. close(p[0]);
  1607. /* Child should sleep in poll(), never get a wake */
  1608. pfd.fd = self->cfd2;
  1609. pfd.events = POLLIN;
  1610. EXPECT_EQ(poll(&pfd, 1, 20), 0);
  1611. EXPECT_EQ(write(p[1], &token, 1), 1); /* Barrier #1 */
  1612. pfd.fd = self->cfd2;
  1613. pfd.events = POLLIN;
  1614. EXPECT_EQ(poll(&pfd, 1, 20), 1);
  1615. exit(!__test_passed(_metadata));
  1616. }
  1617. }
  1618. TEST(non_established) {
  1619. struct tls12_crypto_info_aes_gcm_256 tls12;
  1620. struct sockaddr_in addr;
  1621. int sfd, ret, fd;
  1622. socklen_t len;
  1623. len = sizeof(addr);
  1624. memset(&tls12, 0, sizeof(tls12));
  1625. tls12.info.version = TLS_1_2_VERSION;
  1626. tls12.info.cipher_type = TLS_CIPHER_AES_GCM_256;
  1627. addr.sin_family = AF_INET;
  1628. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  1629. addr.sin_port = 0;
  1630. fd = socket(AF_INET, SOCK_STREAM, 0);
  1631. sfd = socket(AF_INET, SOCK_STREAM, 0);
  1632. ret = bind(sfd, &addr, sizeof(addr));
  1633. ASSERT_EQ(ret, 0);
  1634. ret = listen(sfd, 10);
  1635. ASSERT_EQ(ret, 0);
  1636. ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1637. EXPECT_EQ(ret, -1);
  1638. /* TLS ULP not supported */
  1639. if (errno == ENOENT)
  1640. return;
  1641. EXPECT_EQ(errno, ENOTCONN);
  1642. ret = setsockopt(sfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1643. EXPECT_EQ(ret, -1);
  1644. EXPECT_EQ(errno, ENOTCONN);
  1645. ret = getsockname(sfd, &addr, &len);
  1646. ASSERT_EQ(ret, 0);
  1647. ret = connect(fd, &addr, sizeof(addr));
  1648. ASSERT_EQ(ret, 0);
  1649. ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1650. ASSERT_EQ(ret, 0);
  1651. ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1652. EXPECT_EQ(ret, -1);
  1653. EXPECT_EQ(errno, EEXIST);
  1654. close(fd);
  1655. close(sfd);
  1656. }
  1657. TEST(keysizes) {
  1658. struct tls12_crypto_info_aes_gcm_256 tls12;
  1659. int ret, fd, cfd;
  1660. bool notls;
  1661. memset(&tls12, 0, sizeof(tls12));
  1662. tls12.info.version = TLS_1_2_VERSION;
  1663. tls12.info.cipher_type = TLS_CIPHER_AES_GCM_256;
  1664. ulp_sock_pair(_metadata, &fd, &cfd, &notls);
  1665. if (!notls) {
  1666. ret = setsockopt(fd, SOL_TLS, TLS_TX, &tls12,
  1667. sizeof(tls12));
  1668. EXPECT_EQ(ret, 0);
  1669. ret = setsockopt(cfd, SOL_TLS, TLS_RX, &tls12,
  1670. sizeof(tls12));
  1671. EXPECT_EQ(ret, 0);
  1672. }
  1673. close(fd);
  1674. close(cfd);
  1675. }
  1676. TEST(no_pad) {
  1677. struct tls12_crypto_info_aes_gcm_256 tls12;
  1678. int ret, fd, cfd, val;
  1679. socklen_t len;
  1680. bool notls;
  1681. memset(&tls12, 0, sizeof(tls12));
  1682. tls12.info.version = TLS_1_3_VERSION;
  1683. tls12.info.cipher_type = TLS_CIPHER_AES_GCM_256;
  1684. ulp_sock_pair(_metadata, &fd, &cfd, &notls);
  1685. if (notls)
  1686. exit(KSFT_SKIP);
  1687. ret = setsockopt(fd, SOL_TLS, TLS_TX, &tls12, sizeof(tls12));
  1688. EXPECT_EQ(ret, 0);
  1689. ret = setsockopt(cfd, SOL_TLS, TLS_RX, &tls12, sizeof(tls12));
  1690. EXPECT_EQ(ret, 0);
  1691. val = 1;
  1692. ret = setsockopt(cfd, SOL_TLS, TLS_RX_EXPECT_NO_PAD,
  1693. (void *)&val, sizeof(val));
  1694. EXPECT_EQ(ret, 0);
  1695. len = sizeof(val);
  1696. val = 2;
  1697. ret = getsockopt(cfd, SOL_TLS, TLS_RX_EXPECT_NO_PAD,
  1698. (void *)&val, &len);
  1699. EXPECT_EQ(ret, 0);
  1700. EXPECT_EQ(val, 1);
  1701. EXPECT_EQ(len, 4);
  1702. val = 0;
  1703. ret = setsockopt(cfd, SOL_TLS, TLS_RX_EXPECT_NO_PAD,
  1704. (void *)&val, sizeof(val));
  1705. EXPECT_EQ(ret, 0);
  1706. len = sizeof(val);
  1707. val = 2;
  1708. ret = getsockopt(cfd, SOL_TLS, TLS_RX_EXPECT_NO_PAD,
  1709. (void *)&val, &len);
  1710. EXPECT_EQ(ret, 0);
  1711. EXPECT_EQ(val, 0);
  1712. EXPECT_EQ(len, 4);
  1713. close(fd);
  1714. close(cfd);
  1715. }
  1716. TEST(tls_v6ops) {
  1717. struct tls_crypto_info_keys tls12;
  1718. struct sockaddr_in6 addr, addr2;
  1719. int sfd, ret, fd;
  1720. socklen_t len, len2;
  1721. tls_crypto_info_init(TLS_1_2_VERSION, TLS_CIPHER_AES_GCM_128, &tls12);
  1722. addr.sin6_family = AF_INET6;
  1723. addr.sin6_addr = in6addr_any;
  1724. addr.sin6_port = 0;
  1725. fd = socket(AF_INET6, SOCK_STREAM, 0);
  1726. sfd = socket(AF_INET6, SOCK_STREAM, 0);
  1727. ret = bind(sfd, &addr, sizeof(addr));
  1728. ASSERT_EQ(ret, 0);
  1729. ret = listen(sfd, 10);
  1730. ASSERT_EQ(ret, 0);
  1731. len = sizeof(addr);
  1732. ret = getsockname(sfd, &addr, &len);
  1733. ASSERT_EQ(ret, 0);
  1734. ret = connect(fd, &addr, sizeof(addr));
  1735. ASSERT_EQ(ret, 0);
  1736. len = sizeof(addr);
  1737. ret = getsockname(fd, &addr, &len);
  1738. ASSERT_EQ(ret, 0);
  1739. ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1740. if (ret) {
  1741. ASSERT_EQ(errno, ENOENT);
  1742. SKIP(return, "no TLS support");
  1743. }
  1744. ASSERT_EQ(ret, 0);
  1745. ret = setsockopt(fd, SOL_TLS, TLS_TX, &tls12, tls12.len);
  1746. ASSERT_EQ(ret, 0);
  1747. ret = setsockopt(fd, SOL_TLS, TLS_RX, &tls12, tls12.len);
  1748. ASSERT_EQ(ret, 0);
  1749. len2 = sizeof(addr2);
  1750. ret = getsockname(fd, &addr2, &len2);
  1751. ASSERT_EQ(ret, 0);
  1752. EXPECT_EQ(len2, len);
  1753. EXPECT_EQ(memcmp(&addr, &addr2, len), 0);
  1754. close(fd);
  1755. close(sfd);
  1756. }
  1757. TEST(prequeue) {
  1758. struct tls_crypto_info_keys tls12;
  1759. char buf[20000], buf2[20000];
  1760. struct sockaddr_in addr;
  1761. int sfd, cfd, ret, fd;
  1762. socklen_t len;
  1763. len = sizeof(addr);
  1764. memrnd(buf, sizeof(buf));
  1765. tls_crypto_info_init(TLS_1_2_VERSION, TLS_CIPHER_AES_GCM_256, &tls12);
  1766. addr.sin_family = AF_INET;
  1767. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  1768. addr.sin_port = 0;
  1769. fd = socket(AF_INET, SOCK_STREAM, 0);
  1770. sfd = socket(AF_INET, SOCK_STREAM, 0);
  1771. ASSERT_EQ(bind(sfd, &addr, sizeof(addr)), 0);
  1772. ASSERT_EQ(listen(sfd, 10), 0);
  1773. ASSERT_EQ(getsockname(sfd, &addr, &len), 0);
  1774. ASSERT_EQ(connect(fd, &addr, sizeof(addr)), 0);
  1775. ASSERT_GE(cfd = accept(sfd, &addr, &len), 0);
  1776. close(sfd);
  1777. ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
  1778. if (ret) {
  1779. ASSERT_EQ(errno, ENOENT);
  1780. SKIP(return, "no TLS support");
  1781. }
  1782. ASSERT_EQ(setsockopt(fd, SOL_TLS, TLS_TX, &tls12, tls12.len), 0);
  1783. EXPECT_EQ(send(fd, buf, sizeof(buf), MSG_DONTWAIT), sizeof(buf));
  1784. ASSERT_EQ(setsockopt(cfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls")), 0);
  1785. ASSERT_EQ(setsockopt(cfd, SOL_TLS, TLS_RX, &tls12, tls12.len), 0);
  1786. EXPECT_EQ(recv(cfd, buf2, sizeof(buf2), MSG_WAITALL), sizeof(buf2));
  1787. EXPECT_EQ(memcmp(buf, buf2, sizeof(buf)), 0);
  1788. close(fd);
  1789. close(cfd);
  1790. }
  1791. static void __attribute__((constructor)) fips_check(void) {
  1792. int res;
  1793. FILE *f;
  1794. f = fopen("/proc/sys/crypto/fips_enabled", "r");
  1795. if (f) {
  1796. res = fscanf(f, "%d", &fips_enabled);
  1797. if (res != 1)
  1798. ksft_print_msg("ERROR: Couldn't read /proc/sys/crypto/fips_enabled\n");
  1799. fclose(f);
  1800. }
  1801. }
  1802. TEST_HARNESS_MAIN