]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hibernate-resume-generator: escape device path passed to hibernate-resume 28673/head
authorMike Yuan <me@yhndnzj.com>
Fri, 4 Aug 2023 12:41:46 +0000 (20:41 +0800)
committerMike Yuan <me@yhndnzj.com>
Fri, 4 Aug 2023 13:04:45 +0000 (21:04 +0800)
Follow-up for #27330

Fixes #28668

src/hibernate-resume/hibernate-resume-generator.c

index 68916628edb31edb31e7c98893e24b4800033319..fcd288923872b021d9264ae608ec6c0cdc31c1b4 100644 (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);