Ping?

Does this need anything else before it can land?

Best regards,
Kristof

On 24 Jan 2024, at 8:27, Kristof Provost via Openvpn-devel wrote:
> From: Kristof Provost <k...@freebsd.org>
>
> It's possible for the buffer we provude for OVPN_GET_PEER_STATS to be
> too small. Handle the error, re-allocate a larger buffer and try again
> rather than failing.
>
> Signed-off-by: Kristof Provost <kprov...@netgate.com>
> ---
>  src/openvpn/dco_freebsd.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c
> index 3ba1c817..577c65f8 100644
> --- a/src/openvpn/dco_freebsd.c
> +++ b/src/openvpn/dco_freebsd.c
> @@ -698,7 +698,8 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct 
> multi_context *m)
>  {
>
>      struct ifdrv drv;
> -    uint8_t buf[4096];
> +    uint8_t *buf = NULL;
> +    size_t buf_size = 4096;
>      nvlist_t *nvl;
>      const nvlist_t *const *nvpeers;
>      size_t npeers;
> @@ -712,17 +713,28 @@ dco_get_peer_stats_multi(dco_context_t *dco, struct 
> multi_context *m)
>      CLEAR(drv);
>      snprintf(drv.ifd_name, IFNAMSIZ, "%s", dco->ifname);
>      drv.ifd_cmd = OVPN_GET_PEER_STATS;
> -    drv.ifd_len = sizeof(buf);
> +
> +retry:
> +    buf = realloc(buf, buf_size);
> +    drv.ifd_len = buf_size;
>      drv.ifd_data = buf;
>
>      ret = ioctl(dco->fd, SIOCGDRVSPEC, &drv);
> +    if (ret && errno == ENOSPC)
> +    {
> +        buf_size *= 2;
> +        goto retry;
> +    }
> +
>      if (ret)
>      {
> +        free(buf);
>          msg(M_WARN | M_ERRNO, "Failed to get peer stats");
>          return -EINVAL;
>      }
>
>      nvl = nvlist_unpack(buf, drv.ifd_len, 0);
> +    free(buf);
>      if (!nvl)
>      {
>          msg(M_WARN, "Failed to unpack nvlist");
> -- 
> 2.43.0
>
>
>
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel


_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to