diff options
author | tedu <> | 2014-01-22 21:06:45 +0000 |
---|---|---|
committer | tedu <> | 2014-01-22 21:06:45 +0000 |
commit | 4fa31e96a25424fef44451ad022218b3233f54f3 (patch) | |
tree | 720c5274efe0595e27c584f2d90331efa736ad03 | |
parent | a263ce82893e1ce0d825e878afa7914f21507549 (diff) | |
download | openbsd-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.inc | 5 | ||||
-rw-r--r-- | src/lib/libc/string/bzero.3 | 16 | ||||
-rw-r--r-- | src/lib/libc/string/explicit_bzero.c | 20 |
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 | ||
6 | SRCS+= bm.c memccpy.c memmem.c memrchr.c stpcpy.c stpncpy.c \ | 6 | SRCS+= 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 | ||
157 | MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 | 157 | MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 |
158 | MLINKS+=bzero.3 explicit_bzero.3 | ||
158 | MLINKS+=memchr.3 memrchr.3 | 159 | MLINKS+=memchr.3 memrchr.3 |
159 | MLINKS+=stpcpy.3 stpncpy.3 | 160 | MLINKS+=stpcpy.3 stpncpy.3 |
160 | MLINKS+=strchr.3 index.3 | 161 | MLINKS+=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 |
43 | The | 45 | The |
44 | .Fn bzero | 46 | .Fn bzero |
@@ -51,6 +53,12 @@ If | |||
51 | is zero, | 53 | is zero, |
52 | .Fn bzero | 54 | .Fn bzero |
53 | does nothing. | 55 | does nothing. |
56 | .Pp | ||
57 | The | ||
58 | .Fn explicit_bzero | ||
59 | variant behaves the same, but will not be removed by a compiler's dead store | ||
60 | optimization pass, making it useful for clearing sensitive memory such as a | ||
61 | password. | ||
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 |
60 | function first appeared in | 68 | function first appeared in |
61 | .Bx 4.2 . | 69 | .Bx 4.2 . |
70 | The | ||
71 | .Fn explicit_bzero | ||
72 | function 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 | */ | ||
16 | void | ||
17 | explicit_bzero(void *p, size_t n) | ||
18 | { | ||
19 | bzero(p, n); | ||
20 | } | ||