mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 08:04:07 +02:00
NetworkPkg: Stop the timer before clean IP service.
In Ip6CleanService()it first cleaned some resources, then stop the timer . While before the timer stopped it may try to access some already freed data, which may generate an exception. This patch updates the driver to stop the timer event before starting to clean up the service data. Cc: Wu Jiaxin <jiaxin.wu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Subramanian Sriram <sriram-s@hpe.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Samer El-Haj-Mahmoud <elhaj@hpe.com> Reviewed-by: Sriram Subramanian <sriram-s@hpe.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
This commit is contained in:
parent
524813f3ab
commit
5c944a654a
@ -149,6 +149,22 @@ Ip6CleanService (
|
|||||||
EFI_IPv6_ADDRESS AllNodes;
|
EFI_IPv6_ADDRESS AllNodes;
|
||||||
IP6_NEIGHBOR_ENTRY *NeighborCache;
|
IP6_NEIGHBOR_ENTRY *NeighborCache;
|
||||||
|
|
||||||
|
IpSb->State = IP6_SERVICE_DESTROY;
|
||||||
|
|
||||||
|
if (IpSb->Timer != NULL) {
|
||||||
|
gBS->SetTimer (IpSb->Timer, TimerCancel, 0);
|
||||||
|
gBS->CloseEvent (IpSb->Timer);
|
||||||
|
|
||||||
|
IpSb->Timer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IpSb->FasterTimer != NULL) {
|
||||||
|
gBS->SetTimer (IpSb->FasterTimer, TimerCancel, 0);
|
||||||
|
gBS->CloseEvent (IpSb->FasterTimer);
|
||||||
|
|
||||||
|
IpSb->FasterTimer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Ip6ConfigCleanInstance (&IpSb->Ip6ConfigInstance);
|
Ip6ConfigCleanInstance (&IpSb->Ip6ConfigInstance);
|
||||||
|
|
||||||
if (!IpSb->LinkLocalDadFail) {
|
if (!IpSb->LinkLocalDadFail) {
|
||||||
@ -214,19 +230,6 @@ Ip6CleanService (
|
|||||||
gBS->CloseEvent (IpSb->RecvRequest.MnpToken.Event);
|
gBS->CloseEvent (IpSb->RecvRequest.MnpToken.Event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IpSb->Timer != NULL) {
|
|
||||||
gBS->SetTimer (IpSb->Timer, TimerCancel, 0);
|
|
||||||
gBS->CloseEvent (IpSb->Timer);
|
|
||||||
|
|
||||||
IpSb->Timer = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IpSb->FasterTimer != NULL) {
|
|
||||||
gBS->SetTimer (IpSb->FasterTimer, TimerCancel, 0);
|
|
||||||
gBS->CloseEvent (IpSb->FasterTimer);
|
|
||||||
|
|
||||||
IpSb->FasterTimer = NULL;
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
// Free the Neighbor Discovery resources
|
// Free the Neighbor Discovery resources
|
||||||
//
|
//
|
||||||
@ -759,8 +762,6 @@ Ip6DriverBindingStop (
|
|||||||
);
|
);
|
||||||
} else if (IsListEmpty (&IpSb->Children)) {
|
} else if (IsListEmpty (&IpSb->Children)) {
|
||||||
State = IpSb->State;
|
State = IpSb->State;
|
||||||
IpSb->State = IP6_SERVICE_DESTROY;
|
|
||||||
|
|
||||||
Status = Ip6CleanService (IpSb);
|
Status = Ip6CleanService (IpSb);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
IpSb->State = State;
|
IpSb->State = State;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user