summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortedu <>2014-01-22 21:06:45 +0000
committertedu <>2014-01-22 21:06:45 +0000
commit4fa31e96a25424fef44451ad022218b3233f54f3 (patch)
tree720c5274efe0595e27c584f2d90331efa736ad03
parenta263ce82893e1ce0d825e878afa7914f21507549 (diff)
downloadopenbsd-4fa31e96a25424fef44451ad022218b3233f54f3.tar.gz
openbsd-4fa31e96a25424fef44451ad022218b3233f54f3.tar.bz2
openbsd-4fa31e96a25424fef44451ad022218b3233f54f3.zip
add explicit_bzero to libc. implementation subject to change, but start
the ball rolling. ok deraadt.
-rw-r--r--src/lib/libc/string/Makefile.inc5
-rw-r--r--src/lib/libc/string/bzero.316
-rw-r--r--src/lib/libc/string/explicit_bzero.c20
3 files changed, 37 insertions, 4 deletions
diff --git a/src/lib/libc/string/Makefile.inc b/src/lib/libc/string/Makefile.inc
index 9d6d1b2368..1cbb54b3b5 100644
--- a/src/lib/libc/string/Makefile.inc
+++ b/src/lib/libc/string/Makefile.inc
@@ -1,9 +1,9 @@
1# $OpenBSD: Makefile.inc,v 1.32 2013/12/19 20:52:37 millert Exp $ 1# $OpenBSD: Makefile.inc,v 1.33 2014/01/22 21:06:45 tedu Exp $
2 2
3# string sources 3# string sources
4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string 4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string
5 5
6SRCS+= bm.c memccpy.c memmem.c memrchr.c stpcpy.c stpncpy.c \ 6SRCS+= bm.c explicit_bzero.c memccpy.c memmem.c memrchr.c stpcpy.c stpncpy.c \
7 strcasecmp.c strcasestr.c strcoll.c strdup.c \ 7 strcasecmp.c strcasestr.c strcoll.c strdup.c \
8 strerror.c strerror_r.c strlcat.c strmode.c strndup.c strnlen.c \ 8 strerror.c strerror_r.c strlcat.c strmode.c strndup.c strnlen.c \
9 strsignal.c strtok.c strxfrm.c \ 9 strsignal.c strtok.c strxfrm.c \
@@ -155,6 +155,7 @@ MAN+= bm.3 bcmp.3 bcopy.3 bstring.3 bzero.3 ffs.3 memccpy.3 memchr.3 \
155 wmemset.3 155 wmemset.3
156 156
157MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 157MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3
158MLINKS+=bzero.3 explicit_bzero.3
158MLINKS+=memchr.3 memrchr.3 159MLINKS+=memchr.3 memrchr.3
159MLINKS+=stpcpy.3 stpncpy.3 160MLINKS+=stpcpy.3 stpncpy.3
160MLINKS+=strchr.3 index.3 161MLINKS+=strchr.3 index.3
diff --git a/src/lib/libc/string/bzero.3 b/src/lib/libc/string/bzero.3
index 1fd5da81b5..8476eb863e 100644
--- a/src/lib/libc/string/bzero.3
+++ b/src/lib/libc/string/bzero.3
@@ -27,9 +27,9 @@
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE. 28.\" SUCH DAMAGE.
29.\" 29.\"
30.\" $OpenBSD: bzero.3,v 1.9 2013/06/05 03:39:23 tedu Exp $ 30.\" $OpenBSD: bzero.3,v 1.10 2014/01/22 21:06:45 tedu Exp $
31.\" 31.\"
32.Dd $Mdocdate: June 5 2013 $ 32.Dd $Mdocdate: January 22 2014 $
33.Dt BZERO 3 33.Dt BZERO 3
34.Os 34.Os
35.Sh NAME 35.Sh NAME
@@ -39,6 +39,8 @@
39.In string.h 39.In string.h
40.Ft void 40.Ft void
41.Fn bzero "void *b" "size_t len" 41.Fn bzero "void *b" "size_t len"
42.Ft void
43.Fn explicit_bzero "void *b" "size_t len"
42.Sh DESCRIPTION 44.Sh DESCRIPTION
43The 45The
44.Fn bzero 46.Fn bzero
@@ -51,6 +53,12 @@ If
51is zero, 53is zero,
52.Fn bzero 54.Fn bzero
53does nothing. 55does nothing.
56.Pp
57The
58.Fn explicit_bzero
59variant behaves the same, but will not be removed by a compiler's dead store
60optimization pass, making it useful for clearing sensitive memory such as a
61password.
54.Sh SEE ALSO 62.Sh SEE ALSO
55.Xr memset 3 , 63.Xr memset 3 ,
56.Xr swab 3 64.Xr swab 3
@@ -59,3 +67,7 @@ The
59.Fn bzero 67.Fn bzero
60function first appeared in 68function first appeared in
61.Bx 4.2 . 69.Bx 4.2 .
70The
71.Fn explicit_bzero
72function first appeared in
73.Ox 5.5 .
diff --git a/src/lib/libc/string/explicit_bzero.c b/src/lib/libc/string/explicit_bzero.c
new file mode 100644
index 0000000000..fd2948ca44
--- /dev/null
+++ b/src/lib/libc/string/explicit_bzero.c
@@ -0,0 +1,20 @@
1/* $OpenBSD: explicit_bzero.c,v 1.1 2014/01/22 21:06:45 tedu Exp $ */
2/*
3 * Public domain.
4 * Written by Ted Unangst
5 */
6
7#if !defined(_KERNEL) && !defined(_STANDALONE)
8#include <string.h>
9#else
10#include <lib/libkern/libkern.h>
11#endif
12
13/*
14 * explicit_bzero - don't let the compiler optimize away bzero
15 */
16void
17explicit_bzero(void *p, size_t n)
18{
19 bzero(p, n);
20}