From 1ba38a9c3b87617b1bdb84a550eb958205921165 Mon Sep 17 00:00:00 2001 From: Luca Weiss 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