Tested-by/Reviewed-by: Jian J Wang <jian.j.w...@intel.com> > -----Original Message----- > From: Ni, Ruiyu > Sent: Thursday, January 25, 2018 5:45 PM > To: edk2-devel@lists.01.org > Cc: Wang, Jian J <jian.j.w...@intel.com> > Subject: [PATCH] MdeModulePkg/Partition: Fix media probe > > The call in ProbeMediaStatusEx() to the ReadDisk() function of the > EFI_DISK_IO_PROTOCOL interface implemented in DiskIoDxe/DiskIo.c > crashed in DiskIo2ReadWriteDisk() because of the NULL value of > the destination buffer pointer. > > Pass the address of a buffer in the stack instead of a NULL > pointer. > > The similar fix was applied to ProbeMediaStatus in commit > df473cc1fc9acd1a623ec7e05276f2f0635c19d2 > * MdeModulePkg/PartitionDxe: Fix media probe > > Somehow ProbeMediaStatusEx() wasn't changed together. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> > Cc: Jian J Wang <jian.j.w...@intel.com> > --- > MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > index bb9d0b70ce..46c0877cee 100644 > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > @@ -4,7 +4,7 @@ > of the raw block devices media. Currently "El Torito CD-ROM", UDF, Legacy > MBR, and GPT partition schemes are supported. > > -Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found > at > @@ -777,11 +777,15 @@ ProbeMediaStatusEx ( > ) > { > EFI_STATUS Status; > + UINT8 Buffer[1]; > > // > - // Read 1 byte from offset 0 but passing NULL as buffer pointer > + // Read 1 byte from offset 0 to check if the MediaId is still valid. > + // The reading operation is synchronious thus it is not worth it to > + // allocate a buffer from the pool. The destination buffer for the > + // data is in the stack. > // > - Status = DiskIo2->ReadDiskEx (DiskIo2, MediaId, 0, NULL, 1, NULL); > + Status = DiskIo2->ReadDiskEx (DiskIo2, MediaId, 0, NULL, 1, (VOID*)Buffer); > if ((Status == EFI_NO_MEDIA) || (Status == EFI_MEDIA_CHANGED)) { > return Status; > } > -- > 2.15.1.windows.2
_______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel