les/utils: protect against WeightedRandomSelect overflow (#21839)

Also fixes a bug in les/flowcontrol that caused the overflow.
This commit is contained in:
Felföldi Zsolt
2020-11-23 10:18:33 +01:00
committed by GitHub
parent 3ef52775c4
commit bddf5aaa2f
2 changed files with 15 additions and 0 deletions

View File

@ -19,6 +19,7 @@ package flowcontrol
import (
"fmt"
"math"
"sync"
"time"
@ -316,6 +317,9 @@ func (node *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) {
node.lock.RLock()
defer node.lock.RUnlock()
if node.params.BufLimit == 0 {
return time.Duration(math.MaxInt64), 0
}
now := node.clock.Now()
node.recalcBLE(now)
maxCost += uint64(safetyMargin) * node.params.MinRecharge / uint64(fcTimeConst)