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
|
||||
|
||||
EAPI=5
|
||||
COREOS_SOURCE_REVISION=""
|
||||
COREOS_SOURCE_REVISION="-r1"
|
||||
inherit coreos-kernel
|
||||
|
||||
DESCRIPTION="CoreOS Linux kernel"
|
@ -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 savedconfig
|
||||
|
||||
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}/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}/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