Kévin Redon has uploaded this change for review. ( 
https://gerrit.osmocom.org/10218


Change subject: remsim: add msg payload after header
......................................................................

remsim: add msg payload after header

before the message header was written over the payload,
leading to corrupted data.

Change-Id: If971699993617fc50557d20582c344ea06645a3f
---
M host/simtrace2-remsim.c
1 file changed, 26 insertions(+), 19 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/18/10218/1

diff --git a/host/simtrace2-remsim.c b/host/simtrace2-remsim.c
index 462f73e..5304e6f 100644
--- a/host/simtrace2-remsim.c
+++ b/host/simtrace2-remsim.c
@@ -153,33 +153,40 @@
        return rc;
 }

-static struct simtrace_msg_hdr *st_push_hdr(struct msgb *msg, uint8_t 
msg_class, uint8_t msg_type,
-                                           uint8_t slot_nr)
-{
-       struct simtrace_msg_hdr *sh;
-
-       sh = (struct simtrace_msg_hdr *) msgb_push(msg, sizeof(*sh));
-       memset(sh, 0, sizeof(*sh));
-       sh->msg_class = msg_class;
-       sh->msg_type = msg_type;
-       sh->slot_nr = slot_nr;
-       sh->msg_len = msgb_length(msg);
-
-       return sh;
-}
-
 /* transmit a given message to a specified slot. Expects all headers
  * present before calling the function */
 int st_slot_tx_msg(struct st_slot *slot, struct msgb *msg,
                   uint8_t msg_class, uint8_t msg_type)
 {
-       struct simtrace_msg_hdr *sh = (struct simtrace_msg_hdr *) msg->data;
+       int rc = 0;

+       struct msgb *st = st_msgb_alloc();
+       if (!st) {
+               rc = ENOMEM;
+               goto error;
+       }
+       st->l1h = msgb_put(st, sizeof(struct simtrace_msg_hdr*));
+       struct simtrace_msg_hdr *sh = (struct simtrace_msg_hdr*) st->l1h;
+       if (!sh) {
+               rc = ENOMEM;
+               goto error;
+       }
+       memset(sh, 0, sizeof(*sh));
+       sh->msg_class = msg_class;
+       sh->msg_type = msg_type;
        sh->slot_nr = slot->slot_nr;
+       st->l2h = msgb_put(st, msgb_length(msg));
+       if (!st->l2h) {
+               rc = ENOMEM;
+               goto error;
+       }
+       memcpy(st->l2h, msg->data, msgb_length(msg));
+       sh->msg_len = msgb_length(st);
+       rc = st_transp_tx_msg(slot->transp, st);
 
-       st_push_hdr(msg, msg_class, msg_type, slot->slot_nr);
-
-       return st_transp_tx_msg(slot->transp, msg);
+error:
+       msgb_free(msg);
+       return rc;
 }

 

--
To view, visit https://gerrit.osmocom.org/10218
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: simtrace2
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: If971699993617fc50557d20582c344ea06645a3f
Gerrit-Change-Number: 10218
Gerrit-PatchSet: 1
Gerrit-Owner: Kévin Redon <kre...@sysmocom.de>

Reply via email to