mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-01 20:01:03 +02:00
sys-kernel/coreos-sources: add overlayfs deadlock patch
This commit is contained in:
parent
423142e2a6
commit
8406ba7d84
@ -2,7 +2,7 @@
|
|||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
EAPI=5
|
EAPI=5
|
||||||
COREOS_SOURCE_REVISION=""
|
COREOS_SOURCE_REVISION="-r1"
|
||||||
inherit coreos-kernel
|
inherit coreos-kernel
|
||||||
|
|
||||||
DESCRIPTION="CoreOS Linux kernel"
|
DESCRIPTION="CoreOS Linux kernel"
|
@ -2,7 +2,7 @@
|
|||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
EAPI=5
|
EAPI=5
|
||||||
COREOS_SOURCE_REVISION=""
|
COREOS_SOURCE_REVISION="-r1"
|
||||||
inherit coreos-kernel savedconfig
|
inherit coreos-kernel savedconfig
|
||||||
|
|
||||||
DESCRIPTION="CoreOS Linux kernel modules"
|
DESCRIPTION="CoreOS Linux kernel modules"
|
@ -42,4 +42,5 @@ UNIPATCH_LIST="
|
|||||||
${PATCH_DIR}/z0018-SELinux-Check-against-union-label-for-file-operation.patch \
|
${PATCH_DIR}/z0018-SELinux-Check-against-union-label-for-file-operation.patch \
|
||||||
${PATCH_DIR}/z0019-kbuild-derive-relative-path-for-KBUILD_SRC-from-CURD.patch \
|
${PATCH_DIR}/z0019-kbuild-derive-relative-path-for-KBUILD_SRC-from-CURD.patch \
|
||||||
${PATCH_DIR}/z0020-Don-t-verify-write-permissions-on-lower-inodes-on-ov.patch \
|
${PATCH_DIR}/z0020-Don-t-verify-write-permissions-on-lower-inodes-on-ov.patch \
|
||||||
|
${PATCH_DIR}/z0021-vfs-fix-deadlock-in-file_remove_privs-on-overlayfs.patch \
|
||||||
"
|
"
|
@ -0,0 +1,47 @@
|
|||||||
|
From bfae341a7c75db3a82912217236924d4cbb87448 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miklos Szeredi <mszeredi@redhat.com>
|
||||||
|
Date: Wed, 3 Aug 2016 13:44:27 +0200
|
||||||
|
Subject: [PATCH 21/21] vfs: fix deadlock in file_remove_privs() on overlayfs
|
||||||
|
|
||||||
|
file_remove_privs() is called with inode lock on file_inode(), which
|
||||||
|
proceeds to calling notify_change() on file->f_path.dentry. Which triggers
|
||||||
|
the WARN_ON_ONCE(!inode_is_locked(inode)) in addition to deadlocking later
|
||||||
|
when ovl_setattr tries to lock the underlying inode again.
|
||||||
|
|
||||||
|
Fix this mess by not mixing the layers, but doing everything on underlying
|
||||||
|
dentry/inode.
|
||||||
|
|
||||||
|
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||||
|
Fixes: 07a2daab49c5 ("ovl: Copy up underlying inode's ->i_mode to overlay inode")
|
||||||
|
Cc: <stable@vger.kernel.org>
|
||||||
|
---
|
||||||
|
fs/inode.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/fs/inode.c b/fs/inode.c
|
||||||
|
index 4ccbc21..68db390 100644
|
||||||
|
--- a/fs/inode.c
|
||||||
|
+++ b/fs/inode.c
|
||||||
|
@@ -1740,8 +1740,8 @@ static int __remove_privs(struct dentry *dentry, int kill)
|
||||||
|
*/
|
||||||
|
int file_remove_privs(struct file *file)
|
||||||
|
{
|
||||||
|
- struct dentry *dentry = file->f_path.dentry;
|
||||||
|
- struct inode *inode = d_inode(dentry);
|
||||||
|
+ struct dentry *dentry = file_dentry(file);
|
||||||
|
+ struct inode *inode = file_inode(file);
|
||||||
|
int kill;
|
||||||
|
int error = 0;
|
||||||
|
|
||||||
|
@@ -1749,7 +1749,7 @@ int file_remove_privs(struct file *file)
|
||||||
|
if (IS_NOSEC(inode))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- kill = file_needs_remove_privs(file);
|
||||||
|
+ kill = dentry_needs_remove_privs(dentry);
|
||||||
|
if (kill < 0)
|
||||||
|
return kill;
|
||||||
|
if (kill)
|
||||||
|
--
|
||||||
|
2.4.10
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user