[rtems-libbsd commit] ipsec-tools: Fix copying fd_set prior to select

Christian Mauderer christianm at rtems.org
Wed May 31 06:03:36 UTC 2023


Module:    rtems-libbsd
Branch:    6-freebsd-12
Commit:    8ed211f4a1940ba714ed1c43a302b1a2c622e102
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=8ed211f4a1940ba714ed1c43a302b1a2c622e102

Author:    Christian Mauderer <christian.mauderer at embedded-brains.de>
Date:      Mon May 22 09:36:46 2023 +0200

ipsec-tools: Fix copying fd_set prior to select

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.

Update #4913

---

 ipsec-tools/src/racoon/session.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/ipsec-tools/src/racoon/session.c b/ipsec-tools/src/racoon/session.c
index 7ea857ba..bd2bd316 100644
--- a/ipsec-tools/src/racoon/session.c
+++ b/ipsec-tools/src/racoon/session.c
@@ -215,6 +215,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)
@@ -352,7 +354,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) {



More information about the vc mailing list