[pve-devel] [PATCH pve-http-server] limit websocket frame size

Dietmar Maurer dietmar at proxmox.com
Wed Jun 6 17:13:55 CEST 2018



> On June 6, 2018 at 4:45 PM Dietmar Maurer <dietmar at proxmox.com> wrote:
> 
> 
> AnyEvent checks rbuf_max after calling the callback (too late), so
> we can receive larger data.

>From what is see, AnyEvent uses MAX_READ_SIZE=131072, so maybe a more elegant
solution
is to set $max_payload_size=32*1024

what do you think?

> 
> Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
> ---
>  PVE/APIServer/AnyEvent.pm | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/PVE/APIServer/AnyEvent.pm b/PVE/APIServer/AnyEvent.pm
> index eac788b..9efd662 100755
> --- a/PVE/APIServer/AnyEvent.pm
> +++ b/PVE/APIServer/AnyEvent.pm
> @@ -374,8 +374,8 @@ sub websocket_proxy {
>  
>  	    $reqstate->{proxyhdl} = AnyEvent::Handle->new(
>  		fh => $fh,
> -		rbuf_max => 64*1024,
> -		wbuf_max => 64*10*1024,
> +		rbuf_max => $max_payload_size,
> +		wbuf_max => $max_payload_size*10,
>  		timeout => 5,
>  		on_eof => sub {
>  		    my ($hdl) = @_;
> @@ -398,7 +398,7 @@ sub websocket_proxy {
>  		my ($hdl) = @_;
>  
>  		my $len = length($hdl->{rbuf});
> -		my $data = substr($hdl->{rbuf}, 0, $len, '');
> +		my $data = substr($hdl->{rbuf}, 0, $len > $max_payload_size ?
> $max_payload_size : $len, '');
>  
>  		my $string;
>  		my $payload;
> -- 
> 2.11.0
> 
> 



More information about the pve-devel mailing list