diff options
| author | Gary Lin <glin@suse.com> | 2016-10-17 13:47:17 +0800 |
|---|---|---|
| committer | Peter Jones <pjones@redhat.com> | 2016-11-30 12:57:34 -0500 |
| commit | 7ab40ee92c0066cc8777a4d72078a61b1b9fe6a6 (patch) | |
| tree | a19da08b0ea484c10075e11722815dd1fd85694b | |
| parent | 7bfcd70801fa86e4b7f96c7e8e5b37e0059b22f6 (diff) | |
| download | efi-boot-shim-7ab40ee92c0066cc8777a4d72078a61b1b9fe6a6.tar.gz efi-boot-shim-7ab40ee92c0066cc8777a4d72078a61b1b9fe6a6.zip | |
Cryptlib: Implement memset() to avoid the potential crash
Although the prototype of memset() is already defined in OpenSslSupport.h,
the function was never implemented. It was fine since a macro was
designed to replace all memset() with SetMem() after including
OpenSslSupport.h. However, since openssl 1.0.2j, a new function pointer
in crypto/mem_clr.c requires the "real" memset() or the program would
crash due to the NULL function pointer access. This commit implements
memset() (just a wrapper of SetMem()) to avoid the potential crash.
Signed-off-by: Gary Lin <glin@suse.com>
| -rw-r--r-- | Cryptlib/Makefile | 3 | ||||
| -rw-r--r-- | Cryptlib/SysCall/memset.c | 40 |
2 files changed, 42 insertions, 1 deletions
diff --git a/Cryptlib/Makefile b/Cryptlib/Makefile index a028979e..3a0469db 100644 --- a/Cryptlib/Makefile +++ b/Cryptlib/Makefile @@ -43,7 +43,8 @@ OBJS = Hash/CryptMd4.o \ SysCall/CrtWrapper.o \ SysCall/TimerWrapper.o \ SysCall/BaseMemAllocation.o \ - SysCall/BaseStrings.o + SysCall/BaseStrings.o \ + SysCall/memset.o all: $(TARGET) diff --git a/Cryptlib/SysCall/memset.c b/Cryptlib/SysCall/memset.c new file mode 100644 index 00000000..76deed68 --- /dev/null +++ b/Cryptlib/SysCall/memset.c @@ -0,0 +1,40 @@ +/* + * Copyright 2016 SUSE LINUX GmbH <glin@suse.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <efi.h> +#include <efilib.h> + +typedef UINTN size_t; + +void * +memset (void *dest, int ch, size_t count) +{ + SetMem(dest, count, (UINT8)(ch)); + return dest; +} |
