pmaports/device/testing/linux-sony-tulip/0001-posix_acl-fix-bad-kernel-backport.patch
Luca Weiss c57aa7b299
device/*/linux-*: enable CONFIG_TMPFS_POSIX_ACL (MR 1939)
This is required by some software, e.g. bluez/gnome to set some ACLs on
/dev/rfkill (see #904). While probably nobody will notice on the
downstream kernels (as we don't have any proper software there anyways)
it's definitely needed on mainline-ish kernels. Surprisingly only one
kernel has broken by enabling this option (linux-sony-tulip) which I've
patched up.

linux-postmarketos-qcom-sdm660 did not break by enabling this option,
but required linux4.17-gcc10-extern_YYLOC_global_declaration.patch to
build again, so this was fixed too.

[ci:skip-build] [ci:ignore-count]
2021-02-09 21:54:35 +01:00

73 lines
2.4 KiB
Diff

From 1ba38a9c3b87617b1bdb84a550eb958205921165 Mon Sep 17 00:00:00 2001
From: Luca Weiss <luca@z3ntu.xyz>
Date: Mon, 8 Feb 2021 20:48:11 +0100
Subject: [PATCH] posix_acl: fix bad kernel backport
Commit 5cbad1e5b459 ("posix_acl: Clear SGID bit when setting file
permissions") adds the function posix_acl_update_mode and commit
3fc3cd1732ae ("BACKPORT: posix_acl: Clear SGID bit when setting file
permissions") adds the same function a second time.
The default config didn't have the necessary kconfig option enabled so
this wasn't discovered before.
---
fs/posix_acl.c | 31 -------------------------------
include/linux/posix_acl.h | 3 ---
2 files changed, 34 deletions(-)
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
index aad3aa23cb0c..35cc1f40b82d 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -455,34 +455,3 @@ posix_acl_chmod(struct posix_acl **acl, gfp_t gfp, umode_t mode)
return err;
}
EXPORT_SYMBOL(posix_acl_chmod);
-
-/**
- * posix_acl_update_mode - update mode in set_acl
- *
- * Update the file mode when setting an ACL: compute the new file permission
- * bits based on the ACL. In addition, if the ACL is equivalent to the new
- * file mode, set *acl to NULL to indicate that no ACL should be set.
- *
- * As with chmod, clear the setgit bit if the caller is not in the owning group
- * or capable of CAP_FSETID (see inode_change_ok).
- *
- * Called from set_acl inode operations.
- */
-int posix_acl_update_mode(struct inode *inode, umode_t *mode_p,
- struct posix_acl **acl)
-{
- umode_t mode = inode->i_mode;
- int error;
-
- error = posix_acl_equiv_mode(*acl, &mode);
- if (error < 0)
- return error;
- if (error == 0)
- *acl = NULL;
- if (!in_group_p(inode->i_gid) &&
- !capable_wrt_inode_uidgid(inode, CAP_FSETID))
- mode &= ~S_ISGID;
- *mode_p = mode;
- return 0;
-}
-EXPORT_SYMBOL(posix_acl_update_mode);
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h
index ee38f1dead2b..2ae0bba45f12 100644
--- a/include/linux/posix_acl.h
+++ b/include/linux/posix_acl.h
@@ -96,9 +96,6 @@ extern struct posix_acl *get_posix_acl(struct inode *, int);
extern int set_posix_acl(struct inode *, int, struct posix_acl *);
#ifdef CONFIG_FS_POSIX_ACL
-extern int posix_acl_update_mode(struct inode *, umode_t *,
- struct posix_acl **);
-
static inline struct posix_acl **acl_by_type(struct inode *inode, int type)
{
switch (type) {
--
2.30.0