Loading drivers/misc/qseecom.c +8 −3 Original line number Original line Diff line number Diff line Loading @@ -1514,8 +1514,6 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, rcvd_lstnr.sb_size)) rcvd_lstnr.sb_size)) return -EFAULT; return -EFAULT; data->listener.id = rcvd_lstnr.listener_id; ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id); ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id); if (ptr_svc) { if (ptr_svc) { if (!ptr_svc->unregister_pending) { if (!ptr_svc->unregister_pending) { Loading Loading @@ -1573,6 +1571,7 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, new_entry->listener_in_use = false; new_entry->listener_in_use = false; list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); data->listener.id = rcvd_lstnr.listener_id; pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); return ret; return ret; } } Loading Loading @@ -1637,6 +1636,11 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data) struct qseecom_registered_listener_list *ptr_svc = NULL; struct qseecom_registered_listener_list *ptr_svc = NULL; struct qseecom_unregister_pending_list *entry = NULL; struct qseecom_unregister_pending_list *entry = NULL; if (data->released) { pr_err("Don't unregister lsnr %d\n", data->listener.id); return -EINVAL; } ptr_svc = __qseecom_find_svc(data->listener.id); ptr_svc = __qseecom_find_svc(data->listener.id); if (!ptr_svc) { if (!ptr_svc) { pr_err("Unregiser invalid listener ID %d\n", data->listener.id); pr_err("Unregiser invalid listener ID %d\n", data->listener.id); Loading Loading @@ -8289,9 +8293,10 @@ static int qseecom_release(struct inode *inode, struct file *file) switch (data->type) { switch (data->type) { case QSEECOM_LISTENER_SERVICE: case QSEECOM_LISTENER_SERVICE: pr_debug("release lsnr svc %d\n", data->listener.id); pr_debug("release lsnr svc %d\n", data->listener.id); free_private_data = false; mutex_lock(&listener_access_lock); mutex_lock(&listener_access_lock); ret = qseecom_unregister_listener(data); ret = qseecom_unregister_listener(data); if (!ret) free_private_data = false; data->listener.release_called = true; data->listener.release_called = true; mutex_unlock(&listener_access_lock); mutex_unlock(&listener_access_lock); __wakeup_unregister_listener_kthread(); __wakeup_unregister_listener_kthread(); Loading Loading
drivers/misc/qseecom.c +8 −3 Original line number Original line Diff line number Diff line Loading @@ -1514,8 +1514,6 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, rcvd_lstnr.sb_size)) rcvd_lstnr.sb_size)) return -EFAULT; return -EFAULT; data->listener.id = rcvd_lstnr.listener_id; ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id); ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id); if (ptr_svc) { if (ptr_svc) { if (!ptr_svc->unregister_pending) { if (!ptr_svc->unregister_pending) { Loading Loading @@ -1573,6 +1571,7 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, new_entry->listener_in_use = false; new_entry->listener_in_use = false; list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); data->listener.id = rcvd_lstnr.listener_id; pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); return ret; return ret; } } Loading Loading @@ -1637,6 +1636,11 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data) struct qseecom_registered_listener_list *ptr_svc = NULL; struct qseecom_registered_listener_list *ptr_svc = NULL; struct qseecom_unregister_pending_list *entry = NULL; struct qseecom_unregister_pending_list *entry = NULL; if (data->released) { pr_err("Don't unregister lsnr %d\n", data->listener.id); return -EINVAL; } ptr_svc = __qseecom_find_svc(data->listener.id); ptr_svc = __qseecom_find_svc(data->listener.id); if (!ptr_svc) { if (!ptr_svc) { pr_err("Unregiser invalid listener ID %d\n", data->listener.id); pr_err("Unregiser invalid listener ID %d\n", data->listener.id); Loading Loading @@ -8289,9 +8293,10 @@ static int qseecom_release(struct inode *inode, struct file *file) switch (data->type) { switch (data->type) { case QSEECOM_LISTENER_SERVICE: case QSEECOM_LISTENER_SERVICE: pr_debug("release lsnr svc %d\n", data->listener.id); pr_debug("release lsnr svc %d\n", data->listener.id); free_private_data = false; mutex_lock(&listener_access_lock); mutex_lock(&listener_access_lock); ret = qseecom_unregister_listener(data); ret = qseecom_unregister_listener(data); if (!ret) free_private_data = false; data->listener.release_called = true; data->listener.release_called = true; mutex_unlock(&listener_access_lock); mutex_unlock(&listener_access_lock); __wakeup_unregister_listener_kthread(); __wakeup_unregister_listener_kthread(); Loading