[edk2-devel] 回复: [PATCH] MdeModulePkg/RegularExpressionDxe: Fix memory assert in FreePool()
gaoliming
gaoliming at byosoft.com.cn
Fri Jun 11 02:24:46 UTC 2021
Reviewed-by: Liming Gao <gaoliming at byosoft.com.cn>
> -----邮件原件-----
> 发件人: Nickle Wang <nickle.wang at hpe.com>
> 发送时间: 2021年6月10日 12:57
> 收件人: devel at edk2.groups.io
> 抄送: gaoliming at byosoft.com.cn; jian.j.wang at intel.com;
> hao.a.wu at intel.com; Nickle Wang <nickle.wang at hpe.com>
> 主题: [PATCH] MdeModulePkg/RegularExpressionDxe: Fix memory assert in
> FreePool()
>
> Memory buffer that is allocated by malloc() and realloc() will be
> shifted by 8 bytes because Oniguruma keeps its memory signature. This 8
> bytes shift is not handled while calling free() to release memory. Add
> free() function to check Oniguruma signature before release memory
> because memory buffer is not touched when using calloc().
>
> Signed-off-by: Nickle Wang <nickle.wang at hpe.com>
> ---
> .../RegularExpressionDxe/OnigurumaUefiPort.c | 19
> ++++++++++++++++++-
> .../RegularExpressionDxe/OnigurumaUefiPort.h | 14 ++------------
> 2 files changed, 20 insertions(+), 13 deletions(-)
>
> diff --git
> a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
> b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
> index 9aa7b0a68e..5c34324db8 100644
> --- a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
> +++ b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
> @@ -2,7 +2,7 @@
>
>
> Module to rewrite stdlib references within Oniguruma
>
>
>
> - (C) Copyright 2014-2015 Hewlett Packard Enterprise Development LP<BR>
>
> + (C) Copyright 2014-2021 Hewlett Packard Enterprise Development
> LP<BR>
>
> Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
>
>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -96,3 +96,20 @@ void* memset (void *dest, char ch, unsigned int count)
> return SetMem (dest, count, ch);
>
> }
>
>
>
> +void free(void *ptr)
>
> +{
>
> + VOID *EvalOnce;
>
> + ONIGMEM_HEAD *PoolHdr;
>
> +
>
> + EvalOnce = ptr;
>
> + if (EvalOnce == NULL) {
>
> + return;
>
> + }
>
> +
>
> + PoolHdr = (ONIGMEM_HEAD *)EvalOnce - 1;
>
> + if (PoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE) {
>
> + FreePool (PoolHdr);
>
> + } else {
>
> + FreePool (EvalOnce);
>
> + }
>
> +}
>
> diff --git
> a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h
> b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h
> index 20b75c3361..0bdb7be529 100644
> --- a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h
> +++
> b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.h
> @@ -2,7 +2,7 @@
>
>
> Module to rewrite stdlib references within Oniguruma
>
>
>
> - (C) Copyright 2014-2015 Hewlett Packard Enterprise Development LP<BR>
>
> + (C) Copyright 2014-2021 Hewlett Packard Enterprise Development
> LP<BR>
>
> Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
>
>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -46,17 +46,6 @@ typedef INTN intptr_t;
> #endif
>
>
>
> #define calloc(n,s) AllocateZeroPool((n)*(s))
>
> -
>
> -#define free(p) \
>
> - do { \
>
> - VOID *EvalOnce; \
>
> - \
>
> - EvalOnce = (p); \
>
> - if (EvalOnce != NULL) { \
>
> - FreePool (EvalOnce); \
>
> - } \
>
> - } while (FALSE)
>
> -
>
> #define xmemmove(Dest,Src,Length) CopyMem(Dest,Src,Length)
>
> #define xmemcpy(Dest,Src,Length) CopyMem(Dest,Src,Length)
>
> #define xmemset(Buffer,Value,Length) SetMem(Buffer,Length,Value)
>
> @@ -98,6 +87,7 @@ void* malloc(size_t size);
> void* realloc(void *ptr, size_t size);
>
> void* memcpy (void *dest, const void *src, unsigned int count);
>
> void* memset (void *dest, char ch, unsigned int count);
>
> +void free(void *ptr);
>
>
>
> #define exit(n) ASSERT(FALSE);
>
>
>
> --
> 2.31.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76358): https://edk2.groups.io/g/devel/message/76358
Mute This Topic: https://groups.io/mt/83460434/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list