From caf8d692ed98f557d9f5641bffaf383c8401711a Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Fri, 4 Aug 2023 20:41:46 +0800 Subject: [PATCH] hibernate-resume-generator: escape device path passed to hibernate-resume Follow-up for #27330 Fixes #28668 --- src/hibernate-resume/hibernate-resume-generator.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hibernate-resume/hibernate-resume-generator.c b/src/hibernate-resume/hibernate-resume-generator.c index 68916628edb..fcd28892387 100644 --- a/src/hibernate-resume/hibernate-resume-generator.c +++ b/src/hibernate-resume/hibernate-resume-generator.c @@ -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); -- 2.47.3