]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
device: rework padding calculation and don't shadow paddedSize
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 May 2020 20:32:31 +0000 (14:32 -0600)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 May 2020 21:43:22 +0000 (15:43 -0600)
Reported-by: Jayakumar S <jayakumar82.s@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
device/send.go

index 9be123338a294e090d5f277a37e69b357e4b63c9..c0bdba38e7dcc95baec90469e76803290b966711 100644 (file)
@@ -448,6 +448,21 @@ func (peer *Peer) RoutineNonce() {
        }
 }
 
+func calculatePaddingSize(packetSize, mtu int) int {
+       lastUnit := packetSize
+       if mtu == 0 {
+               return ((lastUnit + PaddingMultiple - 1) & ^(PaddingMultiple - 1)) - lastUnit
+       }
+       if lastUnit > mtu {
+               lastUnit %= mtu
+       }
+       paddedSize := ((lastUnit + PaddingMultiple - 1) & ^(PaddingMultiple - 1))
+       if paddedSize > mtu {
+               paddedSize = mtu
+       }
+       return paddedSize - lastUnit
+}
+
 /* Encrypts the elements in the queue
  * and marks them for sequential consumption (by releasing the mutex)
  *
@@ -514,21 +529,8 @@ func (device *Device) RoutineEncryption() {
 
                        // pad content to multiple of 16
 
-                       mtu := int(atomic.LoadInt32(&device.tun.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++ {
+                       paddingSize := calculatePaddingSize(len(elem.packet), int(atomic.LoadInt32(&device.tun.mtu)))
+                       for i := 0; i < paddingSize; i++ {
                                elem.packet = append(elem.packet, 0)
                        }