diff --git a/drivers/cam_core/cam_node.c b/drivers/cam_core/cam_node.c index d27bcdd6bf0d..4561aecb6f7e 100644 --- a/drivers/cam_core/cam_node.c +++ b/drivers/cam_core/cam_node.c @@ -812,6 +812,7 @@ int cam_node_handle_ioctl(struct cam_node *node, struct cam_control *cmd) } case CAM_ACQUIRE_HW: { uint32_t api_version; + uint32_t struct_version; void *acquire_ptr = NULL; size_t acquire_size; @@ -846,6 +847,16 @@ int cam_node_handle_ioctl(struct cam_node *node, struct cam_control *cmd) } if (api_version == 1) { + struct_version = + ((struct cam_acquire_hw_cmd_v1 *)acquire_ptr)->struct_version; + if (struct_version != api_version) { + CAM_ERR(CAM_CORE, + "Unmatched struct api version %u and struct version %u", + api_version, struct_version); + rc = -EINVAL; + goto acquire_free; + } + rc = __cam_node_handle_acquire_hw_v1(node, acquire_ptr); if (rc) { CAM_ERR(CAM_CORE, @@ -853,6 +864,16 @@ int cam_node_handle_ioctl(struct cam_node *node, struct cam_control *cmd) goto acquire_kfree; } } else if (api_version == 2) { + struct_version = + ((struct cam_acquire_hw_cmd_v2 *)acquire_ptr)->struct_version; + if (struct_version != api_version) { + CAM_ERR(CAM_CORE, + "Unmatched struct api version %u and struct version %u", + api_version, struct_version); + rc = -EINVAL; + goto acquire_free; + } + rc = __cam_node_handle_acquire_hw_v2(node, acquire_ptr); if (rc) { CAM_ERR(CAM_CORE,