]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mshv: Fix duplicate GSI detection for GSI 0
authorStanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Thu, 7 May 2026 15:43:49 +0000 (15:43 +0000)
committerWei Liu <wei.liu@kernel.org>
Wed, 22 Jul 2026 23:51:25 +0000 (23:51 +0000)
The duplicate routing entry check in mshv_update_routing_table() uses
guest_irq_num != 0 to detect whether a GSI slot is already occupied.
This fails for GSI 0 because its guest_irq_num is 0 both when the slot
is unused (zero-initialized) and when legitimately assigned. As a
result, duplicate entries for GSI 0 are silently accepted, with the
second entry overwriting the first — corrupting the routing table
without any error reported to userspace.

While GSI 0 (legacy timer) is unlikely to appear in MSI-based routing
in practice, the check is semantically wrong — it conflates
"uninitialized" with "GSI number 0." Use girq_entry_valid instead,
which is explicitly set to true when an entry is populated and remains
zero for unused slots regardless of the GSI number.

Fixes: 621191d709b14 ("Drivers: hv: Introduce mshv_root module to expose /dev/mshv to VMMs")
Signed-off-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Reviewed-by: Anirudh Rayabharam (Microsoft) <anirudh@anirudhrb.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/hv/mshv_irq.c

index b3142c84dcbc2fbd25136f5a63623dcd3c6def15..65a4ffc82d5669e3842f3587a06271c8279c9121 100644 (file)
@@ -51,7 +51,7 @@ int mshv_update_routing_table(struct mshv_partition *partition,
                /*
                 * Allow only one to one mapping between GSI and MSI routing.
                 */
-               if (girq->guest_irq_num != 0) {
+               if (girq->girq_entry_valid) {
                        r = -EINVAL;
                        goto out;
                }