Skip to content

Commit

Permalink
Merge pull request #5968 from melhar098/main
Browse files Browse the repository at this point in the history
RDK-52196: [SECVULN] Unsafe Use of strncpy C Functions
  • Loading branch information
anand-ky authored Jan 2, 2025
2 parents b51aa5d + f1a5520 commit 309dcb1
Show file tree
Hide file tree
Showing 24 changed files with 133 additions and 44 deletions.
2 changes: 2 additions & 0 deletions AVOutput/AVOutputTVHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,7 @@ namespace Plugin {
}
}
strncpy(rfc_caller_id,PQFileName.c_str(),PQFileName.size());
rfc_caller_id[sizeof(rfc_caller_id) - 1] = '\0';
LOGINFO("%s : Default tvsettings file : %s\n",__FUNCTION__,rfc_caller_id);
}

Expand Down Expand Up @@ -1534,6 +1535,7 @@ namespace Plugin {
tr181ErrorCode_t err = getLocalParam(rfc_caller_id, tr181_param_name.c_str(), &param);
if ( err == tr181Success ) {
strncpy(picMode, param.value, strlen(param.value)+1);
picMode[strlen(param.value)] = '\0';
LOGINFO("getLocalParam success, mode = %s\n", picMode);
return 1;
}
Expand Down
4 changes: 4 additions & 0 deletions AVOutput/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ All notable changes to this RDK Service will be documented in this file.
* Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.
## [1.0.11] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [1.0.10] - 2024-12-23
### Added
- ODM API removal changes phase 1
Expand Down
4 changes: 4 additions & 0 deletions DisplaySettings/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ All notable changes to this RDK Service will be documented in this file.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.

## [2.0.4] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [2.0.3] - 2024-12-29
### Removed
- Removed irmgr references from rdkservices.
Expand Down
4 changes: 3 additions & 1 deletion DisplaySettings/DisplaySettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ using namespace std;

#define API_VERSION_NUMBER_MAJOR 2
#define API_VERSION_NUMBER_MINOR 0
#define API_VERSION_NUMBER_PATCH 3
#define API_VERSION_NUMBER_PATCH 4

static bool isCecEnabled = false;
static bool isResCacheUpdated = false;
Expand Down Expand Up @@ -2268,6 +2268,7 @@ namespace WPEFramework {
{
IARM_Bus_PWRMgr_StandbyVideoState_Param_t param;
strncpy(param.port, portname.c_str(), PWRMGR_MAX_VIDEO_PORT_NAME_LENGTH);
param.port[sizeof(param.port) - 1] = '\0';
if(IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_PWRMGR_NAME, IARM_BUS_PWRMGR_API_GetStandbyVideoState, &param, sizeof(param)))
{
LOGERR("Port: %s. enable:%d", param.port, param.isEnabled);
Expand All @@ -2291,6 +2292,7 @@ namespace WPEFramework {
{
dsMgrStandbyVideoStateParam_t param;
strncpy(param.port, portname.c_str(), PWRMGR_MAX_VIDEO_PORT_NAME_LENGTH);
param.port[sizeof(param.port) - 1] = '\0';
if(IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_DSMGR_NAME, IARM_BUS_DSMGR_API_GetStandbyVideoState, &param, sizeof(param)))
{
LOGERR("Port: %s. enable:%d", param.port, param.isEnabled);
Expand Down
4 changes: 4 additions & 0 deletions FrameRate/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ All notable changes to this RDK Service will be documented in this file.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.

## [1.0.8] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [1.0.7] - 2024-12-18
### Removed
- remove irmgr reference from rdkservices.
Expand Down
8 changes: 5 additions & 3 deletions FrameRate/FrameRate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@

#define API_VERSION_NUMBER_MAJOR 1
#define API_VERSION_NUMBER_MINOR 0
#define API_VERSION_NUMBER_PATCH 7
#define API_VERSION_NUMBER_PATCH 8

namespace WPEFramework
{
Expand Down Expand Up @@ -461,7 +461,8 @@ namespace WPEFramework
switch (eventId) {
case IARM_BUS_DSMGR_EVENT_DISPLAY_FRAMRATE_PRECHANGE:
IARM_Bus_DSMgr_EventData_t *eventData = (IARM_Bus_DSMgr_EventData_t *)data;
strcpy(dispFrameRate,eventData->data.DisplayFrameRateChange.framerate);
strncpy(dispFrameRate,eventData->data.DisplayFrameRateChange.framerate, sizeof(dispFrameRate));
dispFrameRate[sizeof(dispFrameRate) - 1] = '\0';
break;
}
}
Expand All @@ -487,7 +488,8 @@ namespace WPEFramework
switch (eventId) {
case IARM_BUS_DSMGR_EVENT_DISPLAY_FRAMRATE_POSTCHANGE:
IARM_Bus_DSMgr_EventData_t *eventData = (IARM_Bus_DSMgr_EventData_t *)data;
strcpy(dispFrameRate,eventData->data.DisplayFrameRateChange.framerate);
strncpy(dispFrameRate,eventData->data.DisplayFrameRateChange.framerate, sizeof(dispFrameRate));
dispFrameRate[sizeof(dispFrameRate) - 1] = '\0';
break;
}
}
Expand Down
4 changes: 4 additions & 0 deletions Miracast/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ All notable changes to this RDK Service will be documented in this file.
Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development.

For more details, refer to versioning section under Main README.
## [1.0.12] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [1.0.11] - 2024-12-05
### Fixed
- Fixed the SIGILL crash while failed to unregister the Power Event.
Expand Down
10 changes: 8 additions & 2 deletions Miracast/MiracastPlayer/MiracastPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,13 @@ namespace WPEFramework
sink_dev_ip = device_parameters["sink_dev_ip"].String();

strncpy( rtsp_hldr_msgq_data.source_dev_ip, source_dev_ip.c_str() , sizeof(rtsp_hldr_msgq_data.source_dev_ip));
rtsp_hldr_msgq_data.source_dev_ip[sizeof(rtsp_hldr_msgq_data.source_dev_ip) - 1] = '\0';
strncpy( rtsp_hldr_msgq_data.source_dev_mac, source_dev_mac.c_str() , sizeof(rtsp_hldr_msgq_data.source_dev_mac));
rtsp_hldr_msgq_data.source_dev_mac[sizeof(rtsp_hldr_msgq_data.source_dev_mac) - 1] = '\0';
strncpy( rtsp_hldr_msgq_data.source_dev_name, source_dev_name.c_str() , sizeof(rtsp_hldr_msgq_data.source_dev_name));
rtsp_hldr_msgq_data.source_dev_name[sizeof(rtsp_hldr_msgq_data.source_dev_name) - 1] = '\0';
strncpy( rtsp_hldr_msgq_data.sink_dev_ip, sink_dev_ip.c_str() , sizeof(rtsp_hldr_msgq_data.sink_dev_ip));
rtsp_hldr_msgq_data.sink_dev_ip[sizeof(rtsp_hldr_msgq_data.sink_dev_ip) - 1] = '\0';

rtsp_hldr_msgq_data.state = RTSP_START_RECEIVE_MSGS;
success = true;
Expand Down Expand Up @@ -692,8 +696,10 @@ namespace WPEFramework
}
else
{
strcpy( stMsgQ.src_dev_name, client_name.c_str());
strcpy( stMsgQ.src_dev_mac_addr, client_mac.c_str());
strncpy( stMsgQ.src_dev_name, client_name.c_str(), sizeof(stMsgQ.src_dev_name));
stMsgQ.src_dev_name[sizeof(stMsgQ.src_dev_name) - 1] = '\0';
strncpy( stMsgQ.src_dev_mac_addr, client_mac.c_str(), sizeof(stMsgQ.src_dev_mac_addr));
stMsgQ.src_dev_mac_addr[sizeof(stMsgQ.src_dev_mac_addr) - 1] = '\0';

MIRACASTLOG_INFO("Given 'NAME, MAC and state' are[%s-%s-%s]",
client_name.c_str(),
Expand Down
11 changes: 10 additions & 1 deletion Miracast/MiracastService/MiracastController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,7 @@ void MiracastController::remove_P2PGroupInstance(void)
if ( true == m_groupInfo->isGO )
{
strncpy( commandBuffer , "ps -ax | awk '/dnsmasq -p0 -i/ && !/grep/ {print $1}' | xargs kill -9" , sizeof(commandBuffer));
commandBuffer[sizeof(commandBuffer) - 1] = '\0';
MIRACASTLOG_INFO("Terminate old dnsmasq instance: [%s]",commandBuffer);
MiracastCommon::execute_SystemCommand(commandBuffer);
memset( commandBuffer , 0x00 , sizeof(commandBuffer));
Expand All @@ -475,6 +476,7 @@ void MiracastController::remove_P2PGroupInstance(void)
else
{
strncpy( commandBuffer , "ps -ax | awk '/p2p_udhcpc/ && !/grep/ {print $1}' | xargs kill -9" , sizeof(commandBuffer));
commandBuffer[sizeof(commandBuffer) - 1] = '\0';
MIRACASTLOG_INFO("Terminate old udhcpc p2p instance : [%s]", commandBuffer);
MiracastCommon::execute_SystemCommand(commandBuffer);
}
Expand Down Expand Up @@ -518,7 +520,8 @@ void MiracastController::event_handler(P2P_EVENTS eventId, void *data, size_t le
if (nullptr != m_controller_thread){
controller_msgq_data.msg_type = P2P_MSG;
controller_msgq_data.state = convertP2PtoSessionActions(eventId);
strcpy(controller_msgq_data.msg_buffer, event_buffer.c_str());
strncpy(controller_msgq_data.msg_buffer, event_buffer.c_str(), sizeof(controller_msgq_data.msg_buffer));
controller_msgq_data.msg_buffer[sizeof(controller_msgq_data.msg_buffer) - 1] = '\0';

MIRACASTLOG_INFO("event_handler to Controller Action[%#08X] buffer:%s ", controller_msgq_data.state, event_buffer.c_str());
m_controller_thread->send_message(&controller_msgq_data, sizeof(controller_msgq_data));
Expand Down Expand Up @@ -1394,6 +1397,7 @@ void MiracastController::restart_session_discovery(std::string& mac_address)
if ( !mac_address.empty())
{
strncpy(controller_msgq_data.source_dev_mac, mac_address.c_str(),sizeof(controller_msgq_data.source_dev_mac));
controller_msgq_data.source_dev_mac[sizeof(controller_msgq_data.source_dev_mac) - 1] = '\0';
}
controller_msgq_data.state = CONTROLLER_RESTART_DISCOVERING;
send_thundermsg_to_controller_thread(controller_msgq_data);
Expand All @@ -1419,6 +1423,7 @@ void MiracastController::accept_client_connection(std::string is_accepted)
{
MIRACASTLOG_INFO("[MIRACAST_SERVICE_ACCEPT_CLIENT]");
strncpy(controller_msgq_data.source_dev_mac, m_current_device_mac_addr.c_str(),sizeof(controller_msgq_data.source_dev_mac));
controller_msgq_data.source_dev_mac[sizeof(controller_msgq_data.source_dev_mac) - 1] = '\0';
controller_msgq_data.state = CONTROLLER_CONNECT_REQ_FROM_THUNDER;
}
else
Expand Down Expand Up @@ -1448,9 +1453,13 @@ void MiracastController::switch_launch_request_context(std::string& source_dev_i
sink_dev_ip.c_str(),
source_dev_name.c_str());
strncpy(controller_msgq_data.source_dev_ip, source_dev_ip.c_str(),sizeof(controller_msgq_data.source_dev_ip));
controller_msgq_data.source_dev_ip[sizeof(controller_msgq_data.source_dev_ip) - 1] = '\0';
strncpy(controller_msgq_data.source_dev_mac, source_dev_mac.c_str(),sizeof(controller_msgq_data.source_dev_mac));
controller_msgq_data.source_dev_mac[sizeof(controller_msgq_data.source_dev_mac) - 1] = '\0';
strncpy(controller_msgq_data.source_dev_name, source_dev_name.c_str(),sizeof(controller_msgq_data.source_dev_name));
controller_msgq_data.source_dev_name[sizeof(controller_msgq_data.source_dev_name) - 1] = '\0';
strncpy(controller_msgq_data.sink_dev_ip, sink_dev_ip.c_str(),sizeof(controller_msgq_data.sink_dev_ip));
controller_msgq_data.sink_dev_ip[sizeof(controller_msgq_data.sink_dev_ip) - 1] = '\0';
controller_msgq_data.state = CONTROLLER_SWITCH_LAUNCH_REQ_CTX;
send_thundermsg_to_controller_thread(controller_msgq_data);
}
Expand Down
15 changes: 10 additions & 5 deletions Miracast/MiracastService/MiracastService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ using namespace std;

#define API_VERSION_NUMBER_MAJOR 1
#define API_VERSION_NUMBER_MINOR 0
#define API_VERSION_NUMBER_PATCH 11
#define API_VERSION_NUMBER_PATCH 12

#define SERVER_DETAILS "127.0.0.1:9998"
#define SYSTEM_CALLSIGN "org.rdk.System"
Expand Down Expand Up @@ -934,8 +934,10 @@ namespace WPEFramework
}
else
{
strcpy( stMsgQ.src_dev_name, client_name.c_str());
strcpy( stMsgQ.src_dev_mac_addr, client_mac.c_str());
strncpy( stMsgQ.src_dev_name, client_name.c_str(), sizeof(stMsgQ.src_dev_name));
stMsgQ.src_dev_name[sizeof(stMsgQ.src_dev_name) - 1] = '\0';
strncpy( stMsgQ.src_dev_mac_addr, client_mac.c_str(), sizeof(stMsgQ.src_dev_mac_addr));
stMsgQ.src_dev_mac_addr[sizeof(stMsgQ.src_dev_mac_addr) - 1] = '\0';

MIRACASTLOG_INFO("Given [NAME-MAC-state] are[%s-%s-%s]",
client_name.c_str(),
Expand Down Expand Up @@ -997,8 +999,10 @@ namespace WPEFramework
}
else
{
strcpy( stMsgQ.src_dev_ip_addr, source_dev_ip.c_str());
strcpy( stMsgQ.sink_ip_addr, sink_dev_ip.c_str());
strncpy( stMsgQ.src_dev_ip_addr, source_dev_ip.c_str(), sizeof(stMsgQ.src_dev_ip_addr));
stMsgQ.src_dev_ip_addr[sizeof(stMsgQ.src_dev_ip_addr) - 1] = '\0';
strncpy( stMsgQ.sink_ip_addr, sink_dev_ip.c_str(), sizeof(stMsgQ.sink_ip_addr));
stMsgQ.sink_ip_addr[sizeof(stMsgQ.sink_ip_addr) - 1] = '\0';

MIRACASTLOG_INFO("Given [Src-Sink-IP] are [%s-%s]",
source_dev_ip.c_str(),
Expand Down Expand Up @@ -1048,6 +1052,7 @@ namespace WPEFramework
{
MIRACASTLOG_INFO("!!! NEED TO STOP ONGOING SESSION !!!");
strncpy(commandBuffer,"curl -H \"Authorization: Bearer `WPEFrameworkSecurityUtility | cut -d '\"' -f 4`\" --header \"Content-Type: application/json\" --request POST --data '{\"jsonrpc\":\"2.0\", \"id\":3,\"method\":\"org.rdk.MiracastPlayer.1.stopRequest\", \"params\":{\"reason\": \"NEW_CONNECTION\"}}' http://127.0.0.1:9998/jsonrpc",sizeof(commandBuffer));
commandBuffer[sizeof(commandBuffer) - 1] = '\0';
MIRACASTLOG_INFO("Stopping old Session by [%s]",commandBuffer);
MiracastCommon::execute_SystemCommand(commandBuffer);
sleep(1);
Expand Down
4 changes: 4 additions & 0 deletions Network/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ All notable changes to this RDK Service will be documented in this file.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.

## [1.3.12] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [1.3.11] - 2024-06-19
### Fixed
- onInternetStatus event not posting error fix
Expand Down
7 changes: 6 additions & 1 deletion Network/Network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ using namespace std;

#define API_VERSION_NUMBER_MAJOR 1
#define API_VERSION_NUMBER_MINOR 3
#define API_VERSION_NUMBER_PATCH 11
#define API_VERSION_NUMBER_PATCH 12

/* Netsrvmgr Based Macros & Structures */
#define IARM_BUS_NM_SRV_MGR_NAME "NET_SRV_MGR"
Expand Down Expand Up @@ -859,10 +859,15 @@ typedef struct _IARM_BUS_NetSrvMgr_Iface_EventData_t {
iarmData.ipversion[sizeof(iarmData.ipversion) - 1] = '\0';
iarmData.autoconfig = autoconfig;
strncpy(iarmData.ipaddress, ipaddr.c_str(), 16);
iarmData.ipaddress[sizeof(iarmData.ipaddress) - 1] = '\0';
strncpy(iarmData.netmask, netmask.c_str(), 16);
iarmData.netmask[sizeof(iarmData.netmask) - 1] = '\0';
strncpy(iarmData.gateway, gateway.c_str(), 16);
iarmData.gateway[sizeof(iarmData.gateway) - 1] = '\0';
strncpy(iarmData.primarydns, primarydns.c_str(), 16);
iarmData.primarydns[sizeof(iarmData.primarydns) - 1] = '\0';
strncpy(iarmData.secondarydns, secondarydns.c_str(), 16);
iarmData.secondarydns[sizeof(iarmData.secondarydns) - 1] = '\0';
iarmData.isSupported = false;

if (!autoconfig)
Expand Down
4 changes: 4 additions & 0 deletions StateObserver/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ All notable changes to this RDK Service will be documented in this file.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.

## [1.0.4] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [1.0.3] - 2023-09-12
### Added
- Implement Thunder Plugin Configuration for Kirkstone builds(CMake-3.20 & above)
Expand Down
22 changes: 11 additions & 11 deletions StateObserver/StateObserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

#define API_VERSION_NUMBER_MAJOR 1
#define API_VERSION_NUMBER_MINOR 0
#define API_VERSION_NUMBER_PATCH 1
#define API_VERSION_NUMBER_PATCH 4
#define DEBUG_INFO 0

namespace WPEFramework {
Expand Down Expand Up @@ -813,8 +813,8 @@ namespace WPEFramework {
{
systemStates.dac_init_timestamp.state = state;
systemStates.dac_init_timestamp.error = error;
strncpy(systemStates.dac_init_timestamp.payload,payload,strlen(payload));
systemStates.dac_init_timestamp.payload[strlen(payload)]='\0';
strncpy(systemStates.dac_init_timestamp.payload,payload,sizeof(systemStates.dac_init_timestamp.payload));
systemStates.dac_init_timestamp.payload[sizeof(systemStates.dac_init_timestamp.payload) - 1]='\0';
if(StateObserver::_instance)
StateObserver::_instance->setProp(params,SYSTEM_DAC_INIT_TIMESTAMP,state,error);
string payload_str(payload);
Expand All @@ -825,8 +825,8 @@ namespace WPEFramework {
case IARM_BUS_SYSMGR_SYSSTATE_CABLE_CARD_SERIAL_NO:
{
systemStates.card_serial_no.error =error;
strncpy(systemStates.card_serial_no.payload,payload,strlen(payload));
systemStates.card_serial_no.payload[strlen(payload)]='\0';
strncpy(systemStates.card_serial_no.payload,payload,sizeof(systemStates.card_serial_no.payload));
systemStates.card_serial_no.payload[sizeof(systemStates.card_serial_no.payload) - 1]='\0';
params["propertyName"]=SYSTEM_CARD_SERIAL_NO;
params["error"]=error;
string payload_str(payload);
Expand All @@ -837,8 +837,8 @@ namespace WPEFramework {
case IARM_BUS_SYSMGR_SYSSTATE_STB_SERIAL_NO:
{
systemStates.stb_serial_no.error =error;
strncpy(systemStates.stb_serial_no.payload,payload,strlen(payload));
systemStates.stb_serial_no.payload[strlen(payload)]='\0';
strncpy(systemStates.stb_serial_no.payload,payload,sizeof(systemStates.stb_serial_no.payload));
systemStates.stb_serial_no.payload[sizeof(systemStates.stb_serial_no.payload) - 1]='\0';
params["propertyName"]=SYSTEM_STB_SERIAL_NO;
params["error"]=error;
string payload_str(payload);
Expand Down Expand Up @@ -973,8 +973,8 @@ namespace WPEFramework {
case IARM_BUS_SYSMGR_SYSSTATE_ECM_MAC:
{
systemStates.ecm_mac.error =error;
strncpy(systemStates.ecm_mac.payload,payload,strlen(payload));
systemStates.ecm_mac.payload[strlen(payload)]='\0';
strncpy(systemStates.ecm_mac.payload,payload,sizeof(systemStates.ecm_mac.payload));
systemStates.ecm_mac.payload[sizeof(systemStates.ecm_mac.payload) - 1]='\0';
params["propertyName"]=SYSTEM_ECM_MAC;
params["error"]=error;
string payload_str(payload);
Expand All @@ -986,8 +986,8 @@ namespace WPEFramework {
{
systemStates.ip_mode.state=state;
systemStates.ip_mode.error =error;
strncpy(systemStates.ip_mode.payload,payload,strlen(payload));
systemStates.ip_mode.payload[strlen(payload)]='\0';
strncpy(systemStates.ip_mode.payload,payload,sizeof(systemStates.ip_mode.payload));
systemStates.ip_mode.payload[sizeof(systemStates.ip_mode.payload) - 1]='\0';
if(StateObserver::_instance)
StateObserver::_instance->setProp(params,SYSTEM_IP_MODE,state,error);
string payload_str(payload);
Expand Down
4 changes: 4 additions & 0 deletions SystemServices/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ All notable changes to this RDK Service will be documented in this file.

* For more details, refer to [versioning](https://github.com/rdkcentral/rdkservices#versioning) section under Main README.

## [3.4.3] - 2025-01-02
### Security
- Resolved security vulnerabilities

## [3.4.2] - 2024-12-29
### Removed
- Removed irmgr references from rdkservices.
Expand Down
Loading

0 comments on commit 309dcb1

Please sign in to comment.