IPsec: modify post-decrypt buf len calculation 89/19889/2
authorMatthew G Smith <mgsmith@netgate.com>
Wed, 22 May 2019 18:34:08 +0000 (13:34 -0500)
committerDamjan Marion <dmarion@me.com>
Thu, 30 May 2019 08:41:20 +0000 (08:41 +0000)
For tunnel mode, after decryption the buffer length was being adjusted
by adding (iv length + esp header size). Subtract it instead.

Required for BFD to work on an IPsec tunnel interface. BFD verifies
that the amount of received data is the expected size. It drops the
packet if the buffer metadata says that the packet buffer contains
more data than the packet headers say it should.

Change-Id: I3146d5c3cbf1cceccc9989eefbc9a59e604e9975
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
src/vnet/ipsec/esp_decrypt.c

index a66eae7..8272bb0 100644 (file)
@@ -424,13 +424,13 @@ esp_decrypt_inline (vlib_main_t * vm,
            {
              next[0] = ESP_DECRYPT_NEXT_IP4_INPUT;
              b[0]->current_data = pd->current_data + adv;
-             b[0]->current_length = pd->current_length + adv - tail;
+             b[0]->current_length = pd->current_length - adv - tail;
            }
          else if (f->next_header == IP_PROTOCOL_IPV6)
            {
              next[0] = ESP_DECRYPT_NEXT_IP6_INPUT;
              b[0]->current_data = pd->current_data + adv;
-             b[0]->current_length = pd->current_length + adv - tail;
+             b[0]->current_length = pd->current_length - adv - tail;
            }
          else
            {