From 6d67a26543681fb271e216ddd81782b795c8dac6 Mon Sep 17 00:00:00 2001
From: Michael Tuexen <tuexen@fh-muenster.de>
Date: Sun, 2 Aug 2015 02:59:32 +0200
Subject: [PATCH] Appropriately fix padding for DATA chunks.

The last fix was wrong, so undo it. Only DATA chunk handling was
broken.
---
 gtests/net/packetdrill/sctp_packet.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/gtests/net/packetdrill/sctp_packet.c b/gtests/net/packetdrill/sctp_packet.c
index 10afe73f..8a728074 100644
--- a/gtests/net/packetdrill/sctp_packet.c
+++ b/gtests/net/packetdrill/sctp_packet.c
@@ -429,7 +429,7 @@ sctp_data_chunk_new(s64 flgs, s64 len, s64 tsn, s64 sid, s64 ssn, s64 ppid)
 	memset(chunk->data, 0,
 	       length + padding_length - sizeof(struct sctp_data_chunk));
 	return sctp_chunk_list_item_new((struct sctp_chunk *)chunk,
-	                                length, flags,
+	                                length + padding_length, flags,
 	                                sctp_parameter_list_new(),
 	                                sctp_cause_list_new());
 }
@@ -2165,7 +2165,6 @@ new_sctp_packet(int address_family,
 	const int sctp_chunk_bytes = list->length;
 	const int ip_bytes =
 		 ip_header_bytes + sctp_header_bytes + sctp_chunk_bytes;
-	u16 padding_length;
 	bool overbook = false;
 
 	/* Sanity-check all the various lengths */
@@ -2432,11 +2431,7 @@ new_sctp_packet(int address_family,
 	for (chunk_item = list->first;
 	     chunk_item != NULL;
 	     chunk_item = chunk_item->next) {
-		padding_length = chunk_item->length % 4;
-		if (padding_length > 0) {
-			padding_length = 4 - padding_length;
-		}
-		memcpy(sctp_chunk_start, chunk_item->chunk, chunk_item->length + padding_length);
+		memcpy(sctp_chunk_start, chunk_item->chunk, chunk_item->length);
 		for (parameter_item = chunk_item->parameter_list->first;
 		     parameter_item != NULL;
 		     parameter_item = parameter_item->next) {
@@ -2455,7 +2450,7 @@ new_sctp_packet(int address_family,
 		}
 		free(chunk_item->chunk);
 		chunk_item->chunk = (struct sctp_chunk *)sctp_chunk_start;
-		sctp_chunk_start += chunk_item->length + padding_length;
+		sctp_chunk_start += chunk_item->length;
 	}
 	free(packet->chunk_list);
 	packet->chunk_list = list;
-- 
GitLab