pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/43248?usp=email )

Change subject: iuup: test receival of IuUP Data with way too big payload
......................................................................

iuup: test receival of IuUP Data with way too big payload

Take the chance to improve logging in that case, otherwise it is
confusing when stating CRC check against 0xffffffff fails.

Related: OS#7052
Change-Id: Id7059e08aa78af4c18c2be1493fb780a31e3e862
---
M src/gsm/iuup.c
M tests/iuup/iuup_test.c
M tests/iuup/iuup_test.err
M tests/iuup/iuup_test.ok
4 files changed, 55 insertions(+), 2 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  osmith: Looks good to me, but someone else must approve




diff --git a/src/gsm/iuup.c b/src/gsm/iuup.c
index a233fb9..fb4734d 100644
--- a/src/gsm/iuup.c
+++ b/src/gsm/iuup.c
@@ -966,8 +966,13 @@
        return 0;

 payload_crc_err:
-       LOGP(DLIUUP, LOGL_NOTICE, "Payload Checksum error (pdu type %u): rx 
0x%04x vs exp 0x%04x\n",
-            pdu_type, payload_crc, payload_crc_computed);
+       if (payload_crc_computed < 0) {
+               LOGP(DLIUUP, LOGL_NOTICE, "Payload Checksum failed (pdu type 
%u): Packet too big? length %u\n",
+                    pdu_type, len);
+       } else {
+               LOGP(DLIUUP, LOGL_NOTICE, "Payload Checksum error (pdu type 
%u): rx 0x%04x vs exp 0x%04x\n",
+                    pdu_type, payload_crc, payload_crc_computed);
+       }
        return -EIO;
 }

diff --git a/tests/iuup/iuup_test.c b/tests/iuup/iuup_test.c
index 353c76a..ed97e22 100644
--- a/tests/iuup/iuup_test.c
+++ b/tests/iuup/iuup_test.c
@@ -912,6 +912,47 @@
        
_test_submit_iuup_initialization_trimmed(sizeof(iuup_initialization_no_iptis) - 
1, __func__);
 }

+/* Test IUT when a way too big IuUP data packet is received. It should be 
dropped. */
+void test_data_too_big(void)
+{
+       /* Here we check the passive INIT code path, aka receiving INIT and 
returning INIT_ACK/NACK */
+       struct osmo_iuup_instance *iui;
+       struct osmo_iuup_rnl_prim *rnp;
+       struct osmo_iuup_tnl_prim *tnp;
+       struct iuup_pdutype0_hdr *hdr0;
+       uint16_t payload_crc;
+       int rc;
+       unsigned int pkt_len = sizeof(struct iuup_pdutype0_hdr) + 1600;
+       OSMO_ASSERT(pkt_len <= IUUP_MSGB_SIZE);
+
+       iui = osmo_iuup_instance_alloc(iuup_test_ctx, __func__);
+       OSMO_ASSERT(iui);
+
+       clock_override_set(0, 0);
+
+       /* Tx CONFIG.req */
+       rnp = osmo_iuup_rnl_prim_alloc(iuup_test_ctx, OSMO_IUUP_RNL_CONFIG, 
PRIM_OP_REQUEST, IUUP_MSGB_SIZE);
+       rnp->u.config = def_configure_req;
+       rnp->u.config.active = false;
+
+       rc = osmo_iuup_rnl_prim_down(iui, rnp);
+       OSMO_ASSERT(rc == 0);
+
+       /* Send IuUP incoming data to the implementation: */
+       tnp = osmo_iuup_tnl_prim_alloc(iuup_test_ctx, OSMO_IUUP_TNL_UNITDATA, 
PRIM_OP_INDICATION, IUUP_MSGB_SIZE);
+       tnp->oph.msg->l2h = msgb_put(tnp->oph.msg, pkt_len);
+       hdr0 = (struct iuup_pdutype0_hdr *)msgb_l2(tnp->oph.msg);
+       memcpy(hdr0, iuup_data, sizeof(iuup_data));
+
+       payload_crc = osmo_iuup_compute_payload_crc(msgb_l2(tnp->oph.msg), 
msgb_l2len(tnp->oph.msg));
+       hdr0->payload_crc_hi = (payload_crc >> 8) & 0x03;
+       hdr0->payload_crc_lo = payload_crc & 0xff;
+
+       OSMO_ASSERT((rc = osmo_iuup_tnl_prim_up(iui, tnp)) == 0);
+
+       osmo_iuup_instance_free(iui);
+}
+
 int main(int argc, char **argv)
 {
        iuup_test_ctx = talloc_named_const(NULL, 0, "iuup_test");
@@ -937,6 +978,7 @@
        test_decode_passive_init_malformed_no_rfci();
        test_decode_passive_init_malformed_rfci_too_short();
        test_decode_passive_init_malformed_missing_last_byte();
+       test_data_too_big();

        printf("OK.\n");
 }
diff --git a/tests/iuup/iuup_test.err b/tests/iuup/iuup_test.err
index 0298420..5a573b4 100644
--- a/tests/iuup/iuup_test.err
+++ b/tests/iuup/iuup_test.err
@@ -88,3 +88,8 @@
 DLIUUP 
IuUP(test_decode_passive_init_malformed_missing_last_byte){Initialisation}: 
Initialization: Malformed packet, length 15 too short
 DLIUUP 
IuUP(test_decode_passive_init_malformed_missing_last_byte){Initialisation}: Tx 
Initialization NACK cause=8 orig_message=e0 00 df f7 06 01 51 67 3c 86 27 00 00 
00 01
 DLIUUP 
IuUP(test_decode_passive_init_malformed_missing_last_byte){Initialisation}: 
Deallocated
+DLIUUP IuUP(test_data_too_big){NULL}: Allocated
+DLIUUP IuUP(test_data_too_big){NULL}: Received Event IuUP-CONFIG-req
+DLIUUP IuUP(test_data_too_big){NULL}: state_chg to Initialisation
+DLIUUP Payload Checksum failed (pdu type 0): Packet too big? length 1604
+DLIUUP IuUP(test_data_too_big){Initialisation}: Discarding invalid IuUP PDU: 
01 00 e3 ff 08 55 6d 94 4c 71 a1 a0 81 e7 ea d2 04 24 44 80 00 0e cd 82 b8 11 
18 00 00 97 c4 79 4e 77 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 0DLIUUP 
IuUP(test_data_too_big){Initialisation}: Deallocated
diff --git a/tests/iuup/iuup_test.ok b/tests/iuup/iuup_test.ok
index 204c290..08b011f 100644
--- a/tests/iuup/iuup_test.ok
+++ b/tests/iuup/iuup_test.ok
@@ -73,4 +73,5 @@
 sys={0.000000}, clock_override_set
 _decode_passive_init_exp_nack_transport_prim_cb()
 Transport: DL len=5: e8 00 90 00 20
+sys={0.000000}, clock_override_set
 OK.

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/43248?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Id7059e08aa78af4c18c2be1493fb780a31e3e862
Gerrit-Change-Number: 43248
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to