* [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation @ 2026-05-17 12:55 ` Berkant Koc 2026-05-17 12:55 ` [PATCH 1/2] drm/hyperv: validate resolution_count from host VMBus message Berkant Koc ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 12:55 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat The hyperv synthetic video driver parses VMBus messages from the host without bounding two host-controlled values that feed into fixed-size buffers. Both items are input validation, not security bugs: the Hyper-V host sits inside the trusted compute base under the default Hyper-V threat-model. The patches still trim the inputs the driver accepts at face value, matching the trajectory drivers/hv/ has followed for Confidential-VMBus work where the host is no longer fully trusted. Patch 1 bounds resolution_count against supported_resolution[SYNTHVID_MAX_RESOLUTION_COUNT]; the existing default_resolution_index check is bypassable when both values exceed 64. Patch 2 forwards bytes_recvd from vmbus_recvpacket() into the sub-handler so that vid_hdr.type and feature_chg.is_dirt_needed are only read once the host actually delivered enough bytes, and so that the init_buf memcpy uses the received length. Sending as a plain patch series, not a security disclosure. Compile-tested against drm-fixes (6916d5703ddf), static-only. Berkant Koc (2): drm/hyperv: validate resolution_count from host VMBus message drm/hyperv: validate VMBus packet size in receive callback drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) base-commit: 6916d5703ddf9a38f1f6c2cc793381a24ee914c6 -- 2.47.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] drm/hyperv: validate resolution_count from host VMBus message 2026-05-17 12:55 ` [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc @ 2026-05-17 12:55 ` Berkant Koc 2026-05-17 12:55 ` [PATCH 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 12:55 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat The synthetic video device receives a SYNTHVID_RESOLUTION_RESPONSE containing a u8 resolution_count and a u8 default_resolution_index from the host. The existing check rejects resolution_count == 0 and rejects an index that is greater or equal to resolution_count, but does not bound resolution_count itself against the fixed supported_resolution[SYNTHVID_MAX_RESOLUTION_COUNT] array. A host that returns resolution_count > 64 together with an in-range default_resolution_index causes the subsequent loop to read past the array. Reject any resolution_count that exceeds SYNTHVID_MAX_RESOLUTION_COUNT, folded into the existing zero-check for one log entry per failure. This matches the input-validation pattern used by other VMBus parsers under drivers/hv/ and trims one host-controlled value from the trusted path. Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device") Cc: stable@vger.kernel.org # 5.14+ Signed-off-by: Berkant Koc <me@berkoc.com> --- drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c index 051ecc526832..003bb118d64c 100644 --- a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c +++ b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c @@ -391,8 +391,11 @@ static int hyperv_get_supported_resolution(struct hv_device *hdev) return -ETIMEDOUT; } - if (msg->resolution_resp.resolution_count == 0) { - drm_err(dev, "No supported resolutions\n"); + if (msg->resolution_resp.resolution_count == 0 || + msg->resolution_resp.resolution_count > + SYNTHVID_MAX_RESOLUTION_COUNT) { + drm_err(dev, "Invalid resolution count: %d\n", + msg->resolution_resp.resolution_count); return -ENODEV; } -- 2.47.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] drm/hyperv: validate VMBus packet size in receive callback 2026-05-17 12:55 ` [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc 2026-05-17 12:55 ` [PATCH 1/2] drm/hyperv: validate resolution_count from host VMBus message Berkant Koc @ 2026-05-17 12:55 ` Berkant Koc 2026-05-17 14:25 ` [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc 2026-05-18 6:04 ` Claude review: drm/hyperv: harden VMBus message parser input validation Claude Code Review Bot 3 siblings, 0 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 12:55 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat hyperv_receive() reads bytes_recvd from vmbus_recvpacket() but does not forward that value to hyperv_receive_sub(). The sub-handler reads msg->vid_hdr.type and msg->feature_chg.is_dirt_needed without knowing how many bytes the host actually wrote, so a short packet leaves the parser reading bytes that the host did not write in this packet. The unconditional memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE) on the wait-completion path also copies the full 16 KiB recv_buf regardless of bytes_recvd, including any residue from the prior message. Pass bytes_recvd into hyperv_receive_sub() and reject any packet shorter than the pipe + synthvid header. The dirt-feature branch additionally requires the feature_change payload size before reading is_dirt_needed. The init_buf copy now uses bytes_recvd as the length argument, which keeps it bounded by VMBUS_MAX_PACKET_SIZE through the new upper check. Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device") Cc: stable@vger.kernel.org # 5.14+ Signed-off-by: Berkant Koc <me@berkoc.com> --- drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c index 003bb118d64c..0d32d9944c43 100644 --- a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c +++ b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c @@ -420,26 +420,35 @@ static int hyperv_get_supported_resolution(struct hv_device *hdev) return 0; } -static void hyperv_receive_sub(struct hv_device *hdev) +static void hyperv_receive_sub(struct hv_device *hdev, u32 bytes_recvd) { struct hyperv_drm_device *hv = hv_get_drvdata(hdev); struct synthvid_msg *msg; + size_t hdr_size; if (!hv) return; + hdr_size = sizeof(struct pipe_msg_hdr) + + sizeof(struct synthvid_msg_hdr); + if (bytes_recvd < hdr_size || bytes_recvd > VMBUS_MAX_PACKET_SIZE) + return; + msg = (struct synthvid_msg *)hv->recv_buf; /* Complete the wait event */ if (msg->vid_hdr.type == SYNTHVID_VERSION_RESPONSE || msg->vid_hdr.type == SYNTHVID_RESOLUTION_RESPONSE || msg->vid_hdr.type == SYNTHVID_VRAM_LOCATION_ACK) { - memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE); + memcpy(hv->init_buf, msg, bytes_recvd); complete(&hv->wait); return; } if (msg->vid_hdr.type == SYNTHVID_FEATURE_CHANGE) { + if (bytes_recvd < hdr_size + + sizeof(struct synthvid_feature_change)) + return; hv->dirt_needed = msg->feature_chg.is_dirt_needed; if (hv->dirt_needed) hyperv_hide_hw_ptr(hv->hdev); @@ -466,7 +475,7 @@ static void hyperv_receive(void *ctx) &bytes_recvd, &req_id); if (bytes_recvd > 0 && recv_buf->pipe_hdr.type == PIPE_MSG_DATA) - hyperv_receive_sub(hdev); + hyperv_receive_sub(hdev, bytes_recvd); } while (bytes_recvd > 0 && ret == 0); } -- 2.47.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation 2026-05-17 12:55 ` [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc 2026-05-17 12:55 ` [PATCH 1/2] drm/hyperv: validate resolution_count from host VMBus message Berkant Koc 2026-05-17 12:55 ` [PATCH 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc @ 2026-05-17 14:25 ` Berkant Koc 2026-05-17 14:25 ` [PATCH v2 1/2] drm/hyperv: validate resolution_count and harden VSP request paths Berkant Koc 2026-05-17 14:25 ` [PATCH v2 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc 2026-05-18 6:04 ` Claude review: drm/hyperv: harden VMBus message parser input validation Claude Code Review Bot 3 siblings, 2 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 14:25 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat v2 folds two further issues into patch 1 that the sashiko-bot review pointed out on v1: 1. The resolution_count bounds check in v1 returned -ENODEV, but hyperv_connect_vsp() only logged a warning and continued without setting hv->screen_width_max / height_max / preferred_*. That left dev->mode_config.max_width and max_height at 0, which made drm_internal_framebuffer_create() reject every userspace framebuffer with -EINVAL. v2 falls back to the WIN8 defaults on that error path, matching the pre-WIN10 branch. 2. The three sequential VSP requests in hyperv_connect_vsp() (negotiate version, update VRAM location, get supported resolution) all wait on the same hv->wait completion without calling reinit_completion() between requests. A delayed complete() after a wait_for_completion_timeout() can leak into the next request and let it parse stale data out of hv->init_buf. v2 calls reinit_completion() before each send. Patch 2 is unchanged from v1. v1: https://lore.kernel.org/r/20260517-drm-hyperv-cover@berkoc.com Berkant Koc (2): drm/hyperv: validate resolution_count and harden VSP request paths drm/hyperv: validate VMBus packet size in receive callback drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 32 ++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) base-commit: 6916d5703ddf9a38f1f6c2cc793381a24ee914c6 -- 2.47.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] drm/hyperv: validate resolution_count and harden VSP request paths 2026-05-17 14:25 ` [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc @ 2026-05-17 14:25 ` Berkant Koc 2026-05-17 14:25 ` [PATCH v2 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc 1 sibling, 0 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 14:25 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat, stable The synthetic video device parses a SYNTHVID_RESOLUTION_RESPONSE that contains a u8 resolution_count and a u8 default_resolution_index. The existing check rejects resolution_count == 0 and an index greater or equal to resolution_count, but does not bound resolution_count itself against the fixed supported_resolution[SYNTHVID_MAX_RESOLUTION_COUNT] array. A host that returns resolution_count > 64 together with an in-range default_resolution_index causes the subsequent loop to read past the array. Reject any resolution_count that exceeds the array bound, folded into the existing zero-check so a single log entry remains per failure. When that bounds check (or any later failure in hyperv_get_supported_resolution()) returns an error, the caller in hyperv_connect_vsp() previously logged a warning and continued without populating hv->screen_width_max / hv->screen_height_max / preferred_*. hyperv_mode_config_init() then set dev->mode_config.max_width and max_height to 0, which makes drm_internal_framebuffer_create() reject every userspace framebuffer with -EINVAL. Populate the fields with the WIN8 defaults that the pre-WIN10 branch already uses so a failed resolution probe degrades to a usable display instead of disabling it. The driver also issues three sequential VSP requests (negotiate version, update VRAM location, get supported resolution) that share a single hv->wait completion. None of the call sites call reinit_completion() between requests. If wait_for_completion_timeout() returns 0 but a delayed response later triggers complete(&hv->wait) in the receive callback, the next request's wait can consume that stale completion, return immediately, and parse stale data out of hv->init_buf. Call reinit_completion() before each send so every request waits for its own response. Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device") Cc: stable@vger.kernel.org # 5.14+ Signed-off-by: Berkant Koc <me@berkoc.com> --- drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c index 051ecc526832..3b5065fe06e4 100644 --- a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c +++ b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c @@ -223,6 +223,7 @@ static int hyperv_negotiate_version(struct hv_device *hdev, u32 ver) msg->vid_hdr.size = sizeof(struct synthvid_msg_hdr) + sizeof(struct synthvid_version_req); msg->ver_req.version = ver; + reinit_completion(&hv->wait); hyperv_sendpacket(hdev, msg); t = wait_for_completion_timeout(&hv->wait, VMBUS_VSP_TIMEOUT); @@ -257,6 +258,7 @@ int hyperv_update_vram_location(struct hv_device *hdev, phys_addr_t vram_pp) msg->vram.user_ctx = vram_pp; msg->vram.vram_gpa = vram_pp; msg->vram.is_vram_gpa_specified = 1; + reinit_completion(&hv->wait); hyperv_sendpacket(hdev, msg); t = wait_for_completion_timeout(&hv->wait, VMBUS_VSP_TIMEOUT); @@ -383,6 +385,7 @@ static int hyperv_get_supported_resolution(struct hv_device *hdev) sizeof(struct synthvid_supported_resolution_req); msg->resolution_req.maximum_resolution_count = SYNTHVID_MAX_RESOLUTION_COUNT; + reinit_completion(&hv->wait); hyperv_sendpacket(hdev, msg); t = wait_for_completion_timeout(&hv->wait, VMBUS_VSP_TIMEOUT); @@ -391,8 +394,11 @@ static int hyperv_get_supported_resolution(struct hv_device *hdev) return -ETIMEDOUT; } - if (msg->resolution_resp.resolution_count == 0) { - drm_err(dev, "No supported resolutions\n"); + if (msg->resolution_resp.resolution_count == 0 || + msg->resolution_resp.resolution_count > + SYNTHVID_MAX_RESOLUTION_COUNT) { + drm_err(dev, "Invalid resolution count: %d\n", + msg->resolution_resp.resolution_count); return -ENODEV; } @@ -506,8 +512,13 @@ int hyperv_connect_vsp(struct hv_device *hdev) if (hyperv_version_ge(hv->synthvid_version, SYNTHVID_VERSION_WIN10)) { ret = hyperv_get_supported_resolution(hdev); - if (ret) + if (ret) { drm_err(dev, "Failed to get supported resolution from host, use default\n"); + hv->screen_width_max = SYNTHVID_WIDTH_WIN8; + hv->screen_height_max = SYNTHVID_HEIGHT_WIN8; + hv->preferred_width = SYNTHVID_WIDTH_WIN8; + hv->preferred_height = SYNTHVID_HEIGHT_WIN8; + } } else { hv->screen_width_max = SYNTHVID_WIDTH_WIN8; hv->screen_height_max = SYNTHVID_HEIGHT_WIN8; -- 2.47.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] drm/hyperv: validate VMBus packet size in receive callback 2026-05-17 14:25 ` [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc 2026-05-17 14:25 ` [PATCH v2 1/2] drm/hyperv: validate resolution_count and harden VSP request paths Berkant Koc @ 2026-05-17 14:25 ` Berkant Koc 1 sibling, 0 replies; 7+ messages in thread From: Berkant Koc @ 2026-05-17 14:25 UTC (permalink / raw) To: Saurabh Sengar, Dexuan Cui, Long Li Cc: linux-hyperv, dri-devel, linux-kernel, K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Michael Kelley, Thomas Zimmermann, Maarten Lankhorst, Maxime Ripard, Deepak Rawat, stable hyperv_receive() reads bytes_recvd from vmbus_recvpacket() but does not forward that value to hyperv_receive_sub(). The sub-handler reads msg->vid_hdr.type and msg->feature_chg.is_dirt_needed without knowing how many bytes the host actually wrote, so a short packet leaves the parser reading bytes that the host did not write in this packet. The unconditional memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE) on the wait-completion path also copies the full 16 KiB recv_buf regardless of bytes_recvd, including any residue from the prior message. Pass bytes_recvd into hyperv_receive_sub() and reject any packet shorter than the pipe + synthvid header. The dirt-feature branch additionally requires the feature_change payload size before reading is_dirt_needed. The init_buf copy now uses bytes_recvd as the length argument, which keeps it bounded by VMBUS_MAX_PACKET_SIZE through the new upper check. Unchanged from v1. Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device") Cc: stable@vger.kernel.org # 5.14+ Signed-off-by: Berkant Koc <me@berkoc.com> --- drivers/gpu/drm/hyperv/hyperv_drm_proto.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c index 3b5065fe06e4..cdab4895dd40 100644 --- a/drivers/gpu/drm/hyperv/hyperv_drm_proto.c +++ b/drivers/gpu/drm/hyperv/hyperv_drm_proto.c @@ -423,26 +423,35 @@ static int hyperv_get_supported_resolution(struct hv_device *hdev) return 0; } -static void hyperv_receive_sub(struct hv_device *hdev) +static void hyperv_receive_sub(struct hv_device *hdev, u32 bytes_recvd) { struct hyperv_drm_device *hv = hv_get_drvdata(hdev); struct synthvid_msg *msg; + size_t hdr_size; if (!hv) return; + hdr_size = sizeof(struct pipe_msg_hdr) + + sizeof(struct synthvid_msg_hdr); + if (bytes_recvd < hdr_size || bytes_recvd > VMBUS_MAX_PACKET_SIZE) + return; + msg = (struct synthvid_msg *)hv->recv_buf; /* Complete the wait event */ if (msg->vid_hdr.type == SYNTHVID_VERSION_RESPONSE || msg->vid_hdr.type == SYNTHVID_RESOLUTION_RESPONSE || msg->vid_hdr.type == SYNTHVID_VRAM_LOCATION_ACK) { - memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE); + memcpy(hv->init_buf, msg, bytes_recvd); complete(&hv->wait); return; } if (msg->vid_hdr.type == SYNTHVID_FEATURE_CHANGE) { + if (bytes_recvd < hdr_size + + sizeof(struct synthvid_feature_change)) + return; hv->dirt_needed = msg->feature_chg.is_dirt_needed; if (hv->dirt_needed) hyperv_hide_hw_ptr(hv->hdev); @@ -469,7 +478,7 @@ static void hyperv_receive(void *ctx) &bytes_recvd, &req_id); if (bytes_recvd > 0 && recv_buf->pipe_hdr.type == PIPE_MSG_DATA) - hyperv_receive_sub(hdev); + hyperv_receive_sub(hdev, bytes_recvd); } while (bytes_recvd > 0 && ret == 0); } -- 2.47.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Claude review: drm/hyperv: harden VMBus message parser input validation 2026-05-17 12:55 ` [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc ` (2 preceding siblings ...) 2026-05-17 14:25 ` [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc @ 2026-05-18 6:04 ` Claude Code Review Bot 3 siblings, 0 replies; 7+ messages in thread From: Claude Code Review Bot @ 2026-05-18 6:04 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: drm/hyperv: harden VMBus message parser input validation Author: Berkant Koc <me@berkoc.com> Patches: 6 Reviewed: 2026-05-18T16:04:34.881572 --- This is a well-motivated, well-scoped hardening series for the Hyper-V synthetic video driver's VMBus message parsing. The cover letter is clear about the threat model: these are input validation improvements, not security fixes per the standard Hyper-V trust model, but they align with the Confidential-VM trajectory where the host is not fully trusted. The v2 iteration addresses real issues flagged on v1 (the dead-on-arrival display from missing WIN8 fallback defaults, and the stale completion race). Both patches are small, focused, and target a single file. The commit messages are detailed and accurate. **Series verdict: Looks good overall with minor issues noted below.** --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-18 6:04 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260517134926.B4179C2BCB0@smtp.kernel.org>
2026-05-17 12:55 ` [PATCH 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc
2026-05-17 12:55 ` [PATCH 1/2] drm/hyperv: validate resolution_count from host VMBus message Berkant Koc
2026-05-17 12:55 ` [PATCH 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc
2026-05-17 14:25 ` [PATCH v2 0/2] drm/hyperv: harden VMBus message parser input validation Berkant Koc
2026-05-17 14:25 ` [PATCH v2 1/2] drm/hyperv: validate resolution_count and harden VSP request paths Berkant Koc
2026-05-17 14:25 ` [PATCH v2 2/2] drm/hyperv: validate VMBus packet size in receive callback Berkant Koc
2026-05-18 6:04 ` Claude review: drm/hyperv: harden VMBus message parser input validation Claude Code Review Bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox