[libvirt] [PATCH] network: increase max number of routes

Michal Privoznik mprivozn at redhat.com
Wed Jun 19 09:16:14 UTC 2013


On 18.06.2013 18:59, Laine Stump wrote:
> This fixes the problem reported in:
> 
>    https://bugzilla.redhat.com/show_bug.cgi?id=972690
> 
> When checking for a collision of a new libvirt network's subnet with
> any existing routes, we read all of /proc/net/route into memory, then
> parse all the entries. The function that we use to read this file
> requires a "maximum length" parameter, which had previously been set
> to 64*1024. As each line in /proc/net/route is 128 bytes, this would
> allow for a maximum of 512 entries in the routing table.
> 
> This patch increases that number to 128 * 100000, which allows for
> 100,000 routing table entries. This means that it's possible that 12MB
> would be allocated, but that would only happen if there really were
> 100,000 route table entries on the system, it's only held for a very
> short time.
> 
> Since there is no method of specifying and unlimited max (and that
> would create a potential denial of service anyway) hopefully this
> limit is large enough to accomodate everyone.
> ---
>  src/network/bridge_driver.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index d5886fe..f7c2470 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -2305,7 +2305,8 @@ networkCheckRouteCollision(virNetworkObjPtr network)
>  {
>      int ret = 0, len;
>      char *cur, *buf = NULL;
> -    enum {MAX_ROUTE_SIZE = 1024*64};
> +    /* allow for up to 100000 routes (each line is 128 bytes) */
> +    enum {MAX_ROUTE_SIZE = 128*100000};
>  
>      /* Read whole routing table into memory */
>      if ((len = virFileReadAll(PROC_NET_ROUTE, MAX_ROUTE_SIZE, &buf)) < 0)
> 

ACK

Michal




More information about the libvir-list mailing list