To support unregister SMI handler inside SMI handler itself, get next node before SMI handler is executed, since LIST_ENTRY that Link points to may be freed if unregister SMI handler in SMI handler itself.
Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Jiaxin Wu <jiaxin...@intel.com> Reviewed-by: Ray Ni <ray...@intel.com> Reviewed-by: Laszlo Ersek <ler...@redhat.com> Signed-off-by: Zhiguang Liu <zhiguang....@intel.com> --- MdeModulePkg/Core/PiSmmCore/Smi.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Core/PiSmmCore/Smi.c b/MdeModulePkg/Core/PiSmmCore/Smi.c index 2985f989c3..3489c130fd 100644 --- a/MdeModulePkg/Core/PiSmmCore/Smi.c +++ b/MdeModulePkg/Core/PiSmmCore/Smi.c @@ -134,8 +134,14 @@ SmiManage ( Head = &SmiEntry->SmiHandlers; - for (Link = Head->ForwardLink; Link != Head; Link = Link->ForwardLink) { + for (Link = Head->ForwardLink; Link != Head;) { SmiHandler = CR (Link, SMI_HANDLER, Link, SMI_HANDLER_SIGNATURE); + // + // To support unregister SMI handler inside SMI handler itself, + // get next node before handler is executed, since LIST_ENTRY that + // Link points to may be freed if unregister SMI handler. + // + Link = Link->ForwardLink; Status = SmiHandler->Handler ( (EFI_HANDLE)SmiHandler, -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116203): https://edk2.groups.io/g/devel/message/116203 Mute This Topic: https://groups.io/mt/104657665/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-