]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hibernate-resume: refuse resume if resume_offset= is set but not resume=
authorMike Yuan <me@yhndnzj.com>
Sat, 8 Jul 2023 22:10:18 +0000 (06:10 +0800)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 9 Jul 2023 11:13:16 +0000 (12:13 +0100)
src/hibernate-resume/hibernate-resume-generator.c

index 5ace8543f0287b4a33bc6a2a3ae45cad53575e99..32b65a59132cfb4ed2f14c01ac27c99382d47223 100644 (file)
@@ -32,6 +32,7 @@ static char *arg_resume_options = NULL;
 static char *arg_root_options = NULL;
 static bool arg_noresume = false;
 static uint64_t arg_resume_offset = 0;
+static bool arg_resume_offset_set = false;
 
 STATIC_DESTRUCTOR_REGISTER(arg_resume_device, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_resume_options, freep);
@@ -73,6 +74,8 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (r < 0)
                         return log_error_errno(r, "Failed to parse resume_offset=%s: %m", value);
 
+                arg_resume_offset_set = true;
+
         } else if (proc_cmdline_key_streq(key, "resumeflags")) {
 
                 if (proc_cmdline_value_missing(key, value))
@@ -263,6 +266,11 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
                 return 0;
         }
 
+        if (!arg_resume_device && arg_resume_offset_set)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Found resume_offset=%" PRIu64 " but resume= is unset, refusing.",
+                                       arg_resume_offset);
+
         r = parse_efi_hibernate_location();
         if (r == -ENOMEM)
                 return r;