qcacld-3.0: Correct the condition to reject TDLS
Reject any incoming get_all_peers TDLS command if there are any currently in progress. The later commands will only be processed once the earlier commands finish, since they are processed sequentially. However, once a command finishes, the memory allocated for it from userspace is freed up. Each command is passed the same address so the later commands will end up writing to a freed address. To avoid this, reject incoming requests if there are any still in progress. For this, the condition should be corrected. We shouldn't use completion_done here for checking for completion as this will always return false, as tdls_user_cmd_comp.done will remain in init state always. So, the very first command will also not work. In general completion_done is used to check if there are multiple threads waiting on the complete event that's why it will return true only when tdls_user_cmd_comp.done is set with complete(). Also, if the state is in wait_for_completion, this function will return true after the wait timer is over or condition is met as wait_for_completion will hold out the hold lock and will will prevent completion_done from returning. Better to use a flag to determine command condition. Change-Id: I1b6b270dbb9b0b103f10e7ae22a60030ea2fbb98 CRs-Fixed: 3162184
Loading
Please register or sign in to comment