[yocto] [sumo] [PATCH v2] systemd: fix musl compilation

Sinan Kaya okaya at kernel.org
Wed Apr 10 12:38:28 PDT 2019


musl compilation has been broken since systemd: fix CVE-2018-6954. Fixing this
by placing #ifdef for glob definition.

Signed-off-by: Sinan Kaya <okaya at kernel.org>
---
 .../systemd/0002-Make-tmpfiles-safe.patch     | 88 +++++++++++--------
 1 file changed, 51 insertions(+), 37 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd/0002-Make-tmpfiles-safe.patch b/meta/recipes-core/systemd/systemd/0002-Make-tmpfiles-safe.patch
index 80d27c141b7..bc0a5b123d7 100644
--- a/meta/recipes-core/systemd/systemd/0002-Make-tmpfiles-safe.patch
+++ b/meta/recipes-core/systemd/systemd/0002-Make-tmpfiles-safe.patch
@@ -1,4 +1,4 @@
-From fb95c890cf5116e698347c6a7bb3daeeb2d28cf9 Mon Sep 17 00:00:00 2001
+From 218b6fa682084860f649e79fe32d055bd624523a Mon Sep 17 00:00:00 2001
 From: George McCollister <george.mccollister at gmail.com>
 Date: Thu, 21 Feb 2019 18:04:37 -0600
 Subject: [PATCH] Make tmpfiles safe
@@ -21,6 +21,10 @@ CVE: CVE-2018-6954
 Upstream-Status: Backport
 
 Signed-off-by: George McCollister <george.mccollister at gmail.com>
+[okaya:Fix musl compilation]
+Signed-off-by: Sinan Kaya <okaya at kernel.org>
+
+%% original patch: 0002-Make-tmpfiles-safe.patch
 ---
  src/basic/btrfs-util.c   |  26 +-
  src/basic/btrfs-util.h   |   1 +
@@ -33,18 +37,18 @@ Signed-off-by: George McCollister <george.mccollister at gmail.com>
  src/basic/mkdir.h        |   1 +
  src/basic/path-util.c    |   5 +-
  src/basic/path-util.h    |   4 +
- src/basic/selinux-util.c |  84 +++--
+ src/basic/selinux-util.c |  84 +++-
  src/basic/selinux-util.h |   1 +
- src/basic/smack-util.c   | 119 +++++--
+ src/basic/smack-util.c   | 119 ++++--
  src/basic/smack-util.h   |   1 +
  src/basic/stat-util.c    |  11 +
  src/basic/stat-util.h    |   1 +
  src/test/test-fs-util.c  |  25 ++
- src/tmpfiles/tmpfiles.c  | 902 ++++++++++++++++++++++++++++++++---------------
- 19 files changed, 882 insertions(+), 357 deletions(-)
+ src/tmpfiles/tmpfiles.c  | 904 ++++++++++++++++++++++++++-------------
+ 19 files changed, 884 insertions(+), 357 deletions(-)
 
 diff --git a/src/basic/btrfs-util.c b/src/basic/btrfs-util.c
