musl compilation has been broken since systemd: fix CVE-2018-6954. Fixing this
by placing #ifdef for glob definition.
Signed-off-by: Sinan Kaya <ok...@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.mccollis...@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.mccollis...@gmail.com>
+[okaya:Fix musl compilation]
+Signed-off-by: Sinan Kaya <ok...@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.mccollis...@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