All,
I hope I am proving this issue the right way, please correct me if I am not. I
also am not sure if this has been already reported. I have come across a
problem in Dispatcher.c within PiSmmCore of MdeModulePkg linked here:
https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/PiSmmCore/Dispatcher.c
The issue is in function "SmmDriverDispatchHandler" on line 1196. Within this
function is a for loop fairly early on line 1235 defined like so:
for (Index = 0; Index < HandleCount; Index++) {
Then on line 1271 there is a another for loop inside the first for loop defined
like so:
for (Index = 0; Index < sizeof (mSmmFileTypes)/sizeof (EFI_FV_FILETYPE);
Index++) {
Then on line 1318 you will find another for loop inside the first for loop (but
outside the second for loop) defined like so:
for (Index = 0; Index < AprioriEntryCount; Index++) {
You will note that all three for loops use the same Index variable defined on
line 1218 like so:
UINTN Index;
The only way I can guess that this has ever worked is that because of the last
for loop Index is set back to 0. Also, most people are not using Apriori for
SMM drivers at this time. Since this is the case, when it loops back around,
it hits the if statement checking if this FV was already processed, if so, it
continues to the next one. The same process would complete for any subsequent
FVs as well.
A proposed fix would be to use an alternate Index variable for each of the
other two for loops. Since these are both only used locally they could be
defined locally like:
for (UINTN SmmTypeIndex = 0; SmmTypeIndex < sizeof (mSmmFileTypes)/sizeof
(EFI_FV_FILETYPE); SmmTypeIndex ++) {
and
for (UINTN AprioriIndex = 0; AprioriIndex < AprioriEntryCount; AprioriIndex ++)
{
Another minor improvement would be to give the overall Index some better name
than just Index for the main loop too.
Best Regards,
Zach
The information contained in this message may be confidential and proprietary
to American Megatrends, Inc. This communication is intended to be read only by
the individual or entity to whom it is addressed or by their designee. If the
reader of this message is not the intended recipient, you are on notice that
any distribution of this message, in any form, is strictly prohibited. Please
promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and
then delete or destroy all copies of the transmission.
------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel