Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
Re: httpd: remove MAX_IMSG_DATA_SIZE
To:
Rafael Sadowski <rafael@sizeofvoid.org>
Cc:
tech@openbsd.org
Date:
Sat, 17 Oct 2026 20:09:52 +0200

Download raw body.

Thread
On Sat, Oct 17, 2026 at 09:02:27AM +0200, Rafael Sadowski wrote:
> Remove MAX_IMSG_DATA_SIZE and we avoid having to calculate the length
> over and over again in a loop.
> 
> OK?

Did you consider if this can be neutralizied by using
imsgbuf_set_maxsize()? Or are these chunks really that big?

> commit ab64b2726bed8f57259124a8aa04ba3dd5cdf98c
> Author: Rafael Sadowski <rafael@sizeofvoid.org>
> Date:   Sat Oct 17 08:59:57 2026 +0200
> 
>     httpd: remove MAX_IMSG_DATA_SIZE
> 
> diff --git a/config.c b/config.c
> index 957da66..23a7042 100644
> --- a/config.c
> +++ b/config.c
> @@ -320,7 +320,7 @@ config_settls(struct httpd *env, struct server *srv, enum tls_config_type type,
>  	struct server_config	*srv_conf = &srv->srv_conf;
>  	struct tls_config	 tls;
>  	struct iovec		 iov[2];
> -	size_t			 c;
> +	size_t			 c, maxchunk;
>  
>  	if (data == NULL || len == 0)
>  		return (0);
> @@ -335,10 +335,13 @@ config_settls(struct httpd *env, struct server *srv, enum tls_config_type type,
>  	tls.tls_len = len;
>  	tls.tls_chunk_offset = 0;
>  
> +	/* largest chunk that fits next to the header into one imsg */
> +	maxchunk = MAX_IMSGSIZE - IMSG_HEADER_SIZE - sizeof(tls);
> +
>  	while (len > 0) {
>  		tls.tls_chunk_len = len;
> -		if (tls.tls_chunk_len > (MAX_IMSG_DATA_SIZE - sizeof(tls)))
> -			tls.tls_chunk_len = MAX_IMSG_DATA_SIZE - sizeof(tls);
> +		if (tls.tls_chunk_len > maxchunk)
> +			tls.tls_chunk_len = maxchunk;
>  
>  		c = 0;
>  		iov[c].iov_base = &tls;
> 

-- 
:wq Claudio