diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2023-05-22 09:36:46 +0200 |
---|---|---|
committer | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2023-05-31 08:21:12 +0200 |
commit | dfb21446417ba93240d018bebe84a51601ba2df5 (patch) | |
tree | 15ea1166484f2c298b1c8bd26c27b8c23f1f8659 /ipsec-tools | |
parent | rtemsbsd/rc_conf: Fixed non-nullterminated string causing crashes (diff) | |
download | rtems-libbsd-dfb21446417ba93240d018bebe84a51601ba2df5.tar.bz2 |
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
Diffstat (limited to 'ipsec-tools')
-rw-r--r-- | ipsec-tools/src/racoon/session.c | 7 |
1 files changed, 7 insertions, 0 deletions
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) { |