summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoredk2-devel-bounces@lists.01.org <edk2-devel-bounces@lists.01.org>2018-09-14 16:24:15 +0800
committerJiaxin Wu <Jiaxin.wu@intel.com>2018-09-17 14:32:35 +0800
commitcde5a72d365eff5b02b8330fef1c8d36fced08eb (patch)
tree866d1e99cf6d2144f592079d3ab3b322946e512c
parent16d8465756ad29a17a082108dae55d254b91bf2c (diff)
downloadedk2-cde5a72d365eff5b02b8330fef1c8d36fced08eb.zip
edk2-cde5a72d365eff5b02b8330fef1c8d36fced08eb.tar.gz
edk2-cde5a72d365eff5b02b8330fef1c8d36fced08eb.tar.bz2
NetworkPkg: UefiPxeBcDxe: Add EXCLUSIVE attribute when opening SNP protocol installed by PXE.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1152 v2: Sync the same logic to Ipv6 and update code comments. The PXE driver installs a SNP and open this SNP with attribute BY_DRIVER to avoid it being opened by MNP driver, this SNP is also expected not to be opened by other drivers with EXCLUSIVE attribute. In some cases, other drivers may happen to do this by error, and thus cause a system crash. This patch adds EXCLUSIVE attribute when opening SNP in PXE driver, and will reject all OpenProtocol requests by EXCLUSIVE. Cc: Subramanian, Sriram <sriram-s@hpe.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Wang Fan <fan.wang@intel.com> Reviewed-by: Sriram Subramanian <sriram-s@hpe.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
-rw-r--r--NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
index bc9dc91..0ab640b 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
@@ -814,7 +814,7 @@ PxeBcCreateIp4Children (
}
//
- // Open SNP on the child handle BY_DRIVER. It will prevent any additionally
+ // Open SNP on the child handle BY_DRIVER|EXCLUSIVE. It will prevent any additionally
// layering to perform the experiment.
//
Status = gBS->OpenProtocol (
@@ -823,7 +823,7 @@ PxeBcCreateIp4Children (
(VOID **) &Snp,
This->DriverBindingHandle,
Private->Ip4Nic->Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
+ EFI_OPEN_PROTOCOL_BY_DRIVER|EFI_OPEN_PROTOCOL_EXCLUSIVE
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
@@ -1157,7 +1157,7 @@ PxeBcCreateIp6Children (
}
//
- // Open SNP on the child handle BY_DRIVER. It will prevent any additionally
+ // Open SNP on the child handle BY_DRIVER|EXCLUSIVE. It will prevent any additionally
// layering to perform the experiment.
//
Status = gBS->OpenProtocol (
@@ -1166,7 +1166,7 @@ PxeBcCreateIp6Children (
(VOID **) &Snp,
This->DriverBindingHandle,
Private->Ip6Nic->Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
+ EFI_OPEN_PROTOCOL_BY_DRIVER|EFI_OPEN_PROTOCOL_EXCLUSIVE
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;