mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/SMM: Support to unregister SMI handler inside SMI handler
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 <gaoliming@byosoft.com.cn> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com> Message-Id: <20240301030133.628-2-zhiguang.liu@intel.com>
This commit is contained in:
parent
dcffad2491
commit
ae1079b386
|
@ -134,8 +134,14 @@ SmiManage (
|
||||||
|
|
||||||
Head = &SmiEntry->SmiHandlers;
|
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);
|
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 (
|
Status = SmiHandler->Handler (
|
||||||
(EFI_HANDLE)SmiHandler,
|
(EFI_HANDLE)SmiHandler,
|
||||||
|
|
Loading…
Reference in New Issue