Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +41 −2 Original line number Diff line number Diff line Loading @@ -775,6 +775,44 @@ int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) resp.resp.error, "ipa_install_filter"); } static int ipa3_qmi_filter_request_ex_calc_length( struct ipa_install_fltr_rule_req_ex_msg_v01 *req) { int len = 0; /* caller should validate and send the req */ /* instead of sending max length,the approximate length is calculated */ len += ((sizeof(struct ipa_install_fltr_rule_req_ex_msg_v01)) - (QMI_IPA_MAX_FILTERS_EX_V01 * sizeof(struct ipa_filter_spec_ex_type_v01) - QMI_IPA_MAX_FILTERS_EX_V01 * sizeof(uint32_t)) - (QMI_IPA_MAX_FILTERS_V01 * sizeof(struct ipa_filter_spec_ex2_type_v01))); if (req->filter_spec_ex_list_valid && req->filter_spec_ex_list_len > 0) { len += sizeof(struct ipa_filter_spec_ex_type_v01)* req->filter_spec_ex_list_len; } if (req->xlat_filter_indices_list_valid && req->xlat_filter_indices_list_len > 0) { len += sizeof(uint32_t)*req->xlat_filter_indices_list_len; } if (req->filter_spec_ex2_list_valid && req->filter_spec_ex2_list_len > 0) { len += sizeof(struct ipa_filter_spec_ex2_type_v01)* req->filter_spec_ex2_list_len; } if (req->ul_firewall_indices_list_valid && req->ul_firewall_indices_list_len > 0) { len += sizeof(uint32_t)*req->ul_firewall_indices_list_len; } return len; } /* sending filter-install-request to modem*/ int ipa3_qmi_filter_request_ex_send( struct ipa_install_fltr_rule_req_ex_msg_v01 *req) Loading Loading @@ -840,8 +878,9 @@ int ipa3_qmi_filter_request_ex_send( } mutex_unlock(&ipa3_qmi_lock); req_desc.max_msg_len = QMI_IPA_INSTALL_FILTER_RULE_EX_REQ_MAX_MSG_LEN_V01; req_desc.max_msg_len = ipa3_qmi_filter_request_ex_calc_length(req); IPAWANDBG("QMI send request length = %d\n", req_desc.max_msg_len); req_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_EX_REQ_V01; req_desc.ei_array = ipa3_install_fltr_rule_req_ex_msg_data_v01_ei; Loading drivers/platform/msm/ipa/ipa_v3/rmnet_ipa_fd_ioctl.c +21 −21 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. */ #include <linux/init.h> Loading Loading @@ -96,7 +96,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_install_fltr_rule_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -117,7 +117,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE_EX :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_install_fltr_rule_req_ex_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -138,7 +138,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_OFFLOAD_CONNECTION :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_add_offload_connection_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -160,7 +160,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_RMV_OFFLOAD_CONNECTION :>>>\n", DRIVER_NAME); pyld_sz = rmv_offload_req__msg_size; param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -183,7 +183,7 @@ static long ipa3_wan_ioctl(struct file *filp, DRIVER_NAME); pyld_sz = sizeof(struct ipa_configure_ul_firewall_rules_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -205,7 +205,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE_INDEX :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_fltr_installed_notif_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -226,7 +226,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_VOTE_FOR_BW_MBPS :>>>\n", DRIVER_NAME); pyld_sz = sizeof(uint32_t); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -245,7 +245,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_POLL_TETHERING_STATS: IPAWANDBG_LOW("got WAN_IOCTL_POLL_TETHERING_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_poll_tethering_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -266,7 +266,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOCTL_SET_DATA_QUOTA :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_set_data_quota); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -290,7 +290,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SET_TETHER_CLIENT_PIPE: IPAWANDBG_LOW("got WAN_IOC_SET_TETHER_CLIENT_PIPE :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_set_tether_client_pipe); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -306,7 +306,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_TETHER_STATS: IPAWANDBG_LOW("got WAN_IOC_QUERY_TETHER_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_tether_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -328,7 +328,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_TETHER_STATS_ALL: IPAWANDBG_LOW("got WAN_IOC_QUERY_TETHER_STATS_ALL :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_tether_stats_all); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -351,7 +351,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOC_RESET_TETHER_STATS :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_reset_tether_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -369,7 +369,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOC_NOTIFY_WAN_STATE :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_notify_wan_state); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -391,7 +391,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_ENABLE_PER_CLIENT_STATS: IPAWANDBG_LOW("got WAN_IOC_ENABLE_PER_CLIENT_STATS :>>>\n"); pyld_sz = sizeof(bool); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -406,7 +406,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_PER_CLIENT_STATS: IPAWANDBG_LOW("got WAN_IOC_QUERY_PER_CLIENT_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_per_client_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -428,7 +428,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SET_LAN_CLIENT_INFO: IPAWANDBG_LOW("got WAN_IOC_SET_LAN_CLIENT_INFO :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_lan_client_info); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -444,7 +444,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_CLEAR_LAN_CLIENT_INFO: IPAWANDBG_LOW("got WAN_IOC_CLEAR_LAN_CLIENT_INFO :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_lan_client_info); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -461,7 +461,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SEND_LAN_CLIENT_MSG: IPAWANDBG_LOW("got WAN_IOC_SEND_LAN_CLIENT_MSG :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_send_lan_client_msg); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -479,7 +479,7 @@ static long ipa3_wan_ioctl(struct file *filp, retval = -ENOTTY; } if (!IS_ERR(param)) kfree(param); kvfree(param); return retval; } Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +41 −2 Original line number Diff line number Diff line Loading @@ -775,6 +775,44 @@ int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) resp.resp.error, "ipa_install_filter"); } static int ipa3_qmi_filter_request_ex_calc_length( struct ipa_install_fltr_rule_req_ex_msg_v01 *req) { int len = 0; /* caller should validate and send the req */ /* instead of sending max length,the approximate length is calculated */ len += ((sizeof(struct ipa_install_fltr_rule_req_ex_msg_v01)) - (QMI_IPA_MAX_FILTERS_EX_V01 * sizeof(struct ipa_filter_spec_ex_type_v01) - QMI_IPA_MAX_FILTERS_EX_V01 * sizeof(uint32_t)) - (QMI_IPA_MAX_FILTERS_V01 * sizeof(struct ipa_filter_spec_ex2_type_v01))); if (req->filter_spec_ex_list_valid && req->filter_spec_ex_list_len > 0) { len += sizeof(struct ipa_filter_spec_ex_type_v01)* req->filter_spec_ex_list_len; } if (req->xlat_filter_indices_list_valid && req->xlat_filter_indices_list_len > 0) { len += sizeof(uint32_t)*req->xlat_filter_indices_list_len; } if (req->filter_spec_ex2_list_valid && req->filter_spec_ex2_list_len > 0) { len += sizeof(struct ipa_filter_spec_ex2_type_v01)* req->filter_spec_ex2_list_len; } if (req->ul_firewall_indices_list_valid && req->ul_firewall_indices_list_len > 0) { len += sizeof(uint32_t)*req->ul_firewall_indices_list_len; } return len; } /* sending filter-install-request to modem*/ int ipa3_qmi_filter_request_ex_send( struct ipa_install_fltr_rule_req_ex_msg_v01 *req) Loading Loading @@ -840,8 +878,9 @@ int ipa3_qmi_filter_request_ex_send( } mutex_unlock(&ipa3_qmi_lock); req_desc.max_msg_len = QMI_IPA_INSTALL_FILTER_RULE_EX_REQ_MAX_MSG_LEN_V01; req_desc.max_msg_len = ipa3_qmi_filter_request_ex_calc_length(req); IPAWANDBG("QMI send request length = %d\n", req_desc.max_msg_len); req_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_EX_REQ_V01; req_desc.ei_array = ipa3_install_fltr_rule_req_ex_msg_data_v01_ei; Loading
drivers/platform/msm/ipa/ipa_v3/rmnet_ipa_fd_ioctl.c +21 −21 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. */ #include <linux/init.h> Loading Loading @@ -96,7 +96,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_install_fltr_rule_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -117,7 +117,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE_EX :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_install_fltr_rule_req_ex_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -138,7 +138,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_OFFLOAD_CONNECTION :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_add_offload_connection_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -160,7 +160,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_RMV_OFFLOAD_CONNECTION :>>>\n", DRIVER_NAME); pyld_sz = rmv_offload_req__msg_size; param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -183,7 +183,7 @@ static long ipa3_wan_ioctl(struct file *filp, DRIVER_NAME); pyld_sz = sizeof(struct ipa_configure_ul_firewall_rules_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -205,7 +205,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_ADD_FLT_RULE_INDEX :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct ipa_fltr_installed_notif_req_msg_v01); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -226,7 +226,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG("device %s got WAN_IOC_VOTE_FOR_BW_MBPS :>>>\n", DRIVER_NAME); pyld_sz = sizeof(uint32_t); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -245,7 +245,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_POLL_TETHERING_STATS: IPAWANDBG_LOW("got WAN_IOCTL_POLL_TETHERING_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_poll_tethering_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -266,7 +266,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOCTL_SET_DATA_QUOTA :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_set_data_quota); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -290,7 +290,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SET_TETHER_CLIENT_PIPE: IPAWANDBG_LOW("got WAN_IOC_SET_TETHER_CLIENT_PIPE :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_set_tether_client_pipe); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -306,7 +306,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_TETHER_STATS: IPAWANDBG_LOW("got WAN_IOC_QUERY_TETHER_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_tether_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -328,7 +328,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_TETHER_STATS_ALL: IPAWANDBG_LOW("got WAN_IOC_QUERY_TETHER_STATS_ALL :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_tether_stats_all); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -351,7 +351,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOC_RESET_TETHER_STATS :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_reset_tether_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -369,7 +369,7 @@ static long ipa3_wan_ioctl(struct file *filp, IPAWANDBG_LOW("device %s got WAN_IOC_NOTIFY_WAN_STATE :>>>\n", DRIVER_NAME); pyld_sz = sizeof(struct wan_ioctl_notify_wan_state); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -391,7 +391,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_ENABLE_PER_CLIENT_STATS: IPAWANDBG_LOW("got WAN_IOC_ENABLE_PER_CLIENT_STATS :>>>\n"); pyld_sz = sizeof(bool); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -406,7 +406,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_QUERY_PER_CLIENT_STATS: IPAWANDBG_LOW("got WAN_IOC_QUERY_PER_CLIENT_STATS :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_query_per_client_stats); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -428,7 +428,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SET_LAN_CLIENT_INFO: IPAWANDBG_LOW("got WAN_IOC_SET_LAN_CLIENT_INFO :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_lan_client_info); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -444,7 +444,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_CLEAR_LAN_CLIENT_INFO: IPAWANDBG_LOW("got WAN_IOC_CLEAR_LAN_CLIENT_INFO :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_lan_client_info); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -461,7 +461,7 @@ static long ipa3_wan_ioctl(struct file *filp, case WAN_IOC_SEND_LAN_CLIENT_MSG: IPAWANDBG_LOW("got WAN_IOC_SEND_LAN_CLIENT_MSG :>>>\n"); pyld_sz = sizeof(struct wan_ioctl_send_lan_client_msg); param = memdup_user((const void __user *)arg, pyld_sz); param = vmemdup_user((const void __user *)arg, pyld_sz); if (IS_ERR(param)) { retval = PTR_ERR(param); break; Loading @@ -479,7 +479,7 @@ static long ipa3_wan_ioctl(struct file *filp, retval = -ENOTTY; } if (!IS_ERR(param)) kfree(param); kvfree(param); return retval; } Loading