From: Mike Yuan Date: Fri, 4 Aug 2023 12:41:46 +0000 (+0800) Subject: hibernate-resume-generator: escape device path passed to hibernate-resume X-Git-Tag: v255-rc1~821^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F28673%2Fhead;p=thirdparty%2Fsystemd.git hibernate-resume-generator: escape device path passed to hibernate-resume Follow-up for #27330 Fixes #28668 --- 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);