| From 37d969a0401f4f296af4f6a04da25a8b20c19aef Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 23 Jan 2022 21:02:22 +0100 |
| Subject: staging: vchiq_core: handle NULL result of find_service_by_handle |
| |
| From: Stefan Wahren <stefan.wahren@i2se.com> |
| |
| [ Upstream commit ca225857faf237234d2fffe5d1919467dfadd822 ] |
| |
| In case of an invalid handle the function find_servive_by_handle |
| returns NULL. So take care of this and avoid a NULL pointer dereference. |
| |
| Reviewed-by: Nicolas Saenz Julienne <nsaenz@kernel.org> |
| Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com> |
| Link: https://lore.kernel.org/r/1642968143-19281-18-git-send-email-stefan.wahren@i2se.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c |
| index 7fe20d4b7ba2..b7295236671c 100644 |
| --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c |
| +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c |
| @@ -2306,6 +2306,9 @@ void vchiq_msg_queue_push(unsigned int handle, struct vchiq_header *header) |
| struct vchiq_service *service = find_service_by_handle(handle); |
| int pos; |
| |
| + if (!service) |
| + return; |
| + |
| while (service->msg_queue_write == service->msg_queue_read + |
| VCHIQ_MAX_SLOTS) { |
| if (wait_for_completion_interruptible(&service->msg_queue_pop)) |
| @@ -2326,6 +2329,9 @@ struct vchiq_header *vchiq_msg_hold(unsigned int handle) |
| struct vchiq_header *header; |
| int pos; |
| |
| + if (!service) |
| + return NULL; |
| + |
| if (service->msg_queue_write == service->msg_queue_read) |
| return NULL; |
| |
| -- |
| 2.35.1 |
| |