summaryrefslogtreecommitdiffstats
path: root/security
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2016-12-12 03:35:26 -0500
committerCasey Schaufler <casey@schaufler-ca.com>2017-01-10 12:47:20 -0500
commit83a1e53f392075e291a90746241dce45c6f9429a (patch)
tree40cb07887ad83b39bb253199e448de0946d760fd /security
parent805b65a80bed029572c6462cc4be0a260e1482e9 (diff)
Smack: ignore private inode for file functions
The access to fd from anon_inode is always failed because there is no set xattr operations. So this patch fixes to ignore private inode including anon_inode for file functions. It was only ignored for smack_file_receive() to share dma-buf fd, but dma-buf has other functions like ioctl and mmap. Reference: https://lkml.org/lkml/2015/4/17/16 Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Diffstat (limited to 'security')
-rw-r--r--security/smack/smack_lsm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 225c4ad56444..679455350faf 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -1647,6 +1647,9 @@ static int smack_file_ioctl(struct file *file, unsigned int cmd,
1647 struct smk_audit_info ad; 1647 struct smk_audit_info ad;
1648 struct inode *inode = file_inode(file); 1648 struct inode *inode = file_inode(file);
1649 1649
1650 if (unlikely(IS_PRIVATE(inode)))
1651 return 0;
1652
1650 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH); 1653 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
1651 smk_ad_setfield_u_fs_path(&ad, file->f_path); 1654 smk_ad_setfield_u_fs_path(&ad, file->f_path);
1652 1655
@@ -1676,6 +1679,9 @@ static int smack_file_lock(struct file *file, unsigned int cmd)
1676 int rc; 1679 int rc;
1677 struct inode *inode = file_inode(file); 1680 struct inode *inode = file_inode(file);
1678 1681
1682 if (unlikely(IS_PRIVATE(inode)))
1683 return 0;
1684
1679 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH); 1685 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
1680 smk_ad_setfield_u_fs_path(&ad, file->f_path); 1686 smk_ad_setfield_u_fs_path(&ad, file->f_path);
1681 rc = smk_curacc(smk_of_inode(inode), MAY_LOCK, &ad); 1687 rc = smk_curacc(smk_of_inode(inode), MAY_LOCK, &ad);
@@ -1702,6 +1708,9 @@ static int smack_file_fcntl(struct file *file, unsigned int cmd,
1702 int rc = 0; 1708 int rc = 0;
1703 struct inode *inode = file_inode(file); 1709 struct inode *inode = file_inode(file);
1704 1710
1711 if (unlikely(IS_PRIVATE(inode)))
1712 return 0;
1713
1705 switch (cmd) { 1714 switch (cmd) {
1706 case F_GETLK: 1715 case F_GETLK:
1707 break; 1716 break;
@@ -1755,6 +1764,9 @@ static int smack_mmap_file(struct file *file,
1755 if (file == NULL) 1764 if (file == NULL)
1756 return 0; 1765 return 0;
1757 1766
1767 if (unlikely(IS_PRIVATE(file_inode(file))))
1768 return 0;
1769
1758 isp = file_inode(file)->i_security; 1770 isp = file_inode(file)->i_security;
1759 if (isp->smk_mmap == NULL) 1771 if (isp->smk_mmap == NULL)
1760 return 0; 1772 return 0;