summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2023-05-22 09:36:46 +0200
committerChristian Mauderer <christian.mauderer@embedded-brains.de>2023-05-31 08:25:23 +0200
commit484186e8bc5571a0f38d56c061c9fb0946635008 (patch)
tree3f25f8b037ec8f9f14cf2bdf847b092b3d40e872
parentif_atsam: Recover from receive freezes (diff)
downloadrtems-libbsd-5-freebsd-12.tar.bz2
ipsec-tools: Fix copying fd_set prior to select5-freebsd-12
The racoon session code copies an fd_set from one variable into another prior to calling select. That works well for simple structures. In libbsd we have to allocate fd_sets instead of using fixed structures to avoid a problem with file numbers bigger than FD_SETSIZE. The simple assignment didn't work in that case. This patch makes sure that a memcpy is used instead. Close #4914
-rw-r--r--ipsec-tools/src/racoon/session.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ipsec-tools/src/racoon/session.c b/ipsec-tools/src/racoon/session.c
index 90120c76..77e4f6f6 100644
--- a/ipsec-tools/src/racoon/session.c
+++ b/ipsec-tools/src/racoon/session.c
@@ -209,6 +209,8 @@ session(void)
#ifndef __rtems__
FD_ZERO(&preset_mask);
#else /* __rtems__ */
+ size_t allocated_mask_size = sizeof(fd_set) *
+ howmany(rtems_libio_number_iops, sizeof(fd_set) * 8);
allocated_preset_mask = calloc(sizeof(fd_set),
howmany(rtems_libio_number_iops, sizeof(fd_set) * 8));
if (allocated_preset_mask == NULL)
@@ -342,7 +344,12 @@ session(void)
/* schedular can change select() mask, so we reset
* the working copy here */
+#ifndef __rtems__
active_mask = preset_mask;
+#else /* __rtems__ */
+ memcpy(allocated_active_mask, allocated_preset_mask,
+ allocated_mask_size);
+#endif /* __rtems__ */
error = select(nfds + 1, &active_mask, NULL, NULL, timeout);
if (error < 0) {