diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c
index ec68247f5bdb99e056d23c71aa96d84c14cfcf2a..0c38414a3e06841d2870b02aeb84a2fdc2f90854 100644
--- a/drivers/staging/greybus/loopback.c
+++ b/drivers/staging/greybus/loopback.c
@@ -533,16 +533,16 @@ static int gb_loopback_request_recv(u8 type, struct gb_operation *operation)
 			return -EINVAL;
 		}
 
-		if (len) {
-			if (!gb_operation_response_alloc(operation,
-					len + sizeof(*response), GFP_KERNEL)) {
-				dev_err(dev, "error allocating response\n");
-				return -ENOMEM;
-			}
-			response = operation->response->payload;
-			response->len = cpu_to_le32(len);
-			memcpy(response->data, request->data, len);
+		if (!gb_operation_response_alloc(operation,
+				len + sizeof(*response), GFP_KERNEL)) {
+			dev_err(dev, "error allocating response\n");
+			return -ENOMEM;
 		}
+		response = operation->response->payload;
+		response->len = cpu_to_le32(len);
+		if (len)
+			memcpy(response->data, request->data, len);
+
 		return 0;
 	default:
 		dev_err(dev, "unsupported request: %hhu\n", type);