From 113656563a3e81e0258472ef11c17f9032740879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 10 Jun 2023 14:11:36 +0200 Subject: [PATCH] [HALX86] Minor fixes in HaliFindBusAddressTranslation() - Remove ContextValue variable. This variable erroneously truncated *Context value (that can contain a pointer value) to 32 bits. - Gracefully fail instead of asserting. --- hal/halx86/legacy/bussupp.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/hal/halx86/legacy/bussupp.c b/hal/halx86/legacy/bussupp.c index f967ece635c..6f91c3b7280 100644 --- a/hal/halx86/legacy/bussupp.c +++ b/hal/halx86/legacy/bussupp.c @@ -1333,18 +1333,19 @@ HaliFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress, PHAL_BUS_HANDLER BusHandler; PBUS_HANDLER Handler; PLIST_ENTRY NextEntry; - ULONG ContextValue; /* Make sure we have a context */ - if (!Context) return FALSE; - ASSERT((*Context) || (NextBus == TRUE)); + if (!Context) + return FALSE; - /* Read the context */ - ContextValue = *Context; + /* If we have data in the context, then this shouldn't be a new lookup */ + if ((*Context != 0) && (NextBus != FALSE)) + return FALSE; /* Find the bus handler */ - Handler = HalpContextToBusHandler(ContextValue); - if (!Handler) return FALSE; + Handler = HalpContextToBusHandler(*Context); + if (!Handler) + return FALSE; /* Check if this is an ongoing lookup */ if (NextBus) @@ -1354,7 +1355,8 @@ HaliFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress, NextEntry = &BusHandler->AllHandlers; /* Get the next one if we were already with one */ - if (ContextValue) NextEntry = NextEntry->Flink; + if (*Context) + NextEntry = NextEntry->Flink; /* Start scanning */ while (TRUE) @@ -1373,7 +1375,10 @@ HaliFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress, BusHandler->Handler.BusNumber, BusAddress, AddressSpace, - TranslatedAddress)) break; + TranslatedAddress)) + { + break; + } /* Try the next one */ NextEntry = NextEntry->Flink; @@ -1389,7 +1394,10 @@ HaliFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress, Handler->BusNumber, BusAddress, AddressSpace, - TranslatedAddress)) return FALSE; + TranslatedAddress)) + { + return FALSE; + } /* Remember for next time */ *Context = (ULONG_PTR)Handler;