Skip to content

Commit d3468b2

Browse files
committed
Auto merge of #2156 - niluxv:add_explicit_memset_functions, r=JohnTitor
Add explicit/volatile memset/memzero functions Adds the following functions to platforms that support them: * `explicit_bzero` (de facto standard): Glibc, MUSL, FreeBSD, DragonFly BSD, OpenBSD * `explicit_memset`: NetBSD * `memset_s` (C11 standard): FreeBSD, DragonFly BSD, Apple OSX These functions are useful for zeroing secret memory. Closes #2009
2 parents a0dcb2d + ea18049 commit d3468b2

File tree

13 files changed

+31
-0
lines changed

13 files changed

+31
-0
lines changed

libc-test/semver/apple.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,7 @@ mach_timebase_info_data_t
16191619
madvise
16201620
max_align_t
16211621
mcontext_t
1622+
memset_s
16221623
mincore
16231624
mkdirat
16241625
mkstemps

libc-test/semver/dragonfly.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,7 @@ endpwent
11741174
endservent
11751175
endutxent
11761176
exit_status
1177+
explicit_bzero
11771178
faccessat
11781179
fchdir
11791180
fchflags
@@ -1243,6 +1244,7 @@ lwpid_t
12431244
madvise
12441245
memmem
12451246
memrchr
1247+
memset_s
12461248
mincore
12471249
mkdirat
12481250
mkfifoat

libc-test/semver/freebsd.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,7 @@ endgrent
13501350
endpwent
13511351
endservent
13521352
endutxent
1353+
explicit_bzero
13531354
extattr_delete_fd
13541355
extattr_delete_file
13551356
extattr_delete_link
@@ -1442,6 +1443,7 @@ lwpid_t
14421443
madvise
14431444
memmem
14441445
memrchr
1446+
memset_s
14451447
mincore
14461448
mkdirat
14471449
mkfifoat

libc-test/semver/linux-gnu.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ copy_file_range
529529
dlinfo
530530
dlmopen
531531
endutxent
532+
explicit_bzero
532533
fgetspent_r
533534
getgrent_r
534535
getpt

libc-test/semver/linux-musl.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
# TODO: musl.
2+
explicit_bzero

libc-test/semver/netbsd.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,7 @@ endpwent
10341034
endservent
10351035
endutent
10361036
endutxent
1037+
explicit_memset
10371038
extattr_delete_fd
10381039
extattr_delete_file
10391040
extattr_delete_link

libc-test/semver/openbsd.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,7 @@ endgrent
899899
endpwent
900900
endservent
901901
execvpe
902+
explicit_bzero
902903
export_args
903904
faccessat
904905
fchdir

src/unix/bsd/apple/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3877,6 +3877,10 @@ extern "C" {
38773877
dst: *const ::c_char,
38783878
flags: u32,
38793879
) -> ::c_int;
3880+
3881+
// Added in macOS 10.13
3882+
// ISO/IEC 9899:2011 ("ISO C11") K.3.7.4.1
3883+
pub fn memset_s(s: *mut ::c_void, smax: ::size_t, c: ::c_int, n: ::size_t) -> ::c_int;
38803884
}
38813885

38823886
#[link(name = "iconv")]

src/unix/bsd/freebsdlike/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,12 @@ extern "C" {
15911591
outbytesleft: *mut ::size_t,
15921592
) -> ::size_t;
15931593
pub fn iconv_close(cd: iconv_t) -> ::c_int;
1594+
1595+
// Added in `FreeBSD` 11.0
1596+
// Added in `DragonFly BSD` 5.4
1597+
pub fn explicit_bzero(s: *mut ::c_void, len: ::size_t);
1598+
// ISO/IEC 9899:2011 ("ISO C11") K.3.7.4.1
1599+
pub fn memset_s(s: *mut ::c_void, smax: ::size_t, c: ::c_int, n: ::size_t) -> ::c_int;
15941600
}
15951601

15961602
#[link(name = "rt")]

src/unix/bsd/netbsdlike/netbsd/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2083,6 +2083,9 @@ extern "C" {
20832083
outbytesleft: *mut ::size_t,
20842084
) -> ::size_t;
20852085
pub fn iconv_close(cd: iconv_t) -> ::c_int;
2086+
2087+
// Added in `NetBSD` 7.0
2088+
pub fn explicit_memset(b: *mut ::c_void, c: ::c_int, len: ::size_t);
20862089
}
20872090

20882091
#[link(name = "util")]

src/unix/bsd/netbsdlike/openbsd/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,9 @@ extern "C" {
15441544
pub fn freelocale(loc: ::locale_t);
15451545
pub fn newlocale(mask: ::c_int, locale: *const ::c_char, base: ::locale_t) -> ::locale_t;
15461546
pub fn duplocale(base: ::locale_t) -> ::locale_t;
1547+
1548+
// Added in `OpenBSD` 5.5
1549+
pub fn explicit_bzero(s: *mut ::c_void, len: ::size_t);
15471550
}
15481551

15491552
cfg_if! {

src/unix/linux_like/linux/gnu/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,6 +1233,9 @@ extern "C" {
12331233
newpath: *const ::c_char,
12341234
flags: ::c_uint,
12351235
) -> ::c_int;
1236+
1237+
// Added in `glibc` 2.25
1238+
pub fn explicit_bzero(s: *mut ::c_void, len: ::size_t);
12361239
}
12371240

12381241
extern "C" {

src/unix/linux_like/linux/musl/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,9 @@ extern "C" {
697697
path: *const ::c_char,
698698
) -> ::c_int;
699699
pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
700+
701+
// Added in `musl` 1.1.20
702+
pub fn explicit_bzero(s: *mut ::c_void, len: ::size_t);
700703
}
701704

702705
cfg_if! {

0 commit comments

Comments
 (0)