roken: Add memset_s implementation
Add an implementation of memset_s to roken. Some optimising compilers may remove the memset() instruction when it is used immediately before a free, which defeats its purpose if the intention is to zero memory before returning it to the heap or stack. C11 added memset_s, provide a fallback in roken so that memset_s can be used on all platforms.
This commit is contained in:
@@ -351,6 +351,7 @@ AC_BROKEN([ \
|
||||
localtime_r \
|
||||
lstat \
|
||||
memmove \
|
||||
memset_s \
|
||||
mkstemp \
|
||||
putenv \
|
||||
rcmd \
|
||||
|
@@ -69,6 +69,7 @@ libroken_la_OBJS = \
|
||||
$(OBJ)\issuid.obj \
|
||||
$(OBJ)\localtime_r.obj \
|
||||
$(OBJ)\lstat.obj \
|
||||
$(OBJ)\memset_s.obj \
|
||||
$(OBJ)\mkdir.obj \
|
||||
$(OBJ)\mini_inetd.obj \
|
||||
$(OBJ)\mkstemp.obj \
|
||||
|
51
lib/roken/memset_s.c
Normal file
51
lib/roken/memset_s.c
Normal file
@@ -0,0 +1,51 @@
|
||||
/***********************************************************************
|
||||
* Copyright (c) 2015, Your File System Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 <config.h>
|
||||
#include "roken.h"
|
||||
|
||||
int ROKEN_LIB_FUNCTION
|
||||
memset_s(void *s, size_t smax, int c, size_t n)
|
||||
{
|
||||
volatile unsigned char *p = s;
|
||||
|
||||
#ifdef _WIN32
|
||||
if (c == 0) {
|
||||
SecureZeroMemory(s, n);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (n--)
|
||||
*p++ = c;
|
||||
|
||||
return 0;
|
||||
}
|
@@ -697,6 +697,7 @@ ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_rename(const char *, const char *);
|
||||
#define rk_mkdir(__rk_rn_name, __rk_rn_mode) mkdir(__rk_rn_name,__rk_rn_mode)
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(HAVE_DAEMON) || defined(NEED_DAEMON_PROTO)
|
||||
#ifndef HAVE_DAEMON
|
||||
#define daemon rk_daemon
|
||||
@@ -1176,6 +1177,12 @@ void
|
||||
rk_qsort(void *, size_t, size_t, int (*)(const void *, const void *));
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MEMSET_S
|
||||
#define memset_s rk_memset_s
|
||||
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL memset_s(void *s, size_t smax,
|
||||
int c, size_t n);
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_ARC4RANDOM)
|
||||
#define rk_random() arc4random()
|
||||
#elif defined(HAVE_RANDOM)
|
||||
|
@@ -80,6 +80,7 @@ HEIMDAL_ROKEN_1.0 {
|
||||
rk_inet_ntop;
|
||||
rk_inet_pton;
|
||||
rk_localtime_r;
|
||||
rk_memset_s;
|
||||
rk_mkdir;
|
||||
rk_mkstemp;
|
||||
rk_pid_file_delete;
|
||||
|
Reference in New Issue
Block a user