On 03/27/15 17:11, Stuart Haslam wrote:
It doesn't break non-jumbo tests, in fact all tests pass and I didn't
*notice* any adverse effects, I found the issue by inspection.
The problem is that when generating non-jumbo packets (which most of
the tests do) the magic2 marker is written beyond the end of a
calloc'd block into un-allocated memory. The receiver doesn't check
magic2 for non-jumbo packets.
The issue could be trivially avoided with the simpler change below,
but I wasn't happy with that as we'd still have a pointer to a
structure that's much larger than the memory allocated.
Stuart.
Yes this change is ok. Did that the same as
https://bugs.linaro.org/show_bug.cgi?id=1365
?
Maxim.
diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
index e022c33..5ea45e4 100644
--- a/test/validation/odp_pktio.c
+++ b/test/validation/odp_pktio.c
@@ -95,7 +95,8 @@ static int pktio_pkt_set_seq(odp_packet_t pkt)
CU_ASSERT_FATAL(data != NULL);
data->head.magic = TEST_SEQ_MAGIC;
- data->magic2 = TEST_SEQ_MAGIC;
+ if (test_jumbo)
+ data->magic2 = TEST_SEQ_MAGIC;
data->head.seq = tstseq;
odp_packet_copydata_in(pkt, l4_off+ODPH_UDPHDR_LEN,
On 27 March 2015 at 13:15, Bill Fischofer <[email protected]
<mailto:[email protected]>> wrote:
If I understand Stuart's patch correctly, he's saying that the
introduction of jumbo frame support in v1.0.1 broke non-jumbo
processing. Since that's a critical function I'd think we'd want
to fix that bug ASAP in v1.0.2.
On Fri, Mar 27, 2015 at 7:04 AM, Mike Holmes
<[email protected] <mailto:[email protected]>> wrote:
On 26 March 2015 at 17:14, Bill Fischofer
<[email protected] <mailto:[email protected]>>
wrote:
Sounds like we should hold v1.0.2 for this bug fix?
Maxim: I think this review is properly yours as you did
the jumbo frame add for v1.0.1.
Bill can you describe the use case than for holding, if we
have a strong case for it then we can hold.
Normal procedure is that whatever makes the cut is there and
the release goes out unless there is a regression introduced.
On Thu, Mar 26, 2015 at 12:52 PM, Stuart Haslam
<[email protected]
<mailto:[email protected]>> wrote:
A magic number, used to ensure jumbo frames are
transmitted and received
in full, is written to the end of a packet buffer at a
fixed offset of
9170 bytes. However for non-jumbo tests this is way
beyond the end of
the allocated buffer.
Signed-off-by: Stuart Haslam <[email protected]
<mailto:[email protected]>>
---
test/validation/odp_pktio.c | 84
++++++++++++++++++++++++++++-----------------
1 file changed, 52 insertions(+), 32 deletions(-)
diff --git a/test/validation/odp_pktio.c
b/test/validation/odp_pktio.c
index e022c33..d653da4 100644
--- a/test/validation/odp_pktio.c
+++ b/test/validation/odp_pktio.c
@@ -44,7 +44,6 @@ typedef struct ODP_PACKED {
/** structure of test packet UDP payload */
typedef struct ODP_PACKED {
- pkt_head_t head;
char data[PKT_BUF_JUMBO_MAX_PAYLOAD -
sizeof(pkt_head_t) -
sizeof(uint32be_t)];
uint32be_t magic2;
@@ -74,33 +73,47 @@ static void
pktio_pkt_set_macs(odp_packet_t pkt,
static uint32_t pkt_payload_len(void)
{
- return test_jumbo ? sizeof(pkt_test_data_t) :
sizeof(pkt_head_t);
+ uint32_t len;
+
+ len = sizeof(pkt_head_t);
+
+ if (test_jumbo)
+ len += sizeof(pkt_test_data_t);
+
+ return len;
}
static int pktio_pkt_set_seq(odp_packet_t pkt)
{
static uint32_t tstseq;
- size_t l4_off;
- pkt_test_data_t *data;
- uint32_t len = pkt_payload_len();
-
+ size_t off;
+ pkt_head_t head;
- l4_off = odp_packet_l4_offset(pkt);
- if (!l4_off) {
+ off = odp_packet_l4_offset(pkt);
+ if (!off) {
CU_FAIL("packet L4 offset not set");
return -1;
}
- data = calloc(1, len);
- CU_ASSERT_FATAL(data != NULL);
+ head.magic = TEST_SEQ_MAGIC;
+ head.seq = tstseq;
+
+ off += ODPH_UDPHDR_LEN;
+ odp_packet_copydata_in(pkt, off, sizeof(head), &head);
+
+ if (test_jumbo) {
+ pkt_test_data_t *data;
+
+ data = calloc(1, sizeof(*data));
+ CU_ASSERT_FATAL(data != NULL);
- data->head.magic = TEST_SEQ_MAGIC;
- data->magic2 = TEST_SEQ_MAGIC;
- data->head.seq = tstseq;
+ data->magic2 = TEST_SEQ_MAGIC;
+
+ off += sizeof(head);
+ odp_packet_copydata_in(pkt, off, sizeof(*data), data);
+ free(data);
+ }
- odp_packet_copydata_in(pkt, l4_off+ODPH_UDPHDR_LEN,
- len, data);
- free(data);
tstseq++;
return 0;
@@ -108,30 +121,37 @@ static int
pktio_pkt_set_seq(odp_packet_t pkt)
static uint32_t pktio_pkt_seq(odp_packet_t pkt)
{
- size_t l4_off;
+ size_t off;
uint32_t seq = TEST_SEQ_INVALID;
- pkt_test_data_t *data;
- uint32_t len = pkt_payload_len();
+ pkt_head_t head;
- l4_off = odp_packet_l4_offset(pkt);
- if (l4_off == ODP_PACKET_OFFSET_INVALID)
+ off = odp_packet_l4_offset(pkt);
+ if (off == ODP_PACKET_OFFSET_INVALID)
return TEST_SEQ_INVALID;
- data = calloc(1, len);
- CU_ASSERT_FATAL(data != NULL);
+ off += ODPH_UDPHDR_LEN;
+ odp_packet_copydata_out(pkt, off, sizeof(head), &head);
- odp_packet_copydata_out(pkt, l4_off+ODPH_UDPHDR_LEN,
- len, data);
+ if (head.magic != TEST_SEQ_MAGIC)
+ return TEST_SEQ_INVALID;
- if (data->head.magic == TEST_SEQ_MAGIC) {
- if (test_jumbo && data->magic2 !=
TEST_SEQ_MAGIC) {
- free(data);
- return TEST_SEQ_INVALID;
- }
- seq = data->head.seq;
+ seq = head.seq;
+
+ if (test_jumbo) {
+ pkt_test_data_t *data;
+
+ data = calloc(1, sizeof(*data));
+ CU_ASSERT_FATAL(data != NULL);
+
+ off += sizeof(head);
+ odp_packet_copydata_out(pkt, off, sizeof(*data), data);
+
+ if (data->magic2 != TEST_SEQ_MAGIC)
+ seq = TEST_SEQ_INVALID;
+
+ free(data);
}
- free(data);
return seq;
}
--
2.1.1
_______________________________________________
lng-odp mailing list
[email protected] <mailto:[email protected]>
http://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
[email protected] <mailto:[email protected]>
http://lists.linaro.org/mailman/listinfo/lng-odp
--
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/>***│ *Open source software
for ARM SoCs
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp