diff options
Diffstat (limited to 'src/lib/libc/string')
| -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 | } | ||
