Hi,

I have been resolving this by adding:

#define preset_mask *preset_mask_prealloc
#define active_mask *active_mask_prealloc

as the assignment logic works as is. It does not catch FD_ZERO which is a shame
but is helps avoid us adding a special case.

Chris

On 22/5/2023 5:36 pm, Christian Mauderer wrote:
> 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.
> ---
>  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) {
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to