[vlc-commits] [Git][videolan/vlc][master] 3 commits: access: amt: use vlc_rand_bytes to generate nonce

Marvin Scholz (@ePirat) gitlab at videolan.org
Tue Sep 23 21:52:51 UTC 2025



Marvin Scholz pushed to branch master at VideoLAN / VLC


Commits:
ad326971 by Marvin Scholz at 2025-09-23T21:37:11+00:00
access: amt: use vlc_rand_bytes to generate nonce

Fix CID 1665574

- - - - -
11d2ba83 by Marvin Scholz at 2025-09-23T21:37:11+00:00
access: amt: remove unnecessary intermediate assignments

- - - - -
10c3d865 by Marvin Scholz at 2025-09-23T21:37:11+00:00
access: amt: assert nonce length

- - - - -


1 changed file:

- modules/access/amt.c


Changes:

=====================================
modules/access/amt.c
=====================================
@@ -58,6 +58,7 @@
 #include <vlc_block.h>
 #include <vlc_interrupt.h>
 #include <vlc_url.h>
+#include <vlc_rand.h>
 
 #ifdef HAVE_POLL_H
  #include <poll.h>
@@ -323,6 +324,9 @@ typedef struct _access_sys_t
     bool tryAMT;
 } access_sys_t;
 
+_Static_assert(sizeof((access_sys_t){0}.glob_ulNonce) == NONCE_LEN,
+    "glob_ulNonce doesn't match expected nonce length");
+
 /* Standard open/close functions */
 static int  Open (vlc_object_t *);
 static void Close (vlc_object_t *);
@@ -1218,13 +1222,11 @@ error:
 static void amt_send_relay_discovery_msg( stream_t *p_access, char *relay_ip )
 {
     char          chaSendBuffer[AMT_DISCO_MSG_LEN];
-    unsigned int  ulNonce;
     ssize_t       nRet;
     access_sys_t *sys = p_access->p_sys;
 
     /* initialize variables */
     memset( chaSendBuffer, 0, sizeof(chaSendBuffer) );
-    ulNonce = 0;
 
     /*
      * create AMT discovery message format
@@ -1239,10 +1241,8 @@ static void amt_send_relay_discovery_msg( stream_t *p_access, char *relay_ip )
     chaSendBuffer[3] = 0;
 
     /* create nonce and copy into send buffer */
-    srand( (unsigned int)time(NULL) );
-    ulNonce = htonl( rand() );
-    memcpy( &chaSendBuffer[4], &ulNonce, sizeof(ulNonce) );
-    sys->glob_ulNonce = ulNonce;
+    vlc_rand_bytes (&sys->glob_ulNonce, sizeof (sys->glob_ulNonce));
+    memcpy( &chaSendBuffer[4], &sys->glob_ulNonce, sizeof(sys->glob_ulNonce) );
 
     /* send it */
     nRet = sendto( sys->sAMT, chaSendBuffer, sizeof(chaSendBuffer), 0, &sys->relayDiscoAddr.sa, sys->relayDiscoAddr.sin.sin_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6));
@@ -1259,13 +1259,11 @@ static void amt_send_relay_discovery_msg( stream_t *p_access, char *relay_ip )
 static void amt_send_relay_request( stream_t *p_access, char *relay_ip )
 {
     char         chaSendBuffer[AMT_REQUEST_MSG_LEN];
-    uint32_t     ulNonce;
     int          nRet;
     access_sys_t *sys = p_access->p_sys;
 
     memset( chaSendBuffer, 0, sizeof(chaSendBuffer) );
 
-    ulNonce = 0;
     nRet = 0;
 
     /*
@@ -1295,8 +1293,7 @@ static void amt_send_relay_request( stream_t *p_access, char *relay_ip )
     chaSendBuffer[2] = 0;
     chaSendBuffer[3] = 0;
 
-    ulNonce = sys->glob_ulNonce;
-    memcpy( &chaSendBuffer[4], &ulNonce, sizeof(uint32_t) );
+    memcpy( &chaSendBuffer[4], &sys->glob_ulNonce, sizeof(sys->glob_ulNonce) );
 
     nRet = send( sys->sAMT, chaSendBuffer, sizeof(chaSendBuffer), 0 );
 
@@ -1404,7 +1401,6 @@ static int amt_send_mem_update( stream_t *p_access, bool leave)
     int           i_sendBufSize = i_amt_hdr_len + IP_HDR_IGMP_LEN;
     int           i_sendBufSizeIPv6 = i_amt_hdr_len + i_ipv6_hdr_len + MLD_REPORT_LEN;
     char          pSendBuffer[MAC_LEN + NONCE_LEN + AMT_HDR_LEN + IPv6_HOP_BY_HOP_OPTION_LEN + IPv6_FIXED_HDR_LEN + MLD_REPORT_LEN] = { 0 };
-    uint32_t      ulNonce = 0;
     access_sys_t *sys = p_access->p_sys;
 
     pSendBuffer[0] = AMT_MEM_UPD;
@@ -1413,8 +1409,7 @@ static int amt_send_mem_update( stream_t *p_access, bool leave)
     memcpy( &pSendBuffer[2], sys->relay_mem_query_msg.uchaMAC, MAC_LEN );
 
     /* copy nonce */
-    ulNonce = sys->glob_ulNonce;
-    memcpy( &pSendBuffer[8], &ulNonce, NONCE_LEN );
+    memcpy( &pSendBuffer[8], &sys->glob_ulNonce, sizeof(sys->glob_ulNonce) );
 
     if ( sys->mcastGroupAddr.sin.sin_family == AF_INET )
     {



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/086dc0421ef0b93cb78be117d92e51cbe06d5db2...10c3d86539ca6ff2fdc5dbb4caca681b90961ec4

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/086dc0421ef0b93cb78be117d92e51cbe06d5db2...10c3d86539ca6ff2fdc5dbb4caca681b90961ec4
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list