Harald Welte has submitted this change and it was merged. ( 
https://gerrit.osmocom.org/13768 )

Change subject: common/rsl.c: fix unaligned pointers in rsl_add_rtp_stats()
......................................................................

common/rsl.c: fix unaligned pointers in rsl_add_rtp_stats()

Found using clang-8:

  rsl.c:1646:7: warning: taking address of packed member 'packets_sent'
                of class or structure 'ipa_stats' may result in an
                unaligned pointer value
  rsl.c:1646:28: warning: taking address of packed member 'octets_sent'
                 of class or structure 'ipa_stats' may result in an
                 unaligned pointer value
  rsl.c:1647:7: warning: taking address of packed member 'packets_recv'
                of class or structure 'ipa_stats' may result in an
                unaligned pointer value
  rsl.c:1647:28: warning: taking address of packed member 'octets_recv'
                 of class or structure 'ipa_stats' may result in an
                 unaligned pointer value
  rsl.c:1648:7: warning: taking address of packed member 'packets_lost'
                of class or structure 'ipa_stats' may result in an
                unaligned pointer value
  rsl.c:1648:28: warning: taking address of packed member 'arrival_jitter'
                 of class or structure 'ipa_stats' may result in an
                 unaligned pointer value

Change-Id: Ifba33cfd8edeccc99a21c7d076db7119c29d4f40
---
M src/common/rsl.c
1 file changed, 23 insertions(+), 23 deletions(-)

Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved



diff --git a/src/common/rsl.c b/src/common/rsl.c
index 8f5d689..c2a7db6 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -1627,33 +1627,33 @@
  */
 static void rsl_add_rtp_stats(struct gsm_lchan *lchan, struct msgb *msg)
 {
-       struct ipa_stats {
-               uint32_t packets_sent;
-               uint32_t octets_sent;
-               uint32_t packets_recv;
-               uint32_t octets_recv;
-               uint32_t packets_lost;
-               uint32_t arrival_jitter;
-               uint32_t avg_tx_delay;
-       } __attribute__((packed));
+       uint32_t packets_sent, octets_sent;
+       uint32_t packets_recv, octets_recv;
+       uint32_t packets_lost;
+       uint32_t arrival_jitter;

-       struct ipa_stats stats;
+       msgb_tv_put(msg, RSL_IE_IPAC_CONN_STAT, sizeof(uint32_t) * 7);

-       memset(&stats, 0, sizeof(stats));
-
-       if (lchan->abis_ip.rtp_socket)
+       if (lchan->abis_ip.rtp_socket) {
                osmo_rtp_socket_stats(lchan->abis_ip.rtp_socket,
-                                       &stats.packets_sent, &stats.octets_sent,
-                                       &stats.packets_recv, &stats.octets_recv,
-                                       &stats.packets_lost, 
&stats.arrival_jitter);
-       /* convert to network byte order */
-       stats.packets_sent = htonl(stats.packets_sent);
-       stats.octets_sent = htonl(stats.octets_sent);
-       stats.packets_recv = htonl(stats.packets_recv);
-       stats.octets_recv = htonl(stats.octets_recv);
-       stats.packets_lost = htonl(stats.packets_lost);
+                                     &packets_sent, &octets_sent,
+                                     &packets_recv, &octets_recv,
+                                     &packets_lost, &arrival_jitter);

-       msgb_tlv_put(msg, RSL_IE_IPAC_CONN_STAT, sizeof(stats), (uint8_t *) 
&stats);
+               /* msgb_put_u32() uses osmo_store32be(),
+                * so we don't need to call htonl(). */
+               msgb_put_u32(msg, packets_sent);
+               msgb_put_u32(msg, octets_sent);
+               msgb_put_u32(msg, packets_recv);
+               msgb_put_u32(msg, octets_recv);
+               msgb_put_u32(msg, packets_lost);
+               msgb_put_u32(msg, arrival_jitter);
+               /* FIXME: AVG Tx delay is always 0 */
+               msgb_put_u32(msg, 0);
+       } else {
+               msgb_put(msg, sizeof(uint32_t) * 7);
+               memset(msg->tail, 0x00, sizeof(uint32_t) * 7);
+       }
 }

 int rsl_tx_ipac_dlcx_ind(struct gsm_lchan *lchan, uint8_t cause)

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

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ifba33cfd8edeccc99a21c7d076db7119c29d4f40
Gerrit-Change-Number: 13768
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Vadim Yanitskiy <[email protected]>

Reply via email to