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.

Close #4914
This commit is contained in:
Christian Mauderer
2023-05-22 09:36:46 +02:00
parent 29f9822bac
commit 484186e8bc

View File

@@ -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) {