chiark / gitweb /
site: SECURITY: Properly update full peer address array
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 15 May 2014 00:54:18 +0000 (01:54 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 15 May 2014 01:02:04 +0000 (02:02 +0100)
If we already have the maximum number of peer addresses, do not
stuff the peer address into the wrong slot.

If a site instance is configured with the maximum permissible limit on
the number of mobile peer addresses (ie with mobile-peers-max set to
5), this overruns the transport peers array.  In such a configuration
this is a security problem.  It looks like a denial of service and
privilege escalation can't be ruled out.  Configurations without
mobile peers are not affected.

Otherwise it simply means the address is ignored.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
site.c

diff --git a/site.c b/site.c
index f87328fda51fbb4cbf6482b30ac342e7fedd34a0..f0a2922fe3eb9f7dc7bad4585129186f83fa9a17 100644 (file)
--- a/site.c
+++ b/site.c
@@ -1955,7 +1955,7 @@ static void transport_record_peer(struct site *st, transport_peers *peers,
 
     changed=1;
     if (peers->npeers==st->transport_peers_max)
-       slot=st->transport_peers_max;
+       slot=st->transport_peers_max-1;
     else
        slot=peers->npeers++;