diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r1.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r2.ebuild similarity index 86% rename from sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r1.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r2.ebuild index ad6f2587f5..eeb607fcc7 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-kernel/coreos-kernel-4.2.2-r2.ebuild @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 EAPI=5 -COREOS_SOURCE_REVISION="" +COREOS_SOURCE_REVISION="r1" inherit coreos-kernel DESCRIPTION="CoreOS Linux kernel" diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2-r1.ebuild similarity index 95% rename from sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2-r1.ebuild index 376b3300f0..16a4e7e669 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/coreos-sources-4.2.2-r1.ebuild @@ -32,4 +32,5 @@ ${PATCH_DIR}/overlayfs/0002-Overlayfs-Use-copy-up-security-hooks.patch \ ${PATCH_DIR}/overlayfs/0003-SELinux-Stub-in-copy-up-handling.patch \ ${PATCH_DIR}/overlayfs/0004-SELinux-Handle-opening-of-a-unioned-file.patch \ ${PATCH_DIR}/overlayfs/0005-SELinux-Check-against-union-label-for-file-operation.patch \ +${PATCH_DIR}/overlayfs/0006-overlayfs-use-a-minimal-buffer-in-ovl_copy_xattr.patch \ ${PATCH_DIR}/net-wireless-wl18xx-Add-missing-MODULE_FIRMWARE.patch" diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/files/4.2/overlayfs/0006-overlayfs-use-a-minimal-buffer-in-ovl_copy_xattr.patch b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/files/4.2/overlayfs/0006-overlayfs-use-a-minimal-buffer-in-ovl_copy_xattr.patch new file mode 100644 index 0000000000..5a8471ec7c --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-kernel/coreos-sources/files/4.2/overlayfs/0006-overlayfs-use-a-minimal-buffer-in-ovl_copy_xattr.patch @@ -0,0 +1,76 @@ +From 885f27cadbb562bb405c258ab6053f52efbf4de7 Mon Sep 17 00:00:00 2001 +From: Vito Caputo +Date: Mon, 19 Oct 2015 17:53:12 -0700 +Subject: [PATCH] overlayfs: use a minimal buffer in ovl_copy_xattr + +Rather than always allocating the high-order XATTR_SIZE_MAX buffer +which is costly and prone to failure, only allocate what is needed and +realloc if necessary. + +Fixes https://github.com/coreos/bugs/issues/489 +--- + fs/overlayfs/copy_up.c | 31 ++++++++++++++++++++++--------- + 1 file changed, 22 insertions(+), 9 deletions(-) + +diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c +index 8f66b39..9426e60 100644 +--- a/fs/overlayfs/copy_up.c ++++ b/fs/overlayfs/copy_up.c +@@ -22,8 +22,8 @@ + + int ovl_copy_xattr(struct dentry *old, struct dentry *new) + { +- ssize_t list_size, size; +- char *buf, *name, *value; ++ ssize_t list_size, size, value_size = 0; ++ char *buf, *name, *value = NULL; + int error; + + if (!old->d_inode->i_op->getxattr || +@@ -41,23 +41,36 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new) + if (!buf) + return -ENOMEM; + +- error = -ENOMEM; +- value = kmalloc(XATTR_SIZE_MAX, GFP_KERNEL); +- if (!value) +- goto out; +- + list_size = vfs_listxattr(old, buf, list_size); + if (list_size <= 0) { + error = list_size; +- goto out_free_value; ++ goto out; + } + + for (name = buf; name < (buf + list_size); name += strlen(name) + 1) { +- size = vfs_getxattr(old, name, value, XATTR_SIZE_MAX); ++retry: ++ size = vfs_getxattr(old, name, value, value_size); ++ if (size == -ERANGE) { ++ size = vfs_getxattr(old, name, NULL, 0); ++ } ++ + if (size <= 0) { + error = size; + goto out_free_value; + } ++ ++ if (size > value_size) { ++ void *new; ++ new = krealloc(value, size, GFP_KERNEL); ++ if (!new) { ++ error = -ENOMEM; ++ goto out_free_value; ++ } ++ value = new; ++ value_size = size; ++ goto retry; ++ } ++ + error = security_inode_copy_up_xattr(old, new, + name, value, &size); + if (error < 0) +-- +2.4.6 +