hostnamed: after unescaping fancy name, validate it's valid UTF-8
The fancy name could contain arbitrary bytes, in escaped fashion. Before using it, let's validate that this contains only valid UTF-8. (Note that D-Bus might kick us off the bus if we don't ensure everything we send around is UTF-8). (While we are at it, do the same in PID 1, even though it's not that important there) Addresses this issue found by @YHNdnzj: https://github.com/systemd/systemd/pull/40367#discussion_r2714614301 Follow-up for: #40367
This commit is contained in:
committed by
Mike Yuan
parent
236033fd48
commit
fa41ce1142
@@ -1422,6 +1422,9 @@ static int os_release_status(void) {
|
||||
if (l < 0) {
|
||||
log_debug_errno(l, "Failed to unescape FANCY_NAME=, ignoring: %m");
|
||||
fancy_name = mfree(fancy_name);
|
||||
} else if (!utf8_is_valid(fancy_name)) {
|
||||
log_debug("Unescaped FANCY_NAME= contains invalid UTF-8, ignoring.");
|
||||
fancy_name = mfree(fancy_name);
|
||||
} else {
|
||||
free_and_replace(fancy_name, unescaped);
|
||||
|
||||
|
||||
@@ -238,6 +238,9 @@ static void context_read_os_release(Context *c) {
|
||||
if (l < 0) {
|
||||
log_warning_errno(l, "Failed to unescape fancy OS name, ignoring: %m");
|
||||
os_fancy_name = mfree(os_fancy_name);
|
||||
} else if (!utf8_is_valid(unescaped)) {
|
||||
log_warning("Unescaped fancy OS name contains invalid UTF-8, ignoring.");
|
||||
os_fancy_name = mfree(os_fancy_name);
|
||||
} else
|
||||
free_and_replace(os_fancy_name, unescaped);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user