summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO4
-rw-r--r--src/basic/string-util.c14
-rw-r--r--src/basic/string-util.h6
-rw-r--r--src/basic/strv.c5
-rw-r--r--src/firstboot/firstboot.c3
-rw-r--r--src/journal/journalctl.c2
-rw-r--r--src/reply-password/reply-password.c2
-rw-r--r--src/test/test-string-util.c24
-rw-r--r--src/test/test-strv.c18
9 files changed, 18 insertions, 60 deletions
diff --git a/TODO b/TODO
index edde830038..df5e18bd91 100644
--- a/TODO
+++ b/TODO
@@ -90,8 +90,8 @@ Features:
usefaultd() and make systemd-analyze check for it.
* paranoia: whenever we process passwords, call mlock() on the memory
- first. i.e. look for all places we use string_erase()/string_free_erase() and
- augment them with mlock(). Also use MADV_DONTDUMP
+ first. i.e. look for all places we use free_and_erasep() and
+ augment them with mlock(). Also use MADV_DONTDUMP.
* Move RestrictAddressFamily= to the new cgroup create socket
diff --git a/src/basic/string-util.c b/src/basic/string-util.c
index 779048904a..474903b2a8 100644
--- a/src/basic/string-util.c
+++ b/src/basic/string-util.c
@@ -1032,20 +1032,6 @@ int free_and_strndup(char **p, const char *s, size_t l) {
return 1;
}
-char* string_erase(char *x) {
- if (!x)
- return NULL;
-
- /* A delicious drop of snake-oil! To be called on memory where
- * we stored passphrases or so, after we used them. */
- explicit_bzero_safe(x, strlen(x));
- return x;
-}
-
-char *string_free_erase(char *s) {
- return mfree(string_erase(s));
-}
-
bool string_is_safe(const char *p) {
const char *t;
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index 47b17c9d3e..ef136da49e 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -197,12 +197,6 @@ static inline int free_and_strdup_warn(char **p, const char *s) {
}
int free_and_strndup(char **p, const char *s, size_t l);
-char *string_erase(char *x);
-
-char *string_free_erase(char *s);
-DEFINE_TRIVIAL_CLEANUP_FUNC(char *, string_free_erase);
-#define _cleanup_string_free_erase_ _cleanup_(string_free_erasep)
-
bool string_is_safe(const char *p) _pure_;
static inline size_t strlen_ptr(const char *s) {
diff --git a/src/basic/strv.c b/src/basic/strv.c
index 21c106149b..0a1adbf30b 100644
--- a/src/basic/strv.c
+++ b/src/basic/strv.c
@@ -11,6 +11,7 @@
#include "escape.h"
#include "extract-word.h"
#include "fileio.h"
+#include "memory-util.h"
#include "nulstr-util.h"
#include "sort-util.h"
#include "string-util.h"
@@ -78,9 +79,9 @@ char **strv_free_erase(char **l) {
char **i;
STRV_FOREACH(i, l)
- string_erase(*i);
+ erase_and_freep(i);
- return strv_free(l);
+ return mfree(l);
}
char **strv_copy(char * const *l) {
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index e6b40294bf..e0c834cfc3 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -30,6 +30,7 @@
#include "kbd-util.h"
#include "locale-util.h"
#include "main-func.h"
+#include "memory-util.h"
#include "mkdir.h"
#include "os-util.h"
#include "parse-util.h"
@@ -68,7 +69,7 @@ STATIC_DESTRUCTOR_REGISTER(arg_locale_messages, freep);
STATIC_DESTRUCTOR_REGISTER(arg_keymap, freep);
STATIC_DESTRUCTOR_REGISTER(arg_timezone, freep);
STATIC_DESTRUCTOR_REGISTER(arg_hostname, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_root_password, string_free_erasep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_password, erase_and_freep);
static bool press_any_key(void) {
char k = 0;
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index c25bbc3f26..3e1ca5b1ba 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -753,7 +753,7 @@ static int parse_argv(int argc, char *argv[]) {
r = free_and_strdup(&arg_verify_key, optarg);
if (r < 0)
return r;
- /* Use memset not string_erase so this doesn't look confusing
+ /* Use memset not explicit_bzero() or similar so this doesn't look confusing
* in ps or htop output. */
memset(optarg, 'x', strlen(optarg));
diff --git a/src/reply-password/reply-password.c b/src/reply-password/reply-password.c
index 455788a184..1a8a9a6d62 100644
--- a/src/reply-password/reply-password.c
+++ b/src/reply-password/reply-password.c
@@ -47,7 +47,7 @@ static int run(int argc, char *argv[]) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Wrong number of arguments.");
if (streq(argv[1], "1")) {
- _cleanup_string_free_erase_ char *line = NULL;
+ _cleanup_(erase_and_freep) char *line = NULL;
r = read_line(stdin, LONG_LINE_MAX, &line);
if (r < 0)
diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
index f7dde618d3..d84170bc22 100644
--- a/src/test/test-string-util.c
+++ b/src/test/test-string-util.c
@@ -9,29 +9,6 @@
#include "utf8.h"
#include "util.h"
-static void test_string_erase(void) {
- char *x;
-
- x = strdupa("");
- assert_se(streq(string_erase(x), ""));
-
- x = strdupa("1");
- assert_se(streq(string_erase(x), ""));
-
- x = strdupa("123456789");
- assert_se(streq(string_erase(x), ""));
-
- assert_se(x[1] == '\0');
- assert_se(x[2] == '\0');
- assert_se(x[3] == '\0');
- assert_se(x[4] == '\0');
- assert_se(x[5] == '\0');
- assert_se(x[6] == '\0');
- assert_se(x[7] == '\0');
- assert_se(x[8] == '\0');
- assert_se(x[9] == '\0');
-}
-
static void test_free_and_strndup_one(char **t, const char *src, size_t l, const char *expected, bool change) {
int r;
@@ -582,7 +559,6 @@ static void test_memory_startswith_no_case(void) {
int main(int argc, char *argv[]) {
test_setup_logging(LOG_DEBUG);
- test_string_erase();
test_free_and_strndup();
test_ascii_strcasecmp_n();
test_ascii_strcasecmp_nn();
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 488025f23a..903de18083 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -227,60 +227,60 @@ static void test_invalid_unquote(const char *quoted) {
}
static void test_strv_split(void) {
- _cleanup_strv_free_ char **l = NULL;
+ _cleanup_(strv_free_erasep) char **l = NULL;
const char str[] = "one,two,three";
l = strv_split(str, ",");
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_multiple));
- strv_free(l);
+ strv_free_erase(l);
l = strv_split(" one two\t three", WHITESPACE);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_multiple));
- strv_free(l);
+ strv_free_erase(l);
/* Setting NULL for separator is equivalent to WHITESPACE */
l = strv_split(" one two\t three", NULL);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_multiple));
- strv_free(l);
+ strv_free_erase(l);
l = strv_split_full(" one two\t three", NULL, 0);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_multiple));
- strv_free(l);
+ strv_free_erase(l);
l = strv_split_full(" 'one' \" two\t three \" ' four five'", NULL, SPLIT_QUOTES);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_quoted));
- strv_free(l);
+ strv_free_erase(l);
/* missing last quote ignores the last element. */
l = strv_split_full(" 'one' \" two\t three \" ' four five' ' ignored element ", NULL, SPLIT_QUOTES);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_quoted));
- strv_free(l);
+ strv_free_erase(l);
/* missing last quote, but the last element is _not_ ignored with SPLIT_RELAX. */
l = strv_split_full(" 'one' \" two\t three \" ' four five", NULL, SPLIT_QUOTES | SPLIT_RELAX);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_quoted));
- strv_free(l);
+ strv_free_erase(l);
/* missing separator between */
l = strv_split_full(" 'one' \" two\t three \"' four five'", NULL, SPLIT_QUOTES | SPLIT_RELAX);
assert_se(l);
assert_se(strv_equal(l, (char**) input_table_quoted));
- strv_free(l);
+ strv_free_erase(l);
l = strv_split_full(" 'one' \" two\t three \"' four five", NULL, SPLIT_QUOTES | SPLIT_RELAX);
assert_se(l);