hibernate-resume-generator: escape device path passed to hibernate-resume

Follow-up for #27330

Fixes #28668
This commit is contained in:
Mike Yuan 2023-08-04 20:41:46 +08:00
parent 83d373d213
commit caf8d692ed
No known key found for this signature in database
GPG key ID: 417471C0A40F58B3

View file

@ -11,6 +11,7 @@
#include "device-nodes.h"
#include "dropin.h"
#include "efivars.h"
#include "escape.h"
#include "fd-util.h"
#include "fileio.h"
#include "fstab-util.h"
@ -196,7 +197,7 @@ static int parse_efi_hibernate_location(void) {
}
static int process_resume(void) {
_cleanup_free_ char *device_unit = NULL;
_cleanup_free_ char *device_unit = NULL, *device_escaped = NULL;
_cleanup_fclose_ FILE *f = NULL;
int r;
@ -214,6 +215,10 @@ static int process_resume(void) {
if (r < 0)
log_warning_errno(r, "Failed to write device timeout drop-in, ignoring: %m");
device_escaped = cescape(arg_resume_device);
if (!device_escaped)
return log_oom();
r = generator_open_unit_file(arg_dest, NULL, SPECIAL_HIBERNATE_RESUME_SERVICE, &f);
if (r < 0)
return r;
@ -233,7 +238,7 @@ static int process_resume(void) {
"Type=oneshot\n"
"ExecStart=" LIBEXECDIR "/systemd-hibernate-resume %2$s %3$" PRIu64 "\n",
device_unit,
arg_resume_device,
device_escaped,
arg_resume_offset);
r = fflush_and_check(f);