diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-02-13 16:20:56 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-02-14 18:53:55 +0100 |
commit | 9cbcff10dd3e04671d31ab224526f3d22a7ba665 (patch) | |
tree | 50cb5fa60a0dfc1e580656f8254ff147a7da8109 /device | |
parent | 6ed56ff2dfd57ba47cdf604eb3c455acb553c0df (diff) |
send: account for zero mtu
Don't divide by zero.
Diffstat (limited to 'device')
-rw-r--r-- | device/send.go | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/device/send.go b/device/send.go index 72633be..9e29d77 100644 --- a/device/send.go +++ b/device/send.go @@ -515,10 +515,18 @@ func (device *Device) RoutineEncryption() { // pad content to multiple of 16 mtu := int(atomic.LoadInt32(&device.tun.mtu)) - lastUnit := len(elem.packet) % mtu - paddedSize := (lastUnit + PaddingMultiple - 1) & ^(PaddingMultiple - 1) - if paddedSize > mtu { - paddedSize = mtu + var paddedSize int + if mtu == 0 { + paddedSize = (len(elem.packet) + PaddingMultiple - 1) & ^(PaddingMultiple - 1) + } else { + lastUnit := len(elem.packet) + if lastUnit > mtu { + lastUnit %= mtu + } + paddedSize := (lastUnit + PaddingMultiple - 1) & ^(PaddingMultiple - 1) + if paddedSize > mtu { + paddedSize = mtu + } } for i := len(elem.packet); i < paddedSize; i++ { elem.packet = append(elem.packet, 0) |