]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
portable: use parse_env_file_fd to keep FD valid
authorLuca Boccassi <bluca@debian.org>
Thu, 23 Mar 2023 01:02:47 +0000 (01:02 +0000)
committerLuca Boccassi <bluca@debian.org>
Tue, 28 Mar 2023 09:36:01 +0000 (10:36 +0100)
take_fdopen_unlocked invalidates the FD in the PortableMetadata object,
so it cannot be used later. Use parse_env_file_fd instead which is non
destructive.

src/portable/portable.c

index 770cac9e1f6fda0d626cc29f95997513c2ab07a0..2b06e61f75f86ace89e73790db7524e7881a5b22 100644 (file)
@@ -566,18 +566,13 @@ static int extract_image_and_extensions(
          * extension-release metadata match, otherwise reject it immediately as invalid, or it will fail when
          * the units are started. Also, collect valid portable prefixes if caller requested that. */
         if (validate_sysext || ret_valid_prefixes) {
-                _cleanup_fclose_ FILE *f = NULL;
                 _cleanup_free_ char *prefixes = NULL;
 
-                r = take_fdopen_unlocked(&os_release->fd, "r", &f);
-                if (r < 0)
-                        return r;
-
-                r = parse_env_file(f, os_release->name,
-                                   "ID", &id,
-                                   "VERSION_ID", &version_id,
-                                   "SYSEXT_LEVEL", &sysext_level,
-                                   "PORTABLE_PREFIXES", &prefixes);
+                r = parse_env_file_fd(os_release->fd, os_release->name,
+                                     "ID", &id,
+                                     "VERSION_ID", &version_id,
+                                     "SYSEXT_LEVEL", &sysext_level,
+                                     "PORTABLE_PREFIXES", &prefixes);
                 if (r < 0)
                         return r;
                 if (isempty(id))