-index 19d385ab7c..26b088f52b 100644
+index 19d385ab7..26b088f52 100644
 --- a/src/basic/btrfs-util.c
 +++ b/src/basic/btrfs-util.c
 @@ -150,8 +150,25 @@ int btrfs_is_subvol(const char *path) {
@@ -89,7 +93,7 @@ index 19d385ab7c..26b088f52b 100644
  
  int btrfs_subvol_set_read_only_fd(int fd, bool b) {
 diff --git a/src/basic/btrfs-util.h b/src/basic/btrfs-util.h
-index 952b3c26da..e92687bc57 100644
+index 952b3c26d..e92687bc5 100644
 --- a/src/basic/btrfs-util.h
 +++ b/src/basic/btrfs-util.h
 @@ -84,6 +84,7 @@ int btrfs_resize_loopback_fd(int fd, uint64_t size, bool grow_only);
@@ -101,7 +105,7 @@ index 952b3c26da..e92687bc57 100644
  int btrfs_subvol_snapshot_fd(int old_fd, const char *new_path, BtrfsSnapshotFlags flags);
  int btrfs_subvol_snapshot(const char *old_path, const char *new_path, BtrfsSnapshotFlags flags);
 diff --git a/src/basic/fileio.c b/src/basic/fileio.c
-index 26d6174664..1c7e23332f 100644
+index 26d617466..1c7e23332 100644
 --- a/src/basic/fileio.c
 +++ b/src/basic/fileio.c
 @@ -1304,7 +1304,10 @@ int tempfn_random_child(const char *p, const char *extra, char **ret) {
@@ -117,7 +121,7 @@ index 26d6174664..1c7e23332f 100644
          u = random_u64();
          for (i = 0; i < 16; i++) {
 diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
-index a8e50d4c78..c96a8813ea 100644
+index a8e50d4c7..c96a8813e 100644
 --- a/src/basic/fs-util.c
 +++ b/src/basic/fs-util.c
 @@ -465,6 +465,31 @@ int mkfifo_atomic(const char *path, mode_t mode) {
@@ -162,7 +166,7 @@ index a8e50d4c78..c96a8813ea 100644
  
                          _cleanup_free_ char *destination = NULL;
 diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h
-index 9c4b02eccd..121345e74d 100644
+index 9c4b02ecc..121345e74 100644
 --- a/src/basic/fs-util.h
 +++ b/src/basic/fs-util.h
 @@ -80,6 +80,7 @@ int symlink_idempotent(const char *from, const char *to);
@@ -182,7 +186,7 @@ index 9c4b02eccd..121345e74d 100644
  
  int chase_symlinks(const char *path_with_prefix, const char *root, unsigned flags, char **ret);
 diff --git a/src/basic/label.h b/src/basic/label.h
-index d73dacec4f..3ecfed72c6 100644
+index d73dacec4..3ecfed72c 100644
 --- a/src/basic/label.h
 +++ b/src/basic/label.h
 @@ -26,6 +26,7 @@
@@ -194,7 +198,7 @@ index d73dacec4f..3ecfed72c6 100644
  
  int btrfs_subvol_make_label(const char *path);
 diff --git a/src/basic/mkdir-label.c b/src/basic/mkdir-label.c
-index 6f3a46f467..3c1a227bfa 100644
+index 6f3a46f46..3c1a227bf 100644
 --- a/src/basic/mkdir-label.c
 +++ b/src/basic/mkdir-label.c
 @@ -47,6 +47,23 @@ int mkdir_label(const char *path, mode_t mode) {
@@ -222,7 +226,7 @@ index 6f3a46f467..3c1a227bfa 100644
          return mkdir_safe_internal(path, mode, uid, gid, follow_symlink, mkdir_label);
  }
 diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
-index d51518a5a7..418945ad4a 100644
+index d51518a5a..418945ad4 100644
 --- a/src/basic/mkdir.c
 +++ b/src/basic/mkdir.c
 @@ -77,6 +77,12 @@ int mkdir_errno_wrapper(const char *pathname, mode_t mode) {
@@ -239,7 +243,7 @@ index d51518a5a7..418945ad4a 100644
          return mkdir_safe_internal(path, mode, uid, gid, follow_symlink, mkdir_errno_wrapper);
  }
 diff --git a/src/basic/mkdir.h b/src/basic/mkdir.h
-index d6c2d579a3..3ec6f3ed2d 100644
+index d6c2d579a..3ec6f3ed2 100644
 --- a/src/basic/mkdir.h
 +++ b/src/basic/mkdir.h
 @@ -24,6 +24,7 @@
@@ -251,7 +255,7 @@ index d6c2d579a3..3ec6f3ed2d 100644
  int mkdir_parents(const char *path, mode_t mode);
  int mkdir_p(const char *path, mode_t mode);
 diff --git a/src/basic/path-util.c b/src/basic/path-util.c
-index df94629385..84404f7ee1 100644
+index df9462938..84404f7ee 100644
 --- a/src/basic/path-util.c
 +++ b/src/basic/path-util.c
 @@ -127,10 +127,7 @@ int path_make_absolute_cwd(const char *p, char **ret) {
@@ -267,7 +271,7 @@ index df94629385..84404f7ee1 100644
          if (!c)
                  return -ENOMEM;
 diff --git a/src/basic/path-util.h b/src/basic/path-util.h
-index 89c285e076..1094baca12 100644
+index 89c285e07..1094baca1 100644
 --- a/src/basic/path-util.h
 +++ b/src/basic/path-util.h
 @@ -156,3 +156,7 @@ static inline const char *skip_dev_prefix(const char *p) {
@@ -279,7 +283,7 @@ index 89c285e076..1094baca12 100644
 +}
 +
 diff --git a/src/basic/selinux-util.c b/src/basic/selinux-util.c
-index 0c6e99b1d7..bdef7d148b 100644
+index 0c6e99b1d..bdef7d148 100644
 --- a/src/basic/selinux-util.c
 +++ b/src/basic/selinux-util.c
 @@ -34,6 +34,7 @@
@@ -402,7 +406,7 @@ index 0c6e99b1d7..bdef7d148b 100644
  void mac_selinux_create_file_clear(void) {
  
 diff --git a/src/basic/selinux-util.h b/src/basic/selinux-util.h
-index 9780dca81e..84a8bf9729 100644
+index 9780dca81..84a8bf972 100644
 --- a/src/basic/selinux-util.h
 +++ b/src/basic/selinux-util.h
 @@ -41,6 +41,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
@@ -414,7 +418,7 @@ index 9780dca81e..84a8bf9729 100644
  
  int mac_selinux_create_socket_prepare(const char *label);
 diff --git a/src/basic/smack-util.c b/src/basic/smack-util.c
-index f0018f013f..ea0af3e45f 100644
+index f0018f013..ea0af3e45 100644
 --- a/src/basic/smack-util.c
 +++ b/src/basic/smack-util.c
 @@ -21,18 +21,21 @@
@@ -593,7 +597,7 @@ index f0018f013f..ea0af3e45f 100644
          return 0;
  }
 diff --git a/src/basic/smack-util.h b/src/basic/smack-util.h
-index e4d46d7736..0c214bbbc0 100644
+index e4d46d773..0c214bbbc 100644
 --- a/src/basic/smack-util.h
 +++ b/src/basic/smack-util.h
 @@ -44,6 +44,7 @@ typedef enum SmackAttr {
@@ -605,7 +609,7 @@ index e4d46d7736..0c214bbbc0 100644
  const char* smack_attr_to_string(SmackAttr i) _const_;
  SmackAttr smack_attr_from_string(const char *s) _pure_;
 diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c
-index 3a54103f1b..801889ae5b 100644
+index 3a54103f1..801889ae5 100644
 --- a/src/basic/stat-util.c
 +++ b/src/basic/stat-util.c
 @@ -63,6 +63,17 @@ int is_dir(const char* path, bool follow) {
@@ -627,7 +631,7 @@ index 3a54103f1b..801889ae5b 100644
          struct stat info;
  
 diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
-index d8d3c20496..7ea68abfa3 100644
+index d8d3c2049..7ea68abfa 100644
 --- a/src/basic/stat-util.h
 +++ b/src/basic/stat-util.h
 @@ -31,6 +31,7 @@
@@ -639,7 +643,7 @@ index d8d3c20496..7ea68abfa3 100644
  
  int dir_is_empty(const char *path);
 diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
-index 9f3a500080..a76d6d0f8b 100644
+index 9f3a50008..a76d6d0f8 100644
 --- a/src/test/test-fs-util.c
 +++ b/src/test/test-fs-util.c
 @@ -40,6 +40,7 @@ static void test_chase_symlinks(void) {
@@ -682,7 +686,7 @@ index 9f3a500080..a76d6d0f8b 100644
  }
  
 diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
-index 613d418eb3..d59ccbaa39 100644
+index 613d418eb..8d1ab0767 100644
 --- a/src/tmpfiles/tmpfiles.c
 +++ b/src/tmpfiles/tmpfiles.c
 @@ -794,6 +794,7 @@ static bool hardlink_vulnerable(struct stat *st) {
@@ -1064,16 +1068,16 @@ index 613d418eb3..d59ccbaa39 100644
 +                                log_error("Cannot create file %s on a read-only file system.", path);
 +                                return -EROFS;
 +                        }
- 
--        fd = safe_close(fd);
++
 +                        return log_error_errno(errno, "Failed to re-open file %s: %m", path);
 +                }
  
--done:
--        if (stat(path, &st) < 0)
+-        fd = safe_close(fd);
 +                erofs = true;
 +        }
-+
+ 
+-done:
+-        if (stat(path, &st) < 0)
 +        if (fstat(fd, &stbuf) < 0)
                  return log_error_errno(errno, "stat(%s) failed: %m", path);
  
@@ -1489,7 +1493,17 @@ index 613d418eb3..d59ccbaa39 100644
                          else
                                  q = -errno;
  
-@@ -1406,7 +1910,6 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
+@@ -1395,7 +1899,9 @@ static int glob_item(Item *i, action_t action) {
+ 
+ static int glob_item_recursively(Item *i, fdaction_t action) {
+         _cleanup_globfree_ glob_t g = {
++#ifdef GLOB_ALTDIRFUNC
+                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
++#endif
+         };
+         int r = 0, k;
+         char **fn;
+@@ -1406,7 +1912,6 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
  
          STRV_FOREACH(fn, g.gl_pathv) {
                  _cleanup_close_ int fd = -1;
@@ -1497,7 +1511,7 @@ index 613d418eb3..d59ccbaa39 100644
  
                  /* Make sure we won't trigger/follow file object (such as
                   * device nodes, automounts, ...) pointed out by 'fn' with
-@@ -1419,12 +1922,7 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
+@@ -1419,12 +1924,7 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
                          continue;
                  }
  
@@ -1511,7 +1525,7 @@ index 613d418eb3..d59ccbaa39 100644
                  if (k < 0 && r == 0)
                          r = k;
  
-@@ -1435,27 +1933,9 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
+@@ -1435,27 +1935,9 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
          return r;
  }
  
@@ -1540,7 +1554,7 @@ index 613d418eb3..d59ccbaa39 100644
  
          assert(i);
  
-@@ -1470,51 +1950,31 @@ static int create_item(Item *i) {
+@@ -1470,51 +1952,31 @@ static int create_item(Item *i) {
                  return 0;
  
          case CREATE_FILE:
@@ -1602,7 +1616,7 @@ index 613d418eb3..d59ccbaa39 100644
                  break;
  
          case WRITE_FILE:
-@@ -1526,132 +1986,39 @@ static int create_item(Item *i) {
+@@ -1526,132 +1988,39 @@ static int create_item(Item *i) {
  
          case CREATE_DIRECTORY:
          case TRUNCATE_DIRECTORY:
@@ -1750,7 +1764,7 @@ index 613d418eb3..d59ccbaa39 100644
                  break;
          }
  
-@@ -1704,9 +2071,7 @@ static int create_item(Item *i) {
+@@ -1704,9 +2073,7 @@ static int create_item(Item *i) {
          }
  
          case CREATE_BLOCK_DEVICE:
@@ -1761,7 +1775,7 @@ index 613d418eb3..d59ccbaa39 100644
                  if (have_effective_cap(CAP_MKNOD) == 0) {
                          /* In a container we lack CAP_MKNOD. We
                          shouldn't attempt to create the device node in
-@@ -1720,60 +2085,11 @@ static int create_item(Item *i) {
+@@ -1720,60 +2087,11 @@ static int create_item(Item *i) {
                  RUN_WITH_UMASK(0000)
                          (void) mkdir_parents_label(i->path, 0755);
  
@@ -1824,5 +1838,5 @@ index 613d418eb3..d59ccbaa39 100644
          case ADJUST_MODE:
          case RELABEL_PATH:
 -- 
-2.11.0
+2.21.0
 
-- 
2.21.0



More information about the yocto mailing list