diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index bb856d606f4a..dd6552e83eee 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -23,6 +23,7 @@
 #include "libcamera/internal/camera_controls.h"
 #include "libcamera/internal/formats.h"
 #include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/request.h"
 
 /**
  * \file libcamera/camera.h
@@ -1119,6 +1120,12 @@ int Camera::queueRequest(Request *request)
 	if (ret < 0)
 		return ret;
 
+	/* Requests can only be queued to the camera that created them.*/
+	if (request->_d()->camera() != this) {
+		LOG(Camera, Error) << "Request was not created by this camera";
+		return -EINVAL;
+	}
+
 	/*
 	 * The camera state may change until the end of the function. No locking
 	 * is however needed as PipelineHandler::queueRequest() will handle