]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
send: more precise padding calculation
authorJason A. Donenfeld <Jason@zx2c4.com>
Sun, 16 Sep 2018 21:42:31 +0000 (23:42 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sun, 16 Sep 2018 21:42:31 +0000 (23:42 +0200)
send.go

diff --git a/send.go b/send.go
index 3b6cfa30c4faa44130643b7bba21a8bb0d9f69e7..bc0f5e4e01809d2c6d93dc873687dcf4b5a31315 100644 (file)
--- a/send.go
+++ b/send.go
@@ -488,11 +488,13 @@ func (device *Device) RoutineEncryption() {
                        // pad content to multiple of 16
 
                        mtu := int(atomic.LoadInt32(&device.tun.mtu))
-                       rem := len(elem.packet) % PaddingMultiple
-                       if rem > 0 {
-                               for i := 0; i < PaddingMultiple-rem && len(elem.packet) < mtu; i++ {
-                                       elem.packet = append(elem.packet, 0)
-                               }
+                       lastUnit := len(elem.packet) % 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)
                        }
 
                        // encrypt content and release to consumer