From patchwork Tue Apr 9 19:17:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891983 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A9FF91800 for ; Tue, 9 Apr 2019 19:18:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D857288D0 for ; Tue, 9 Apr 2019 19:18:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 91E86288EA; Tue, 9 Apr 2019 19:18:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6F6E9288BE for ; Tue, 9 Apr 2019 19:18:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726492AbfDITS5 (ORCPT ); Tue, 9 Apr 2019 15:18:57 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:35853 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726574AbfDITS5 (ORCPT ); Tue, 9 Apr 2019 15:18:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837535; bh=TWuw99DnWmB51yX+yr9YkHlREDb2dZVqgCxQsdxAgdM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=tlIrRB3B09HMPyzEY1ZhkaqxslAg2vy4PBX/uLNRwPzL7n6hUTernGSU/jWVUB5DpoUZ2kugK4cGs7VnuOMuqd8Sx3ubniwbvNoNREIXfIj+3uKYCTfjis1u7srxhQn/UNCJIgG8HmwwuEelq9Y/+8Y0tXS10NWfSAo9vOclf+TzhS9MRBmd7mCk2ScqrCtAJPWdqXAd/hduimXafBK2+2tMX5Vmq+WR0+4PHyWUwupYhG/tveUMX3Ff8pvBoSSyaHI9r+e7+XYjgCLnjawOzQPu/F9QJuXshJBZdsb/FGzapOR8CfssKFbz3WE2iAF6+R08plD69LBNsLf7U6UZ+w== X-YMail-OSG: gHoYEqwVM1nJJoINjyfOyIKhiagoj.Tl2tC1Z1Wypw04Qwe.D.lKpEqCqYIEIhw HRDJ1Py.9bRD8m71vqWE6ik5XJJW7va6TPmQKacqNLCvgV6Zew.qbAWycQkdKn2Pcv3AYJnzJRcb Wnf80RU5YAyiwtWo5HG5.SQKt6q1c6Pu_1XFxswA4P56fdUPdcwSHb1rkvV7fHH9BQg28fAHwM5J CNr21hz89q2OE1iRHLGiyGOrvRj4OXYMbWTIFk9czh0EMpzcJqXhAov1s_qUFMHFk553KyisaQTb 1KL31xn88.N.vQaA5KbgrnJRXcUyqjugfMPKDWhTduryp_6hIcTGsD0pRKQ4vppJt7vgEOwvCbj6 I75Xkbk2yZ6XGPwI8tAeqw3gnWn_hvtT_NNK4nuUPciuIqcW2HyrSUpWi1uC1do6_u6rLfPqOWFq j4U6zS5UKBzaaVotkmKrDt7HQHV0h96sU1mo5p8fDiap5WTr.NnK87Jc02hhSK8n4VpTXp9jaFfI 6jTrK4D8rvpCPwDTtIFqDAhG4CCaGKxWXzjdYTvv1AIrGTWtpqfP99KEzShzNPOaljQQ38pHre8f XmFxbNtYorYhtZoY8Q9cTO5ySpjlNy.cBZNC_PKSgPCbTQqIMOmPS9Ddk1Ze0k6ch_AZyAf64PzN nFa6vwqUqHsVFCAAbn3pim_BPsL.spvEqxhrZejz9.DsKgQpZw9x1Pj_8SQcXRh7gvJZO0SD9C79 KGtTQ0bCUOmnghszhcMLvMR99_BAoZrVxMfsJhkTT_FyVSJAuouE_s5prvsdKlLG7ZtlFx0EUW.S OJLPBFuSfmd1CHNt9ZpNz_YjuNZKHDI4zb4hojJql55nZADgnTiDIFaY59wEqk_faLbyyoUlIH02 zg1CB0Mh5yWPlYpc_H3pQlYrj80.rx9bfo1U6pLwflE0_QfO2264x77PxPhASHQ2.jc.HZK_DOOq nGzUjp2dDyaGMXmPGFivW0cseJKwTbDSWKjIQtzkkTcThH1jOBpDYGmNXzSGYHPYzqRM2UDIYhvw sY8qtAcGoVYpSseAHj5i0Mk2ZNxCdR1YI3VmCkW4bPu33.hDPd6BUjoLf2wjBx3zpkZIJnV0Spsm aJjJns00_zeb8v_z7aFfqAb7RlTcGNei1AFL9aJCHZNx0JDYj Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:55 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:54 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 01/59] LSM: Infrastructure management of the superblock Date: Tue, 9 Apr 2019 12:17:50 -0700 Message-Id: <20190409191848.1380-2-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Move management of the superblock->sb_security blob out of the individual security modules and into the security infrastructure. Instead of allocating the blobs from within the modules the modules tell the infrastructure how much space is required, and the space is allocated there. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 1 + security/security.c | 46 ++++++++++++++++++++---- security/selinux/hooks.c | 58 ++++++++++++------------------- security/selinux/include/objsec.h | 6 ++++ security/selinux/ss/services.c | 3 +- security/smack/smack.h | 6 ++++ security/smack/smack_lsm.c | 35 +++++-------------- 7 files changed, 85 insertions(+), 70 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index a9b8ff578b6b..cdc5730666d6 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2055,6 +2055,7 @@ struct lsm_blob_sizes { int lbs_cred; int lbs_file; int lbs_inode; + int lbs_superblock; int lbs_ipc; int lbs_msg_msg; int lbs_task; diff --git a/security/security.c b/security/security.c index 23cbb1a295a3..550988a0f024 100644 --- a/security/security.c +++ b/security/security.c @@ -172,6 +172,7 @@ static void __init lsm_set_blob_sizes(struct lsm_blob_sizes *needed) lsm_set_blob_size(&needed->lbs_inode, &blob_sizes.lbs_inode); lsm_set_blob_size(&needed->lbs_ipc, &blob_sizes.lbs_ipc); lsm_set_blob_size(&needed->lbs_msg_msg, &blob_sizes.lbs_msg_msg); + lsm_set_blob_size(&needed->lbs_superblock, &blob_sizes.lbs_superblock); lsm_set_blob_size(&needed->lbs_task, &blob_sizes.lbs_task); } @@ -300,12 +301,13 @@ static void __init ordered_lsm_init(void) for (lsm = ordered_lsms; *lsm; lsm++) prepare_lsm(*lsm); - init_debug("cred blob size = %d\n", blob_sizes.lbs_cred); - init_debug("file blob size = %d\n", blob_sizes.lbs_file); - init_debug("inode blob size = %d\n", blob_sizes.lbs_inode); - init_debug("ipc blob size = %d\n", blob_sizes.lbs_ipc); - init_debug("msg_msg blob size = %d\n", blob_sizes.lbs_msg_msg); - init_debug("task blob size = %d\n", blob_sizes.lbs_task); + init_debug("cred blob size = %d\n", blob_sizes.lbs_cred); + init_debug("file blob size = %d\n", blob_sizes.lbs_file); + init_debug("inode blob size = %d\n", blob_sizes.lbs_inode); + init_debug("ipc blob size = %d\n", blob_sizes.lbs_ipc); + init_debug("msg_msg blob size = %d\n", blob_sizes.lbs_msg_msg); + init_debug("superblock blob size = %d\n", blob_sizes.lbs_superblock); + init_debug("task blob size = %d\n", blob_sizes.lbs_task); /* * Create any kmem_caches needed for blobs @@ -603,6 +605,27 @@ static void __init lsm_early_task(struct task_struct *task) panic("%s: Early task alloc failed.\n", __func__); } +/** + * lsm_superblock_alloc - allocate a composite superblock blob + * @sb: the superblock that needs a blob + * + * Allocate the superblock blob for all the modules + * + * Returns 0, or -ENOMEM if memory can't be allocated. + */ +int lsm_superblock_alloc(struct super_block *sb) +{ + if (blob_sizes.lbs_superblock == 0) { + sb->s_security = NULL; + return 0; + } + + sb->s_security = kzalloc(blob_sizes.lbs_superblock, GFP_KERNEL); + if (sb->s_security == NULL) + return -ENOMEM; + return 0; +} + /* * Hook list operation macros. * @@ -776,12 +799,21 @@ int security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter * int security_sb_alloc(struct super_block *sb) { - return call_int_hook(sb_alloc_security, 0, sb); + int rc = lsm_superblock_alloc(sb); + + if (unlikely(rc)) + return rc; + rc = call_int_hook(sb_alloc_security, 0, sb); + if (unlikely(rc)) + security_sb_free(sb); + return rc; } void security_sb_free(struct super_block *sb) { call_void_hook(sb_free_security, sb); + kfree(sb->s_security); + sb->s_security = NULL; } void security_free_mnt_opts(void **mnt_opts) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 1d0b37af2444..7478d8eda00a 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -335,7 +335,7 @@ static void inode_free_security(struct inode *inode) if (!isec) return; - sbsec = inode->i_sb->s_security; + sbsec = selinux_superblock(inode->i_sb); /* * As not all inode security structures are in a list, we check for * empty list outside of the lock to make sure that we won't waste @@ -366,11 +366,7 @@ static int file_alloc_security(struct file *file) static int superblock_alloc_security(struct super_block *sb) { - struct superblock_security_struct *sbsec; - - sbsec = kzalloc(sizeof(struct superblock_security_struct), GFP_KERNEL); - if (!sbsec) - return -ENOMEM; + struct superblock_security_struct *sbsec = selinux_superblock(sb); mutex_init(&sbsec->lock); INIT_LIST_HEAD(&sbsec->isec_head); @@ -379,18 +375,10 @@ static int superblock_alloc_security(struct super_block *sb) sbsec->sid = SECINITSID_UNLABELED; sbsec->def_sid = SECINITSID_FILE; sbsec->mntpoint_sid = SECINITSID_UNLABELED; - sb->s_security = sbsec; return 0; } -static void superblock_free_security(struct super_block *sb) -{ - struct superblock_security_struct *sbsec = sb->s_security; - sb->s_security = NULL; - kfree(sbsec); -} - struct selinux_mnt_opts { const char *fscontext, *context, *rootcontext, *defcontext; }; @@ -507,7 +495,7 @@ static int selinux_is_genfs_special_handling(struct super_block *sb) static int selinux_is_sblabel_mnt(struct super_block *sb) { - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); /* * IMPORTANT: Double-check logic in this function when adding a new @@ -535,7 +523,7 @@ static int selinux_is_sblabel_mnt(struct super_block *sb) static int sb_finish_set_opts(struct super_block *sb) { - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); struct dentry *root = sb->s_root; struct inode *root_inode = d_backing_inode(root); int rc = 0; @@ -648,7 +636,7 @@ static int selinux_set_mnt_opts(struct super_block *sb, unsigned long *set_kern_flags) { const struct cred *cred = current_cred(); - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); struct dentry *root = sbsec->sb->s_root; struct selinux_mnt_opts *opts = mnt_opts; struct inode_security_struct *root_isec; @@ -881,8 +869,8 @@ static int selinux_set_mnt_opts(struct super_block *sb, static int selinux_cmp_sb_context(const struct super_block *oldsb, const struct super_block *newsb) { - struct superblock_security_struct *old = oldsb->s_security; - struct superblock_security_struct *new = newsb->s_security; + struct superblock_security_struct *old = selinux_superblock(oldsb); + struct superblock_security_struct *new = selinux_superblock(newsb); char oldflags = old->flags & SE_MNTMASK; char newflags = new->flags & SE_MNTMASK; @@ -914,8 +902,9 @@ static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb, unsigned long *set_kern_flags) { int rc = 0; - const struct superblock_security_struct *oldsbsec = oldsb->s_security; - struct superblock_security_struct *newsbsec = newsb->s_security; + const struct superblock_security_struct *oldsbsec = + selinux_superblock(oldsb); + struct superblock_security_struct *newsbsec = selinux_superblock(newsb); int set_fscontext = (oldsbsec->flags & FSCONTEXT_MNT); int set_context = (oldsbsec->flags & CONTEXT_MNT); @@ -1085,7 +1074,7 @@ static int show_sid(struct seq_file *m, u32 sid) static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb) { - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); int rc; if (!(sbsec->flags & SE_SBINITIALIZED)) @@ -1377,7 +1366,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent if (isec->sclass == SECCLASS_FILE) isec->sclass = inode_mode_to_security_class(inode->i_mode); - sbsec = inode->i_sb->s_security; + sbsec = selinux_superblock(inode->i_sb); if (!(sbsec->flags & SE_SBINITIALIZED)) { /* Defer initialization until selinux_complete_init, after the initial policy is loaded and the security @@ -1767,7 +1756,8 @@ selinux_determine_inode_label(const struct task_security_struct *tsec, const struct qstr *name, u16 tclass, u32 *_new_isid) { - const struct superblock_security_struct *sbsec = dir->i_sb->s_security; + const struct superblock_security_struct *sbsec = + selinux_superblock(dir->i_sb); if ((sbsec->flags & SE_SBINITIALIZED) && (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) { @@ -1798,7 +1788,7 @@ static int may_create(struct inode *dir, int rc; dsec = inode_security(dir); - sbsec = dir->i_sb->s_security; + sbsec = selinux_superblock(dir->i_sb); sid = tsec->sid; @@ -1947,7 +1937,7 @@ static int superblock_has_perm(const struct cred *cred, struct superblock_security_struct *sbsec; u32 sid = cred_sid(cred); - sbsec = sb->s_security; + sbsec = selinux_superblock(sb); return avc_has_perm(&selinux_state, sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad); } @@ -2578,11 +2568,6 @@ static int selinux_sb_alloc_security(struct super_block *sb) return superblock_alloc_security(sb); } -static void selinux_sb_free_security(struct super_block *sb) -{ - superblock_free_security(sb); -} - static inline int opt_len(const char *s) { bool open_quote = false; @@ -2653,7 +2638,7 @@ static int selinux_sb_eat_lsm_opts(char *options, void **mnt_opts) static int selinux_sb_remount(struct super_block *sb, void *mnt_opts) { struct selinux_mnt_opts *opts = mnt_opts; - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); u32 sid; int rc; @@ -2877,7 +2862,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir, int rc; char *context; - sbsec = dir->i_sb->s_security; + sbsec = selinux_superblock(dir->i_sb); newsid = tsec->create_sid; @@ -3115,7 +3100,7 @@ static int selinux_inode_setxattr(struct dentry *dentry, const char *name, return dentry_has_perm(current_cred(), dentry, FILE__SETATTR); } - sbsec = inode->i_sb->s_security; + sbsec = selinux_superblock(inode->i_sb); if (!(sbsec->flags & SBLABEL_MNT)) return -EOPNOTSUPP; @@ -3296,13 +3281,14 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags) { struct inode_security_struct *isec = inode_security_novalidate(inode); - struct superblock_security_struct *sbsec = inode->i_sb->s_security; + struct superblock_security_struct *sbsec; u32 newsid; int rc; if (strcmp(name, XATTR_SELINUX_SUFFIX)) return -EOPNOTSUPP; + sbsec = selinux_superblock(inode->i_sb); if (!(sbsec->flags & SBLABEL_MNT)) return -EOPNOTSUPP; @@ -6647,6 +6633,7 @@ struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = { .lbs_inode = sizeof(struct inode_security_struct), .lbs_ipc = sizeof(struct ipc_security_struct), .lbs_msg_msg = sizeof(struct msg_security_struct), + .lbs_superblock = sizeof(struct superblock_security_struct), }; static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = { @@ -6675,7 +6662,6 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(fs_context_parse_param, selinux_fs_context_parse_param), LSM_HOOK_INIT(sb_alloc_security, selinux_sb_alloc_security), - LSM_HOOK_INIT(sb_free_security, selinux_sb_free_security), LSM_HOOK_INIT(sb_eat_lsm_opts, selinux_sb_eat_lsm_opts), LSM_HOOK_INIT(sb_free_mnt_opts, selinux_free_mnt_opts), LSM_HOOK_INIT(sb_remount, selinux_sb_remount), diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index 231262d8eac9..d08d7e5d2f93 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -188,4 +188,10 @@ static inline struct ipc_security_struct *selinux_ipc( return ipc->security + selinux_blob_sizes.lbs_ipc; } +static inline struct superblock_security_struct *selinux_superblock( + const struct super_block *superblock) +{ + return superblock->s_security + selinux_blob_sizes.lbs_superblock; +} + #endif /* _SELINUX_OBJSEC_H_ */ diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index ec62918521b1..e3f5d6aece66 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include "flask.h" @@ -2751,7 +2752,7 @@ int security_fs_use(struct selinux_state *state, struct super_block *sb) struct sidtab *sidtab; int rc = 0; struct ocontext *c; - struct superblock_security_struct *sbsec = sb->s_security; + struct superblock_security_struct *sbsec = selinux_superblock(sb); const char *fstype = sb->s_type->name; read_lock(&state->ss->policy_rwlock); diff --git a/security/smack/smack.h b/security/smack/smack.h index cf52af77d15e..caecbcba9942 100644 --- a/security/smack/smack.h +++ b/security/smack/smack.h @@ -375,6 +375,12 @@ static inline struct smack_known **smack_ipc(const struct kern_ipc_perm *ipc) return ipc->security + smack_blob_sizes.lbs_ipc; } +static inline struct superblock_smack *smack_superblock( + const struct super_block *superblock) +{ + return superblock->s_security + smack_blob_sizes.lbs_superblock; +} + /* * Is the directory transmuting? */ diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 5c1613519d5a..807eff2ccce9 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -540,12 +540,7 @@ static int smack_syslog(int typefrom_file) */ static int smack_sb_alloc_security(struct super_block *sb) { - struct superblock_smack *sbsp; - - sbsp = kzalloc(sizeof(struct superblock_smack), GFP_KERNEL); - - if (sbsp == NULL) - return -ENOMEM; + struct superblock_smack *sbsp = smack_superblock(sb); sbsp->smk_root = &smack_known_floor; sbsp->smk_default = &smack_known_floor; @@ -554,22 +549,10 @@ static int smack_sb_alloc_security(struct super_block *sb) /* * SMK_SB_INITIALIZED will be zero from kzalloc. */ - sb->s_security = sbsp; return 0; } -/** - * smack_sb_free_security - free a superblock blob - * @sb: the superblock getting the blob - * - */ -static void smack_sb_free_security(struct super_block *sb) -{ - kfree(sb->s_security); - sb->s_security = NULL; -} - struct smack_mnt_opts { const char *fsdefault, *fsfloor, *fshat, *fsroot, *fstransmute; }; @@ -781,7 +764,7 @@ static int smack_set_mnt_opts(struct super_block *sb, { struct dentry *root = sb->s_root; struct inode *inode = d_backing_inode(root); - struct superblock_smack *sp = sb->s_security; + struct superblock_smack *sp = smack_superblock(sb); struct inode_smack *isp; struct smack_known *skp; struct smack_mnt_opts *opts = mnt_opts; @@ -880,7 +863,7 @@ static int smack_set_mnt_opts(struct super_block *sb, */ static int smack_sb_statfs(struct dentry *dentry) { - struct superblock_smack *sbp = dentry->d_sb->s_security; + struct superblock_smack *sbp = smack_superblock(dentry->d_sb); int rc; struct smk_audit_info ad; @@ -917,7 +900,7 @@ static int smack_bprm_set_creds(struct linux_binprm *bprm) if (isp->smk_task == NULL || isp->smk_task == bsp->smk_task) return 0; - sbsp = inode->i_sb->s_security; + sbsp = smack_superblock(inode->i_sb); if ((sbsp->smk_flags & SMK_SB_UNTRUSTED) && isp->smk_task != sbsp->smk_root) return 0; @@ -1168,7 +1151,7 @@ static int smack_inode_rename(struct inode *old_inode, */ static int smack_inode_permission(struct inode *inode, int mask) { - struct superblock_smack *sbsp = inode->i_sb->s_security; + struct superblock_smack *sbsp = smack_superblock(inode->i_sb); struct smk_audit_info ad; int no_block = mask & MAY_NOT_BLOCK; int rc; @@ -1410,7 +1393,7 @@ static int smack_inode_removexattr(struct dentry *dentry, const char *name) */ if (strcmp(name, XATTR_NAME_SMACK) == 0) { struct super_block *sbp = dentry->d_sb; - struct superblock_smack *sbsp = sbp->s_security; + struct superblock_smack *sbsp = smack_superblock(sbp); isp->smk_inode = sbsp->smk_default; } else if (strcmp(name, XATTR_NAME_SMACKEXEC) == 0) @@ -1680,7 +1663,7 @@ static int smack_mmap_file(struct file *file, isp = smack_inode(file_inode(file)); if (isp->smk_mmap == NULL) return 0; - sbsp = file_inode(file)->i_sb->s_security; + sbsp = smack_superblock(file_inode(file)->i_sb); if (sbsp->smk_flags & SMK_SB_UNTRUSTED && isp->smk_mmap != sbsp->smk_root) return -EACCES; @@ -3288,7 +3271,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) goto unlockandout; sbp = inode->i_sb; - sbsp = sbp->s_security; + sbsp = smack_superblock(sbp); /* * We're going to use the superblock default label * if there's no label on the file. @@ -4575,6 +4558,7 @@ struct lsm_blob_sizes smack_blob_sizes __lsm_ro_after_init = { .lbs_inode = sizeof(struct inode_smack), .lbs_ipc = sizeof(struct smack_known *), .lbs_msg_msg = sizeof(struct smack_known *), + .lbs_superblock = sizeof(struct superblock_smack), }; static struct security_hook_list smack_hooks[] __lsm_ro_after_init = { @@ -4586,7 +4570,6 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(fs_context_parse_param, smack_fs_context_parse_param), LSM_HOOK_INIT(sb_alloc_security, smack_sb_alloc_security), - LSM_HOOK_INIT(sb_free_security, smack_sb_free_security), LSM_HOOK_INIT(sb_free_mnt_opts, smack_free_mnt_opts), LSM_HOOK_INIT(sb_eat_lsm_opts, smack_sb_eat_lsm_opts), LSM_HOOK_INIT(sb_statfs, smack_sb_statfs), From patchwork Tue Apr 9 19:17:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892167 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1582F17EF for ; Tue, 9 Apr 2019 19:21:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 03F8628179 for ; Tue, 9 Apr 2019 19:21:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EB7072890C; Tue, 9 Apr 2019 19:21:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1FFAA28938 for ; Tue, 9 Apr 2019 19:21:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726412AbfDITVB (ORCPT ); Tue, 9 Apr 2019 15:21:01 -0400 Received: from sonic302-55.consmr.mail.gq1.yahoo.com ([98.137.68.181]:36511 "EHLO sonic302-55.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726415AbfDITVB (ORCPT ); Tue, 9 Apr 2019 15:21:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837655; bh=uYMzsP8oNFL/qA8PyuIX9+E+dFu5phtarBiekUH0zk4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=hb1YQS182tkpvy1QHXzkCK3PJeVYwMMUMY2YXQrhLN5Rb91Hfv7BuQXgtTpFZd5t8Ij5kLmwZ7Zai8nYY/vG+jrC3WCPxWaqlDnRMuVFFrupazO0SHjib4P1z8wM4pROwtQKb8oa63sMElPEJOmI6cntgYiQvVe+fUxZCX0+PFjSUkXfH76fRuAW5h4Nwc45L+8VzZ2SLQpnTY+/mVJvpQbWrsR8elpA74vwdVG1tN4p1UAolp7M3n4/ivX62GwUjz9L2SCHq2du0algbU/SRSZBytfNH6wNsTlUDX/u6u26oj+fCo73aQaZDAMkYmnhPHfyx/R6bxDpffZz4V9VTw== X-YMail-OSG: D9yIOcwVM1liFfLMh_fKHaz_4GZe9y31kGi6FdFw4vRp6I3ogAj9OBbHvZcAIzs U55fccVIHdckzW9WDEnw4gbFWvPD.kbJ0AMtDwXPgLsxLh8qjwwZgkfiDeQYA0s20cesqsLWKl5. cZcQhahKtXAwhAwKE5hJmaQbFCsJmtbiGqK0_Pmw3dQRjbhsf69_NNAV.OM75PrsiEaZiEQ1qqzI MlWV46WFk1RRkDtKtmin1b_gnQehwewb3P6SX3slFA4nY2zuMMW0jxc.GUzpoO90Q3lkD2qk_2cm Z4uMe2g7Ap1iV3rNsZBI6Xj11DqDwPkjHL3t4GOB3CypEfHI1uJuobU74IBN38UkKFFyqhOberNo s6NC6usUPY1Vo4UFADL8jUHQFdLeXYSM.JiopHq3JNf.7HacklAMGQGPZLSokKmARCcT3gsv8Omg pX_66gGdIoz.mAYfUSm.3H7gpKFizhIfF.QDnQOBjL2iQ7yQGJb0ZzoSib9DDG2.buL_AlBu2qI7 McW_Zr6limKGHfALGkAt_52DS3cDpV2rQ5hH1rA4fJi4EbVELGA5N4Fegjz2JPHtlofC9UM2v0zK _SWSmwXKvn9Wsa6g9LsNJOx_0AWoerunljDjxUd9p.Dkgf4pl9vhqvAly7BhO8JDA4scW0qDvkZy 5QrZ11ItbKmwvn8RZzzQje51GdbAdR9BNtU1FNr9uD2Ggj1XKccOgqhrTMdMqXXGUtyn3CvyrJ0u feIkM8IlIV01oCbgiab_x1SsqKKTCI0Qvl2Yhmnqeop0ht9SFJphvPHiQde08gs7wOL.2ChIfSe8 W0NVwZVShP5ef.hOhm1mt99SxH4EtfJAFwjtl.D5Dmecfsc0AqozJQgXbc1V4.lbawMYLq7na9od q.Gyz91SXgo73C2ULpsjbXrregCl2Rfqmw9vFrFkF1BY.2G4TQEJr9xhADJNcogIGdj7yZ5.HqWR v7EGcnQ3A1O3Ap4GYPNDPeBN6qE1CrRTM3jOrw0ssvQ73sxRCsfmx.Q9dxFx3o1YPvtObUkUvmsb dQTfSF.99oQAhNn.gSXWloUI.h1nZXlxkCWU80v8MCAkArLzMFo2OD2KUHS1xG7t12laoSs3Pdx_ 7QD9pjVbEpIH4uPmCJl7VkLsHx.kxfkDcmw_Mv0g3Jr5kUryybo4- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:20:55 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:54 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 02/59] LSM: Infrastructure management of the sock security Date: Tue, 9 Apr 2019 12:17:51 -0700 Message-Id: <20190409191848.1380-3-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Move management of the sock->sk_security blob out of the individual security modules and into the security infrastructure. Instead of allocating the blobs from within the modules the modules tell the infrastructure how much space is required, and the space is allocated there. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 1 + security/apparmor/include/net.h | 6 ++- security/apparmor/lsm.c | 38 ++++----------- security/security.c | 36 +++++++++++++- security/selinux/hooks.c | 78 +++++++++++++++---------------- security/selinux/include/objsec.h | 5 ++ security/selinux/netlabel.c | 23 ++++----- security/smack/smack.h | 5 ++ security/smack/smack_lsm.c | 64 ++++++++++++------------- security/smack/smack_netfilter.c | 8 ++-- 10 files changed, 144 insertions(+), 120 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index cdc5730666d6..1dbed888dab0 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2055,6 +2055,7 @@ struct lsm_blob_sizes { int lbs_cred; int lbs_file; int lbs_inode; + int lbs_sock; int lbs_superblock; int lbs_ipc; int lbs_msg_msg; diff --git a/security/apparmor/include/net.h b/security/apparmor/include/net.h index 7334ac966d01..adac04e3b3cc 100644 --- a/security/apparmor/include/net.h +++ b/security/apparmor/include/net.h @@ -55,7 +55,11 @@ struct aa_sk_ctx { struct aa_label *peer; }; -#define SK_CTX(X) ((X)->sk_security) +static inline struct aa_sk_ctx *aa_sock(const struct sock *sk) +{ + return sk->sk_security + apparmor_blob_sizes.lbs_sock; +} + #define SOCK_ctx(X) SOCK_INODE(X)->i_security #define DEFINE_AUDIT_NET(NAME, OP, SK, F, T, P) \ struct lsm_network_audit NAME ## _net = { .sk = (SK), \ diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 49d664ddff44..2716e7731279 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -757,33 +757,15 @@ static int apparmor_task_kill(struct task_struct *target, struct kernel_siginfo return error; } -/** - * apparmor_sk_alloc_security - allocate and attach the sk_security field - */ -static int apparmor_sk_alloc_security(struct sock *sk, int family, gfp_t flags) -{ - struct aa_sk_ctx *ctx; - - ctx = kzalloc(sizeof(*ctx), flags); - if (!ctx) - return -ENOMEM; - - SK_CTX(sk) = ctx; - - return 0; -} - /** * apparmor_sk_free_security - free the sk_security field */ static void apparmor_sk_free_security(struct sock *sk) { - struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *ctx = aa_sock(sk); - SK_CTX(sk) = NULL; aa_put_label(ctx->label); aa_put_label(ctx->peer); - kfree(ctx); } /** @@ -792,8 +774,8 @@ static void apparmor_sk_free_security(struct sock *sk) static void apparmor_sk_clone_security(const struct sock *sk, struct sock *newsk) { - struct aa_sk_ctx *ctx = SK_CTX(sk); - struct aa_sk_ctx *new = SK_CTX(newsk); + struct aa_sk_ctx *ctx = aa_sock(sk); + struct aa_sk_ctx *new = aa_sock(newsk); new->label = aa_get_label(ctx->label); new->peer = aa_get_label(ctx->peer); @@ -844,7 +826,7 @@ static int apparmor_socket_post_create(struct socket *sock, int family, label = aa_get_current_label(); if (sock->sk) { - struct aa_sk_ctx *ctx = SK_CTX(sock->sk); + struct aa_sk_ctx *ctx = aa_sock(sock->sk); aa_put_label(ctx->label); ctx->label = aa_get_label(label); @@ -1029,7 +1011,7 @@ static int apparmor_socket_shutdown(struct socket *sock, int how) */ static int apparmor_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) { - struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *ctx = aa_sock(sk); if (!skb->secmark) return 0; @@ -1042,7 +1024,7 @@ static int apparmor_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) static struct aa_label *sk_peer_label(struct sock *sk) { - struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *ctx = aa_sock(sk); if (ctx->peer) return ctx->peer; @@ -1126,7 +1108,7 @@ static int apparmor_socket_getpeersec_dgram(struct socket *sock, */ static void apparmor_sock_graft(struct sock *sk, struct socket *parent) { - struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *ctx = aa_sock(sk); if (!ctx->label) ctx->label = aa_get_current_label(); @@ -1136,7 +1118,7 @@ static void apparmor_sock_graft(struct sock *sk, struct socket *parent) static int apparmor_inet_conn_request(struct sock *sk, struct sk_buff *skb, struct request_sock *req) { - struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *ctx = aa_sock(sk); if (!skb->secmark) return 0; @@ -1153,6 +1135,7 @@ struct lsm_blob_sizes apparmor_blob_sizes __lsm_ro_after_init = { .lbs_cred = sizeof(struct aa_task_ctx *), .lbs_file = sizeof(struct aa_file_ctx), .lbs_task = sizeof(struct aa_task_ctx), + .lbs_sock = sizeof(struct aa_sk_ctx), }; static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = { @@ -1189,7 +1172,6 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(getprocattr, apparmor_getprocattr), LSM_HOOK_INIT(setprocattr, apparmor_setprocattr), - LSM_HOOK_INIT(sk_alloc_security, apparmor_sk_alloc_security), LSM_HOOK_INIT(sk_free_security, apparmor_sk_free_security), LSM_HOOK_INIT(sk_clone_security, apparmor_sk_clone_security), @@ -1581,7 +1563,7 @@ static unsigned int apparmor_ip_postroute(void *priv, if (sk == NULL) return NF_ACCEPT; - ctx = SK_CTX(sk); + ctx = aa_sock(sk); if (!apparmor_secmark_check(ctx->label, OP_SENDMSG, AA_MAY_SEND, skb->secmark, sk)) return NF_ACCEPT; diff --git a/security/security.c b/security/security.c index 550988a0f024..e32b7180282e 100644 --- a/security/security.c +++ b/security/security.c @@ -32,6 +32,7 @@ #include #include #include +#include #define MAX_LSM_EVM_XATTR 2 @@ -172,6 +173,7 @@ static void __init lsm_set_blob_sizes(struct lsm_blob_sizes *needed) lsm_set_blob_size(&needed->lbs_inode, &blob_sizes.lbs_inode); lsm_set_blob_size(&needed->lbs_ipc, &blob_sizes.lbs_ipc); lsm_set_blob_size(&needed->lbs_msg_msg, &blob_sizes.lbs_msg_msg); + lsm_set_blob_size(&needed->lbs_sock, &blob_sizes.lbs_sock); lsm_set_blob_size(&needed->lbs_superblock, &blob_sizes.lbs_superblock); lsm_set_blob_size(&needed->lbs_task, &blob_sizes.lbs_task); } @@ -306,6 +308,7 @@ static void __init ordered_lsm_init(void) init_debug("inode blob size = %d\n", blob_sizes.lbs_inode); init_debug("ipc blob size = %d\n", blob_sizes.lbs_ipc); init_debug("msg_msg blob size = %d\n", blob_sizes.lbs_msg_msg); + init_debug("sock blob size = %d\n", blob_sizes.lbs_sock); init_debug("superblock blob size = %d\n", blob_sizes.lbs_superblock); init_debug("task blob size = %d\n", blob_sizes.lbs_task); @@ -605,6 +608,28 @@ static void __init lsm_early_task(struct task_struct *task) panic("%s: Early task alloc failed.\n", __func__); } +/** + * lsm_sock_alloc - allocate a composite sock blob + * @sock: the sock that needs a blob + * @priority: allocation mode + * + * Allocate the sock blob for all the modules + * + * Returns 0, or -ENOMEM if memory can't be allocated. + */ +int lsm_sock_alloc(struct sock *sock, gfp_t priority) +{ + if (blob_sizes.lbs_sock == 0) { + sock->sk_security = NULL; + return 0; + } + + sock->sk_security = kzalloc(blob_sizes.lbs_sock, priority); + if (sock->sk_security == NULL) + return -ENOMEM; + return 0; +} + /** * lsm_superblock_alloc - allocate a composite superblock blob * @sb: the superblock that needs a blob @@ -2048,12 +2073,21 @@ EXPORT_SYMBOL(security_socket_getpeersec_dgram); int security_sk_alloc(struct sock *sk, int family, gfp_t priority) { - return call_int_hook(sk_alloc_security, 0, sk, family, priority); + int rc = lsm_sock_alloc(sk, priority); + + if (unlikely(rc)) + return rc; + rc = call_int_hook(sk_alloc_security, 0, sk, family, priority); + if (unlikely(rc)) + security_sk_free(sk); + return rc; } void security_sk_free(struct sock *sk) { call_void_hook(sk_free_security, sk); + kfree(sk->sk_security); + sk->sk_security = NULL; } void security_sk_clone(const struct sock *sk, struct sock *newsk) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 7478d8eda00a..f38a6f484613 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -4319,7 +4319,7 @@ static int socket_sockcreate_sid(const struct task_security_struct *tsec, static int sock_has_perm(struct sock *sk, u32 perms) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct common_audit_data ad; struct lsm_network_audit net = {0,}; @@ -4376,7 +4376,7 @@ static int selinux_socket_post_create(struct socket *sock, int family, isec->initialized = LABEL_INITIALIZED; if (sock->sk) { - sksec = sock->sk->sk_security; + sksec = selinux_sock(sock->sk); sksec->sclass = sclass; sksec->sid = sid; /* Allows detection of the first association on this socket */ @@ -4392,8 +4392,8 @@ static int selinux_socket_post_create(struct socket *sock, int family, static int selinux_socket_socketpair(struct socket *socka, struct socket *sockb) { - struct sk_security_struct *sksec_a = socka->sk->sk_security; - struct sk_security_struct *sksec_b = sockb->sk->sk_security; + struct sk_security_struct *sksec_a = selinux_sock(socka->sk); + struct sk_security_struct *sksec_b = selinux_sock(sockb->sk); sksec_a->peer_sid = sksec_b->sid; sksec_b->peer_sid = sksec_a->sid; @@ -4408,7 +4408,7 @@ static int selinux_socket_socketpair(struct socket *socka, static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen) { struct sock *sk = sock->sk; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); u16 family; int err; @@ -4540,7 +4540,7 @@ static int selinux_socket_connect_helper(struct socket *sock, struct sockaddr *address, int addrlen) { struct sock *sk = sock->sk; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); int err; err = sock_has_perm(sk, SOCKET__CONNECT); @@ -4711,9 +4711,9 @@ static int selinux_socket_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk) { - struct sk_security_struct *sksec_sock = sock->sk_security; - struct sk_security_struct *sksec_other = other->sk_security; - struct sk_security_struct *sksec_new = newsk->sk_security; + struct sk_security_struct *sksec_sock = selinux_sock(sock); + struct sk_security_struct *sksec_other = selinux_sock(other); + struct sk_security_struct *sksec_new = selinux_sock(newsk); struct common_audit_data ad; struct lsm_network_audit net = {0,}; int err; @@ -4745,8 +4745,8 @@ static int selinux_socket_unix_stream_connect(struct sock *sock, static int selinux_socket_unix_may_send(struct socket *sock, struct socket *other) { - struct sk_security_struct *ssec = sock->sk->sk_security; - struct sk_security_struct *osec = other->sk->sk_security; + struct sk_security_struct *ssec = selinux_sock(sock->sk); + struct sk_security_struct *osec = selinux_sock(other->sk); struct common_audit_data ad; struct lsm_network_audit net = {0,}; @@ -4788,7 +4788,7 @@ static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb, u16 family) { int err = 0; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); u32 sk_sid = sksec->sid; struct common_audit_data ad; struct lsm_network_audit net = {0,}; @@ -4821,7 +4821,7 @@ static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb, static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) { int err; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); u16 family = sk->sk_family; u32 sk_sid = sksec->sid; struct common_audit_data ad; @@ -4889,13 +4889,15 @@ static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) return err; } -static int selinux_socket_getpeersec_stream(struct socket *sock, char __user *optval, - int __user *optlen, unsigned len) +static int selinux_socket_getpeersec_stream(struct socket *sock, + __user char *optval, + __user int *optlen, + unsigned int len) { int err = 0; char *scontext; u32 scontext_len; - struct sk_security_struct *sksec = sock->sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sock->sk); u32 peer_sid = SECSID_NULL; if (sksec->sclass == SECCLASS_UNIX_STREAM_SOCKET || @@ -4955,34 +4957,27 @@ static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff * static int selinux_sk_alloc_security(struct sock *sk, int family, gfp_t priority) { - struct sk_security_struct *sksec; - - sksec = kzalloc(sizeof(*sksec), priority); - if (!sksec) - return -ENOMEM; + struct sk_security_struct *sksec = selinux_sock(sk); sksec->peer_sid = SECINITSID_UNLABELED; sksec->sid = SECINITSID_UNLABELED; sksec->sclass = SECCLASS_SOCKET; selinux_netlbl_sk_security_reset(sksec); - sk->sk_security = sksec; return 0; } static void selinux_sk_free_security(struct sock *sk) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); - sk->sk_security = NULL; selinux_netlbl_sk_security_free(sksec); - kfree(sksec); } static void selinux_sk_clone_security(const struct sock *sk, struct sock *newsk) { - struct sk_security_struct *sksec = sk->sk_security; - struct sk_security_struct *newsksec = newsk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); + struct sk_security_struct *newsksec = selinux_sock(newsk); newsksec->sid = sksec->sid; newsksec->peer_sid = sksec->peer_sid; @@ -4996,7 +4991,7 @@ static void selinux_sk_getsecid(struct sock *sk, u32 *secid) if (!sk) *secid = SECINITSID_ANY_SOCKET; else { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); *secid = sksec->sid; } @@ -5006,7 +5001,7 @@ static void selinux_sock_graft(struct sock *sk, struct socket *parent) { struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(parent)); - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 || sk->sk_family == PF_UNIX) @@ -5021,7 +5016,7 @@ static void selinux_sock_graft(struct sock *sk, struct socket *parent) static int selinux_sctp_assoc_request(struct sctp_endpoint *ep, struct sk_buff *skb) { - struct sk_security_struct *sksec = ep->base.sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(ep->base.sk); struct common_audit_data ad; struct lsm_network_audit net = {0,}; u8 peerlbl_active; @@ -5172,8 +5167,8 @@ static int selinux_sctp_bind_connect(struct sock *sk, int optname, static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk, struct sock *newsk) { - struct sk_security_struct *sksec = sk->sk_security; - struct sk_security_struct *newsksec = newsk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); + struct sk_security_struct *newsksec = selinux_sock(newsk); /* If policy does not support SECCLASS_SCTP_SOCKET then call * the non-sctp clone version. @@ -5190,7 +5185,7 @@ static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk, static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb, struct request_sock *req) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); int err; u16 family = req->rsk_ops->family; u32 connsid; @@ -5211,7 +5206,7 @@ static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb, static void selinux_inet_csk_clone(struct sock *newsk, const struct request_sock *req) { - struct sk_security_struct *newsksec = newsk->sk_security; + struct sk_security_struct *newsksec = selinux_sock(newsk); newsksec->sid = req->secid; newsksec->peer_sid = req->peer_secid; @@ -5228,7 +5223,7 @@ static void selinux_inet_csk_clone(struct sock *newsk, static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb) { u16 family = sk->sk_family; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); /* handle mapped IPv4 packets arriving via IPv6 sockets */ if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP)) @@ -5312,7 +5307,7 @@ static int selinux_tun_dev_attach_queue(void *security) static int selinux_tun_dev_attach(struct sock *sk, void *security) { struct tun_security_struct *tunsec = security; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); /* we don't currently perform any NetLabel based labeling here and it * isn't clear that we would want to do so anyway; while we could apply @@ -5353,7 +5348,7 @@ static int selinux_nlmsg_perm(struct sock *sk, struct sk_buff *skb) int err = 0; u32 perm; struct nlmsghdr *nlh; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); if (skb->len < NLMSG_HDRLEN) { err = -EINVAL; @@ -5494,7 +5489,7 @@ static unsigned int selinux_ip_output(struct sk_buff *skb, return NF_ACCEPT; /* standard practice, label using the parent socket */ - sksec = sk->sk_security; + sksec = selinux_sock(sk); sid = sksec->sid; } else sid = SECINITSID_KERNEL; @@ -5533,7 +5528,7 @@ static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb, if (sk == NULL) return NF_ACCEPT; - sksec = sk->sk_security; + sksec = selinux_sock(sk); ad.type = LSM_AUDIT_DATA_NET; ad.u.net = &net; @@ -5625,7 +5620,7 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, u32 skb_sid; struct sk_security_struct *sksec; - sksec = sk->sk_security; + sksec = selinux_sock(sk); if (selinux_skb_peerlbl_sid(skb, family, &skb_sid)) return NF_DROP; /* At this point, if the returned skb peerlbl is SECSID_NULL @@ -5654,7 +5649,7 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, } else { /* Locally generated packet, fetch the security label from the * associated socket. */ - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); peer_sid = sksec->sid; secmark_perm = PACKET__SEND; } @@ -6633,6 +6628,7 @@ struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = { .lbs_inode = sizeof(struct inode_security_struct), .lbs_ipc = sizeof(struct ipc_security_struct), .lbs_msg_msg = sizeof(struct msg_security_struct), + .lbs_sock = sizeof(struct sk_security_struct), .lbs_superblock = sizeof(struct superblock_security_struct), }; diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index d08d7e5d2f93..29f02b8f8f31 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -194,4 +194,9 @@ static inline struct superblock_security_struct *selinux_superblock( return superblock->s_security + selinux_blob_sizes.lbs_superblock; } +static inline struct sk_security_struct *selinux_sock(const struct sock *sock) +{ + return sock->sk_security + selinux_blob_sizes.lbs_sock; +} + #endif /* _SELINUX_OBJSEC_H_ */ diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index 186e727b737b..c40914a157b7 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -81,7 +82,7 @@ static int selinux_netlbl_sidlookup_cached(struct sk_buff *skb, static struct netlbl_lsm_secattr *selinux_netlbl_sock_genattr(struct sock *sk) { int rc; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct netlbl_lsm_secattr *secattr; if (sksec->nlbl_secattr != NULL) @@ -114,7 +115,7 @@ static struct netlbl_lsm_secattr *selinux_netlbl_sock_getattr( const struct sock *sk, u32 sid) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct netlbl_lsm_secattr *secattr = sksec->nlbl_secattr; if (secattr == NULL) @@ -249,7 +250,7 @@ int selinux_netlbl_skbuff_setsid(struct sk_buff *skb, * being labeled by it's parent socket, if it is just exit */ sk = skb_to_full_sk(skb); if (sk != NULL) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); if (sksec->nlbl_state != NLBL_REQSKB) return 0; @@ -287,7 +288,7 @@ int selinux_netlbl_sctp_assoc_request(struct sctp_endpoint *ep, { int rc; struct netlbl_lsm_secattr secattr; - struct sk_security_struct *sksec = ep->base.sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(ep->base.sk); struct sockaddr *addr; struct sockaddr_in addr4; #if IS_ENABLED(CONFIG_IPV6) @@ -370,7 +371,7 @@ int selinux_netlbl_inet_conn_request(struct request_sock *req, u16 family) */ void selinux_netlbl_inet_csk_clone(struct sock *sk, u16 family) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); if (family == PF_INET) sksec->nlbl_state = NLBL_LABELED; @@ -388,8 +389,8 @@ void selinux_netlbl_inet_csk_clone(struct sock *sk, u16 family) */ void selinux_netlbl_sctp_sk_clone(struct sock *sk, struct sock *newsk) { - struct sk_security_struct *sksec = sk->sk_security; - struct sk_security_struct *newsksec = newsk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); + struct sk_security_struct *newsksec = selinux_sock(newsk); newsksec->nlbl_state = sksec->nlbl_state; } @@ -407,7 +408,7 @@ void selinux_netlbl_sctp_sk_clone(struct sock *sk, struct sock *newsk) int selinux_netlbl_socket_post_create(struct sock *sk, u16 family) { int rc; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct netlbl_lsm_secattr *secattr; if (family != PF_INET && family != PF_INET6) @@ -522,7 +523,7 @@ int selinux_netlbl_socket_setsockopt(struct socket *sock, { int rc = 0; struct sock *sk = sock->sk; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct netlbl_lsm_secattr secattr; if (selinux_netlbl_option(level, optname) && @@ -560,7 +561,7 @@ static int selinux_netlbl_socket_connect_helper(struct sock *sk, struct sockaddr *addr) { int rc; - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); struct netlbl_lsm_secattr *secattr; /* connected sockets are allowed to disconnect when the address family @@ -599,7 +600,7 @@ static int selinux_netlbl_socket_connect_helper(struct sock *sk, int selinux_netlbl_socket_connect_locked(struct sock *sk, struct sockaddr *addr) { - struct sk_security_struct *sksec = sk->sk_security; + struct sk_security_struct *sksec = selinux_sock(sk); if (sksec->nlbl_state != NLBL_REQSKB && sksec->nlbl_state != NLBL_CONNLABELED) diff --git a/security/smack/smack.h b/security/smack/smack.h index caecbcba9942..4ac4bf3310d7 100644 --- a/security/smack/smack.h +++ b/security/smack/smack.h @@ -375,6 +375,11 @@ static inline struct smack_known **smack_ipc(const struct kern_ipc_perm *ipc) return ipc->security + smack_blob_sizes.lbs_ipc; } +static inline struct socket_smack *smack_sock(const struct sock *sock) +{ + return sock->sk_security + smack_blob_sizes.lbs_sock; +} + static inline struct superblock_smack *smack_superblock( const struct super_block *superblock) { diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 807eff2ccce9..fd69e1bd841b 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -1439,7 +1439,7 @@ static int smack_inode_getsecurity(struct inode *inode, if (sock == NULL || sock->sk == NULL) return -EOPNOTSUPP; - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); if (strcmp(name, XATTR_SMACK_IPIN) == 0) isp = ssp->smk_in; @@ -1821,7 +1821,7 @@ static int smack_file_receive(struct file *file) if (inode->i_sb->s_magic == SOCKFS_MAGIC) { sock = SOCKET_I(inode); - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); tsp = smack_cred(current_cred()); /* * If the receiving process can't write to the @@ -2231,11 +2231,7 @@ static void smack_task_to_inode(struct task_struct *p, struct inode *inode) static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags) { struct smack_known *skp = smk_of_current(); - struct socket_smack *ssp; - - ssp = kzalloc(sizeof(struct socket_smack), gfp_flags); - if (ssp == NULL) - return -ENOMEM; + struct socket_smack *ssp = smack_sock(sk); /* * Sockets created by kernel threads receive web label. @@ -2249,11 +2245,10 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags) } ssp->smk_packet = NULL; - sk->sk_security = ssp; - return 0; } +#ifdef SMACK_IPV6_PORT_LABELING /** * smack_sk_free_security - Free a socket blob * @sk: the socket @@ -2262,7 +2257,6 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags) */ static void smack_sk_free_security(struct sock *sk) { -#ifdef SMACK_IPV6_PORT_LABELING struct smk_port_label *spp; if (sk->sk_family == PF_INET6) { @@ -2275,9 +2269,8 @@ static void smack_sk_free_security(struct sock *sk) } rcu_read_unlock(); } -#endif - kfree(sk->sk_security); } +#endif /** * smack_ipv4host_label - check host based restrictions @@ -2395,7 +2388,7 @@ static struct smack_known *smack_ipv6host_label(struct sockaddr_in6 *sip) static int smack_netlabel(struct sock *sk, int labeled) { struct smack_known *skp; - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); int rc = 0; /* @@ -2440,7 +2433,7 @@ static int smack_netlabel_send(struct sock *sk, struct sockaddr_in *sap) int rc; int sk_lbl; struct smack_known *hkp; - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); struct smk_audit_info ad; rcu_read_lock(); @@ -2516,7 +2509,7 @@ static void smk_ipv6_port_label(struct socket *sock, struct sockaddr *address) { struct sock *sk = sock->sk; struct sockaddr_in6 *addr6; - struct socket_smack *ssp = sock->sk->sk_security; + struct socket_smack *ssp = smack_sock(sock->sk); struct smk_port_label *spp; unsigned short port = 0; @@ -2603,7 +2596,7 @@ static int smk_ipv6_port_check(struct sock *sk, struct sockaddr_in6 *address, int act) { struct smk_port_label *spp; - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); struct smack_known *skp = NULL; unsigned short port; struct smack_known *object; @@ -2697,7 +2690,7 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name, if (sock == NULL || sock->sk == NULL) return -EOPNOTSUPP; - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); if (strcmp(name, XATTR_SMACK_IPIN) == 0) ssp->smk_in = skp; @@ -2745,7 +2738,7 @@ static int smack_socket_post_create(struct socket *sock, int family, * Sockets created by kernel threads receive web label. */ if (unlikely(current->flags & PF_KTHREAD)) { - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); ssp->smk_in = &smack_known_web; ssp->smk_out = &smack_known_web; } @@ -2770,8 +2763,8 @@ static int smack_socket_post_create(struct socket *sock, int family, static int smack_socket_socketpair(struct socket *socka, struct socket *sockb) { - struct socket_smack *asp = socka->sk->sk_security; - struct socket_smack *bsp = sockb->sk->sk_security; + struct socket_smack *asp = smack_sock(socka->sk); + struct socket_smack *bsp = smack_sock(sockb->sk); asp->smk_packet = bsp->smk_out; bsp->smk_packet = asp->smk_out; @@ -2825,7 +2818,7 @@ static int smack_socket_connect(struct socket *sock, struct sockaddr *sap, return 0; #ifdef SMACK_IPV6_SECMARK_LABELING - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); #endif switch (sock->sk->sk_family) { @@ -3566,9 +3559,9 @@ static int smack_unix_stream_connect(struct sock *sock, { struct smack_known *skp; struct smack_known *okp; - struct socket_smack *ssp = sock->sk_security; - struct socket_smack *osp = other->sk_security; - struct socket_smack *nsp = newsk->sk_security; + struct socket_smack *ssp = smack_sock(sock); + struct socket_smack *osp = smack_sock(other); + struct socket_smack *nsp = smack_sock(newsk); struct smk_audit_info ad; int rc = 0; #ifdef CONFIG_AUDIT @@ -3614,8 +3607,8 @@ static int smack_unix_stream_connect(struct sock *sock, */ static int smack_unix_may_send(struct socket *sock, struct socket *other) { - struct socket_smack *ssp = sock->sk->sk_security; - struct socket_smack *osp = other->sk->sk_security; + struct socket_smack *ssp = smack_sock(sock->sk); + struct socket_smack *osp = smack_sock(other->sk); struct smk_audit_info ad; int rc; @@ -3652,7 +3645,7 @@ static int smack_socket_sendmsg(struct socket *sock, struct msghdr *msg, struct sockaddr_in6 *sap = (struct sockaddr_in6 *) msg->msg_name; #endif #ifdef SMACK_IPV6_SECMARK_LABELING - struct socket_smack *ssp = sock->sk->sk_security; + struct socket_smack *ssp = smack_sock(sock->sk); struct smack_known *rsp; #endif int rc = 0; @@ -3817,7 +3810,7 @@ static int smk_skb_to_addr_ipv6(struct sk_buff *skb, struct sockaddr_in6 *sip) static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) { struct netlbl_lsm_secattr secattr; - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); struct smack_known *skp = NULL; int rc = 0; struct smk_audit_info ad; @@ -3934,7 +3927,7 @@ static int smack_socket_getpeersec_stream(struct socket *sock, int slen = 1; int rc = 0; - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); if (ssp->smk_packet != NULL) { rcp = ssp->smk_packet->smk_known; slen = strlen(rcp) + 1; @@ -3984,7 +3977,7 @@ static int smack_socket_getpeersec_dgram(struct socket *sock, switch (family) { case PF_UNIX: - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); s = ssp->smk_out->smk_secid; break; case PF_INET: @@ -3997,7 +3990,7 @@ static int smack_socket_getpeersec_dgram(struct socket *sock, * Translate what netlabel gave us. */ if (sock != NULL && sock->sk != NULL) - ssp = sock->sk->sk_security; + ssp = smack_sock(sock->sk); netlbl_secattr_init(&secattr); rc = netlbl_skbuff_getattr(skb, family, &secattr); if (rc == 0) { @@ -4035,7 +4028,7 @@ static void smack_sock_graft(struct sock *sk, struct socket *parent) (sk->sk_family != PF_INET && sk->sk_family != PF_INET6)) return; - ssp = sk->sk_security; + ssp = smack_sock(sk); ssp->smk_in = skp; ssp->smk_out = skp; /* cssp->smk_packet is already set in smack_inet_csk_clone() */ @@ -4055,7 +4048,7 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb, { u16 family = sk->sk_family; struct smack_known *skp; - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); struct netlbl_lsm_secattr secattr; struct sockaddr_in addr; struct iphdr *hdr; @@ -4154,7 +4147,7 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb, static void smack_inet_csk_clone(struct sock *sk, const struct request_sock *req) { - struct socket_smack *ssp = sk->sk_security; + struct socket_smack *ssp = smack_sock(sk); struct smack_known *skp; if (req->peer_secid != 0) { @@ -4558,6 +4551,7 @@ struct lsm_blob_sizes smack_blob_sizes __lsm_ro_after_init = { .lbs_inode = sizeof(struct inode_smack), .lbs_ipc = sizeof(struct smack_known *), .lbs_msg_msg = sizeof(struct smack_known *), + .lbs_sock = sizeof(struct socket_smack), .lbs_superblock = sizeof(struct superblock_smack), }; @@ -4667,7 +4661,9 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(socket_getpeersec_stream, smack_socket_getpeersec_stream), LSM_HOOK_INIT(socket_getpeersec_dgram, smack_socket_getpeersec_dgram), LSM_HOOK_INIT(sk_alloc_security, smack_sk_alloc_security), +#ifdef SMACK_IPV6_PORT_LABELING LSM_HOOK_INIT(sk_free_security, smack_sk_free_security), +#endif LSM_HOOK_INIT(sock_graft, smack_sock_graft), LSM_HOOK_INIT(inet_conn_request, smack_inet_conn_request), LSM_HOOK_INIT(inet_csk_clone, smack_inet_csk_clone), diff --git a/security/smack/smack_netfilter.c b/security/smack/smack_netfilter.c index e36d17835d4f..701a1cc1bdcc 100644 --- a/security/smack/smack_netfilter.c +++ b/security/smack/smack_netfilter.c @@ -31,8 +31,8 @@ static unsigned int smack_ipv6_output(void *priv, struct socket_smack *ssp; struct smack_known *skp; - if (sk && sk->sk_security) { - ssp = sk->sk_security; + if (sk && smack_sock(sk)) { + ssp = smack_sock(sk); skp = ssp->smk_out; skb->secmark = skp->smk_secid; } @@ -49,8 +49,8 @@ static unsigned int smack_ipv4_output(void *priv, struct socket_smack *ssp; struct smack_known *skp; - if (sk && sk->sk_security) { - ssp = sk->sk_security; + if (sk && smack_sock(sk)) { + ssp = smack_sock(sk); skp = ssp->smk_out; skb->secmark = skp->smk_secid; } From patchwork Tue Apr 9 19:17:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891999 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 35D261800 for ; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 20DAE288BD for ; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 15AA028938; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 51787288BD for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726686AbfDITTC (ORCPT ); Tue, 9 Apr 2019 15:19:02 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:33078 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726655AbfDITS7 (ORCPT ); Tue, 9 Apr 2019 15:18:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837538; bh=dF+9lBJ8wYV5xYvHfxtglumJAG1aS1bgW4kXIJ5xz2c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=E/yfSZBdIcpyyXHi+H20/i/2cDpqnp/RacXMmSv9nTNKgN/QRY9LkrnZIz+UY2thYPiDPJWFdCSoGJcrQQx+Nd+W8ClEg3umynI0NlbC7fvi4DoIzlv0WrHH5NSK1TGEA0R6SfjJPIsA0T+dqo7fUMTT2W9fE6VnS/sYcbDgC3hvUUQ6aGjPphv09pyE8Ha111SAYOvKBM1j2pnXI68m3qcMvGAly+LLZrTXz3ooSZKK9/2V7zKhbp4hT5CIZHZdcOHkTolXyzvvIwQk09HhbWj/JVIL+6TecaJ1x5zdqnj/yJgb2E0ejOqPlbCUElwxMFod01kpKgAQmo/Oy99dhA== X-YMail-OSG: 1aGKCocVM1kY1nx43n3W9S41KjnscVHSRonDNJMOzG9NKAhmHv4chQdM9Y69nll e6AQTfWCWlkxHBDeLj1bhMmZjVetPIkviRfz5IG7exGkXjGZ6qhiCFGJ7KxvhYA7_8ebRuk8H5Yd 0ic9cgbh7bp4iATdg36ex7L2VljLK0OlVjurNspMo02n65qDVnOq4IbJZZYe4Y8r6_xbAs_s01Ve VrskQ_nAPEsYmldUBiEuATwIQ9qtEbYX0yIJB00An25G63wiKfXAnj2k5P4L04QMReG.s5qrShMy fmVP6YDauaHhkeic5VBlAgOhWVrX6SzzSITCN794_Tme6KW3SIUpam9p3F2o8iws65j7XKHuh3jH hxJoEYCqil43XSr4rdhaTojiICwLILxhT.X31YzR9xM_fob9EqbxZnSFmyfbyXqZipYimjPIs4nD owg9_l4odUSUio5xQ6xFqZI7cbJ1DlA000HEBgX3mfZ2N40vSpSTnXOlzoRSNZs3JAWVkAYXfBE0 rzBZNvQsR.WoJO.DeLh0ZT2o.cV3_QkjmJ3H08gC5gXokAofHIfMlXOytd53e3EYWr7hhlmZzu2w nsJOd3pnKp6erD6kUtinASjjgWnsRcxNAJLQBez9Z5alLIgoLmY1vIIfgsmboUQJeBlBELYh9lXg QYjrGKbVphQPH1NdHr86wM9fn8NEjoOpY9v1XM5YUlHJxeFPUtLuU8EtHiLPMcLc4STvLVxHjY7U SRcqxW5EPlVlYFR9BElwiy_ysj5IDjwgQ5.NIBQLSTOzPrs9qtqpx1xugv3BxBJvy4lkI4BH6SOv 2JcItCPjuuhaEG.KKH5s2K4O1whyv9zb2piiKMKOsJoAfrRkFidT09aZV9gsdUYnm2aJFM7sZMPh zlAugIl7dYIKLbMeHchge8tH4WCAwYsDrpUpjbIa4rq5yDWBK4L12BKqUMRWH2Qee5OympjLZmZV F6dF97f6ku1RdIMt6W1Y5shwXpDvVcYO6X_2qOSXjKueW7sl9tvArx1I7b_Pmr_nLIl82BQqz4oQ Qiv__llV5Bqoj_GhCcsQdxsxDeGvNkaTTep6XnMcUZkMeOnjjQwvqkEvapwger159H4xvkhCN6qI vGro3hRgqBuq31BtOulz8RIvyqcXK4Ub9jdJeREfkJ6AHdy5kTjQ- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:58 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:55 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 03/59] LSM: Infrastructure management of the key security blob Date: Tue, 9 Apr 2019 12:17:52 -0700 Message-Id: <20190409191848.1380-4-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Casey Schaufler Move management of the key->security blob out of the individual security modules and into the security infrastructure. Instead of allocating the blobs from within the modules the modules tell the infrastructure how much space is required, and the space is allocated there. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 1 + security/security.c | 40 ++++++++++++++++++++++++++++++- security/selinux/hooks.c | 23 +++++------------- security/selinux/include/objsec.h | 7 ++++++ security/smack/smack.h | 7 ++++++ security/smack/smack_lsm.c | 33 ++++++++++++------------- 6 files changed, 75 insertions(+), 36 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 1dbed888dab0..9e3d593a1ec3 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2058,6 +2058,7 @@ struct lsm_blob_sizes { int lbs_sock; int lbs_superblock; int lbs_ipc; + int lbs_key; int lbs_msg_msg; int lbs_task; }; diff --git a/security/security.c b/security/security.c index e32b7180282e..d05f00a40e82 100644 --- a/security/security.c +++ b/security/security.c @@ -172,6 +172,9 @@ static void __init lsm_set_blob_sizes(struct lsm_blob_sizes *needed) blob_sizes.lbs_inode = sizeof(struct rcu_head); lsm_set_blob_size(&needed->lbs_inode, &blob_sizes.lbs_inode); lsm_set_blob_size(&needed->lbs_ipc, &blob_sizes.lbs_ipc); +#ifdef CONFIG_KEYS + lsm_set_blob_size(&needed->lbs_key, &blob_sizes.lbs_key); +#endif lsm_set_blob_size(&needed->lbs_msg_msg, &blob_sizes.lbs_msg_msg); lsm_set_blob_size(&needed->lbs_sock, &blob_sizes.lbs_sock); lsm_set_blob_size(&needed->lbs_superblock, &blob_sizes.lbs_superblock); @@ -307,6 +310,9 @@ static void __init ordered_lsm_init(void) init_debug("file blob size = %d\n", blob_sizes.lbs_file); init_debug("inode blob size = %d\n", blob_sizes.lbs_inode); init_debug("ipc blob size = %d\n", blob_sizes.lbs_ipc); +#ifdef CONFIG_KEYS + init_debug("key blob size = %d\n", blob_sizes.lbs_key); +#endif /* CONFIG_KEYS */ init_debug("msg_msg blob size = %d\n", blob_sizes.lbs_msg_msg); init_debug("sock blob size = %d\n", blob_sizes.lbs_sock); init_debug("superblock blob size = %d\n", blob_sizes.lbs_superblock); @@ -573,6 +579,29 @@ static int lsm_ipc_alloc(struct kern_ipc_perm *kip) return 0; } +#ifdef CONFIG_KEYS +/** + * lsm_key_alloc - allocate a composite key blob + * @key: the key that needs a blob + * + * Allocate the key blob for all the modules + * + * Returns 0, or -ENOMEM if memory can't be allocated. + */ +int lsm_key_alloc(struct key *key) +{ + if (blob_sizes.lbs_key == 0) { + key->security = NULL; + return 0; + } + + key->security = kzalloc(blob_sizes.lbs_key, GFP_KERNEL); + if (key->security == NULL) + return -ENOMEM; + return 0; +} +#endif /* CONFIG_KEYS */ + /** * lsm_msg_msg_alloc - allocate a composite msg_msg blob * @mp: the msg_msg that needs a blob @@ -2339,12 +2368,21 @@ EXPORT_SYMBOL(security_skb_classify_flow); int security_key_alloc(struct key *key, const struct cred *cred, unsigned long flags) { - return call_int_hook(key_alloc, 0, key, cred, flags); + int rc = lsm_key_alloc(key); + + if (unlikely(rc)) + return rc; + rc = call_int_hook(key_alloc, 0, key, cred, flags); + if (unlikely(rc)) + security_key_free(key); + return rc; } void security_key_free(struct key *key) { call_void_hook(key_free, key); + kfree(key->security); + key->security = NULL; } int security_key_permission(key_ref_t key_ref, diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index f38a6f484613..ee840fecfebb 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6353,11 +6353,7 @@ static int selinux_key_alloc(struct key *k, const struct cred *cred, unsigned long flags) { const struct task_security_struct *tsec; - struct key_security_struct *ksec; - - ksec = kzalloc(sizeof(struct key_security_struct), GFP_KERNEL); - if (!ksec) - return -ENOMEM; + struct key_security_struct *ksec = selinux_key(k); tsec = selinux_cred(cred); if (tsec->keycreate_sid) @@ -6365,18 +6361,9 @@ static int selinux_key_alloc(struct key *k, const struct cred *cred, else ksec->sid = tsec->sid; - k->security = ksec; return 0; } -static void selinux_key_free(struct key *k) -{ - struct key_security_struct *ksec = k->security; - - k->security = NULL; - kfree(ksec); -} - static int selinux_key_permission(key_ref_t key_ref, const struct cred *cred, unsigned perm) @@ -6394,7 +6381,7 @@ static int selinux_key_permission(key_ref_t key_ref, sid = cred_sid(cred); key = key_ref_to_ptr(key_ref); - ksec = key->security; + ksec = selinux_key(key); return avc_has_perm(&selinux_state, sid, ksec->sid, SECCLASS_KEY, perm, NULL); @@ -6402,7 +6389,7 @@ static int selinux_key_permission(key_ref_t key_ref, static int selinux_key_getsecurity(struct key *key, char **_buffer) { - struct key_security_struct *ksec = key->security; + struct key_security_struct *ksec = selinux_key(key); char *context = NULL; unsigned len; int rc; @@ -6627,6 +6614,9 @@ struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = { .lbs_file = sizeof(struct file_security_struct), .lbs_inode = sizeof(struct inode_security_struct), .lbs_ipc = sizeof(struct ipc_security_struct), +#ifdef CONFIG_KEYS + .lbs_key = sizeof(struct key_security_struct), +#endif /* CONFIG_KEYS */ .lbs_msg_msg = sizeof(struct msg_security_struct), .lbs_sock = sizeof(struct sk_security_struct), .lbs_superblock = sizeof(struct superblock_security_struct), @@ -6842,7 +6832,6 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = { #ifdef CONFIG_KEYS LSM_HOOK_INIT(key_alloc, selinux_key_alloc), - LSM_HOOK_INIT(key_free, selinux_key_free), LSM_HOOK_INIT(key_permission, selinux_key_permission), LSM_HOOK_INIT(key_getsecurity, selinux_key_getsecurity), #endif diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index 29f02b8f8f31..3b78aa4ee98f 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -194,6 +194,13 @@ static inline struct superblock_security_struct *selinux_superblock( return superblock->s_security + selinux_blob_sizes.lbs_superblock; } +#ifdef CONFIG_KEYS +static inline struct key_security_struct *selinux_key(const struct key *key) +{ + return key->security + selinux_blob_sizes.lbs_key; +} +#endif /* CONFIG_KEYS */ + static inline struct sk_security_struct *selinux_sock(const struct sock *sock) { return sock->sk_security + selinux_blob_sizes.lbs_sock; diff --git a/security/smack/smack.h b/security/smack/smack.h index 4ac4bf3310d7..7cc3a3382fee 100644 --- a/security/smack/smack.h +++ b/security/smack/smack.h @@ -386,6 +386,13 @@ static inline struct superblock_smack *smack_superblock( return superblock->s_security + smack_blob_sizes.lbs_superblock; } +#ifdef CONFIG_KEYS +static inline struct smack_known **smack_key(const struct key *key) +{ + return key->security + smack_blob_sizes.lbs_key; +} +#endif /* CONFIG_KEYS */ + /* * Is the directory transmuting? */ diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index fd69e1bd841b..e9560b078efe 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4179,23 +4179,13 @@ static void smack_inet_csk_clone(struct sock *sk, static int smack_key_alloc(struct key *key, const struct cred *cred, unsigned long flags) { + struct smack_known **blob = smack_key(key); struct smack_known *skp = smk_of_task(smack_cred(cred)); - key->security = skp; + *blob = skp; return 0; } -/** - * smack_key_free - Clear the key security blob - * @key: the object - * - * Clear the blob pointer - */ -static void smack_key_free(struct key *key) -{ - key->security = NULL; -} - /** * smack_key_permission - Smack access on a key * @key_ref: gets to the object @@ -4208,6 +4198,8 @@ static void smack_key_free(struct key *key) static int smack_key_permission(key_ref_t key_ref, const struct cred *cred, unsigned perm) { + struct smack_known **blob; + struct smack_known *skp; struct key *keyp; struct smk_audit_info ad; struct smack_known *tkp = smk_of_task(smack_cred(cred)); @@ -4227,7 +4219,9 @@ static int smack_key_permission(key_ref_t key_ref, * If the key hasn't been initialized give it access so that * it may do so. */ - if (keyp->security == NULL) + blob = smack_key(keyp); + skp = *blob; + if (skp == NULL) return 0; /* * This should not occur @@ -4247,8 +4241,8 @@ static int smack_key_permission(key_ref_t key_ref, request |= MAY_READ; if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR)) request |= MAY_WRITE; - rc = smk_access(tkp, keyp->security, request, &ad); - rc = smk_bu_note("key access", tkp, keyp->security, request, rc); + rc = smk_access(tkp, skp, request, &ad); + rc = smk_bu_note("key access", tkp, skp, request, rc); return rc; } @@ -4263,11 +4257,12 @@ static int smack_key_permission(key_ref_t key_ref, */ static int smack_key_getsecurity(struct key *key, char **_buffer) { - struct smack_known *skp = key->security; + struct smack_known **blob = smack_key(key); + struct smack_known *skp = *blob; size_t length; char *copy; - if (key->security == NULL) { + if (skp == NULL) { *_buffer = NULL; return 0; } @@ -4550,6 +4545,9 @@ struct lsm_blob_sizes smack_blob_sizes __lsm_ro_after_init = { .lbs_file = sizeof(struct smack_known *), .lbs_inode = sizeof(struct inode_smack), .lbs_ipc = sizeof(struct smack_known *), +#ifdef CONFIG_KEYS + .lbs_key = sizeof(struct smack_known *), +#endif /* CONFIG_KEYS */ .lbs_msg_msg = sizeof(struct smack_known *), .lbs_sock = sizeof(struct socket_smack), .lbs_superblock = sizeof(struct superblock_smack), @@ -4671,7 +4669,6 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = { /* key management security hooks */ #ifdef CONFIG_KEYS LSM_HOOK_INIT(key_alloc, smack_key_alloc), - LSM_HOOK_INIT(key_free, smack_key_free), LSM_HOOK_INIT(key_permission, smack_key_permission), LSM_HOOK_INIT(key_getsecurity, smack_key_getsecurity), #endif /* CONFIG_KEYS */ From patchwork Tue Apr 9 19:17:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892003 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 691081805 for ; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 556AB288BD for ; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 49DB228924; Tue, 9 Apr 2019 19:19:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E6048288D0 for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726682AbfDITTC (ORCPT ); Tue, 9 Apr 2019 15:19:02 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:40785 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726686AbfDITTA (ORCPT ); Tue, 9 Apr 2019 15:19:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837539; bh=is2u5Y0DRwzBY1W00Se6/XMCwBAVUpvFG8LStFYaqTs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=brdKXOVH4ZGG9eDCWfv7cw0wgGCNJr55iRLlPjwdiZ8vW4imddWLAsdPHyCLI6HXpXtxByGCQ+hz2NSyQpWSM4sfVWUYCiBZejD3w2Ay0fGc5guwy2LA2M/yX5dp4cLEhlTG6+q6RIfsN+9rKiQpo6NjspClIi8b25DAI9x8PQuxGNt95+DX3lmalFb47xfdTFXVbl2sHUMqvw/8Gn7et6gxBzi6CSsrnH7y76qUwQUAQWosYqN/xVPisqpqUl4LdKNGsrOhwM3wk/I+Z9RO7OtZtlWR1DNjK/p4qdtM+/wJj8oQNAiPQjSoxFBTz7tDI5WB40GGXt4vMXDulxw7Pg== X-YMail-OSG: wa1_NfIVM1lo.t5e66ckfC52nugyNo1vysEdojKWWT_N_Fc8KaP3R.uN0c.i5tZ 3qXIfVynPAngUC6rHUoi6nasYbnfbXTaVrrj6j6Ss0y1pBnHXWfuOhBAQLiGZ6i0A7njEv1mXvCb IrfTpJS8pwvkuFKWAlsCT5k1pbEeIXrUYqeyaKg_H3bKBypDVP6xRC6tjnLQe5qnlunePaG.sXrR Bh1gWuU.HNKfeVvNY_4SBnrZXOGqxPdpIRgMLf.sTHFvKJdp6cR_ZAydWIn6LNgN5uvdR4MYqJCp XOWpK1cVhZgAwM1rGtCRGVx1yJxAo0QrDb.ld7MKiMGDkculWYYxNso6zQHBzamxNAJ1b_ZpG8rT AFZS_9tXVhJ0QziW_.zwwV40dzOYOTIPdaO82xgn1S2ZfW8bCiZ8C1djXdLiaN1yhej2qRc8SZtG hxJXNwfKQCBgOkW1UhR7XgUCwx9YRipSq1_4J47CxKuKM6nYRvPRfToNPWkG9qE0pmMl_1IQvyZO Iajy0jzhkW61lM7diVAJ0nLvrVtkAdZ29xE0A76Z64we6YJ2ap4KTo7KVDWMLN2jWp6jgMNIXizM zcaqcfZHiC2uCK6P.FgpiftEzuINnEHtoSKZeAxjqVHi3ZZv5rQp0ZXY9Vk4qebTOU8h8jMZb1E6 zHBP40Ld3yiMbYQfsE27jc7qsQQUTmubLlFbuYDx8u.LjZ7NlMRymbbWlXSUGwZIQwkmiKOJZS7b x.EaC307AiEi9dA7zdZuhYT2wPSl.y6IjlItQZGwVMKVtFC8N8S_Gr..Mx09.WGA_JQo9xaujQKr iI.6jt2cVOpcct6Ty8tLk3U0mValyK7NjUHz5r9e.33Z5J2AC943FB8qlAMZRfKDVyXDd0Pl5jmI 4s5W1hqH47KkY7ua9gM4EREXl2iGjM0lyrtS6tKCBgkknEvwr6B9BsxEZ9RNcl3BGoAjoVCJoeiw Pf1oe.UrDKPAs1VHOvepSTxr5iIX_t2eRQEKl2jdHZ6WvdUB.iO7UZNNO4VOkjkY1LRslECJ9tVU NDve.8Is9iPSwoGh1QUNN.t0gcweVTz.GLp.TH1KpHUg.zjqfgvXGvItK4D1Qnv45T1Yk78ufywu JWVQfBPyuFtedWBzJLJZfE9.UNfeHGQJPt.z7p.obWKcILnTgTlG3 Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:59 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:56 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 04/59] LSM: Create an lsm_export data structure. Date: Tue, 9 Apr 2019 12:17:53 -0700 Message-Id: <20190409191848.1380-5-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP When more than one security module is exporting data to audit and networking sub-systems a single 32 bit integer is no longer sufficient to represent the data. Add a structure to be used instead. Signed-off-by: Casey Schaufler --- include/linux/security.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/linux/security.h b/include/linux/security.h index 49f2685324b0..81f9f79f9a1e 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -76,6 +76,18 @@ enum lsm_event { LSM_POLICY_CHANGE, }; +/* Data exported by the security modules */ +struct lsm_export { + u32 selinux; + u32 smack; + u32 apparmor; + u32 flags; +}; +#define LSM_EXPORT_NONE 0x00 +#define LSM_EXPORT_SELINUX 0x01 +#define LSM_EXPORT_SMACK 0x02 +#define LSM_EXPORT_APPARMOR 0x04 + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts); From patchwork Tue Apr 9 19:17:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891991 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2DDDB1800 for ; Tue, 9 Apr 2019 19:19:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 21F40288BD for ; Tue, 9 Apr 2019 19:19:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1689228938; Tue, 9 Apr 2019 19:19:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 89B61288BE for ; Tue, 9 Apr 2019 19:19:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726574AbfDITS7 (ORCPT ); Tue, 9 Apr 2019 15:18:59 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:42208 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726554AbfDITS7 (ORCPT ); Tue, 9 Apr 2019 15:18:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837538; bh=NZEtztwTT91pajlXg+jbP5POdRvcqe1ikLbatbSvXaQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=jybyOzvS7Yqlnv4Bf6PoHOSO2FH1xm3/n/y2hQO99QjsIKgaYSF19NvGXqYqKUaf6qIFRhMujagSL0AkboiuAvOo1e02gofe5nfNHl/LNsKhzCDu/HUdnHusAlE/rQ1ivivAB5RwnrdU1cbH1yxWbx0/DetWilsPbh024h6m6jy+aYVNwO8Y4Mr1aMQt1eM9YcqhR0iSQYcMWqLv6wyXulotKtXkfHN1kOGFwTlw2jV97jVIFE7LD6uR+MDu9KX/6It7tluIWO6joNOaKM2+rR3rmxcpKmGE2601mD0qnYgO1Lveo2ZyGxEGB7l5PKNcKERsCjl/XQp2I8rLxOQmpA== X-YMail-OSG: AYG0U8cVM1nd.ZfArSJ0efdVT.1K0whrS_jKTwcKH3alauClo.Bl22oIej2LsEZ _ctQzw92kqaeURjaW.hejMXegYRnpLn9WiBiD_rVh6wXRZ_HpGPmE.d8H8GVqOs.dnf9xMeKVC3Q 6sl8pmYjA8MYi0VqHFRJ9CzM.2D3QkOTVGSAZlbKc09XsZjgOo3VZbnLRChTGs9aCLJBL37IxVVH IZHwHePAasD_k.BeQk2t7pmJTrwxiQBBbfM6sn6ebJKY2M9NkRRg2BH13vLpvW3AaoT_CVegl3.m tKRnPWIIg6f54KAWB1I81KbMMv1QEA.tizRL47GKt13ajiBL2sX6ybIwWUWEi.FK4qzQxd8MRvL0 W7sWWRqKJh0d3y8wyBHyAyxu7YXbBcGxxtQ5WG9OkWKe5SMyByHAiDGnx7kXlf.X08lwBCgkT6p9 twO2Io0cwjR47nYRN3d_OzZSEy6EaPTyGjvlq6ZAGArySdGtANY3swlHMIN_5TtrXDq7Xv8juLH5 xV7jwDK.PPP.IbWg.1d9edAUKScElg4SVAq7mP9azm1KKY7XdTgZ1CpOn31rKUfJ3rIJsSm8dZOX Hht4_5vt4_djmC1lHKuBt2a.Xp16OxhZ2N2HYqsEHMiO3O4gSskVeFFW9HwLF7JBAg5IyRTT4id2 lib4QkjRPylYdTOe6eT.5oXEjQxfyuagw.ij1m0ilZ1Jb84SFfCgkfCsj3prHr03G2x_tKWlXKIi ZXgTPLAef6UeGXRn3uLG5RlGPvZGlZDx2uAt9zMNz_OdppQUZWDLJhV4ELGuULJFePml378IzXUV eGaxqqnCra0.d9lQyO7DZMLYWiy90_PZDsldjN3lbBPEV_CpvLeT.QvAI9D4UJuhG7VDh.h_wZKT Rw147eHa2axiMNbiNZPpGdA8nlWk.tM1qmha5iqWgsGV0NJ2c34ZHMOFxBEIkfhr.QwjwFeh7CIM HWST6E_l610L7xJdi4NM7_zQj79RxuR5sklJiyprO96u5oibL_H7my6SZ3_1bGhTI_TkCIZQG_vu bTP6yYEtkG5PMylPmK02dtWu0A.LpvZiuNXH2piz9qC8ZjDXaVi3a4i0w7RAik0xx7t0ykhbM13f vMB2in69O9rd3AtzMY.Ocq6_cyhUa_SuGiE6OHUoZm2BzxLTf8prtuA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:58 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:56 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 05/59] LSM: Use lsm_export in the inode_getsecid hooks Date: Tue, 9 Apr 2019 12:17:54 -0700 Message-Id: <20190409191848.1380-6-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the inode_getsecid hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_inode_getsecid() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 4 ++-- include/linux/security.h | 5 +++++ security/security.c | 35 ++++++++++++++++++++++++++++++++++- security/selinux/hooks.c | 21 ++++++++++++++++----- security/smack/smack_lsm.c | 13 +++++++++++-- 5 files changed, 68 insertions(+), 10 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 9e3d593a1ec3..baeb83ef487d 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -425,7 +425,7 @@ * @inode_getsecid: * Get the secid associated with the node. * @inode contains a pointer to the inode. - * @secid contains a pointer to the location where result will be saved. + * @data contains a pointer to the location where result will be saved. * In case of failure, @secid will be set to zero. * @inode_copy_up: * A file is about to be copied up from lower layer to upper layer of @@ -1574,7 +1574,7 @@ union security_list_options { int flags); int (*inode_listsecurity)(struct inode *inode, char *buffer, size_t buffer_size); - void (*inode_getsecid)(struct inode *inode, u32 *secid); + void (*inode_getsecid)(struct inode *inode, struct lsm_export *data); int (*inode_copy_up)(struct dentry *src, struct cred **new); int (*inode_copy_up_xattr)(const char *name); diff --git a/include/linux/security.h b/include/linux/security.h index 81f9f79f9a1e..fb19f41d630b 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -88,6 +88,11 @@ struct lsm_export { #define LSM_EXPORT_SMACK 0x02 #define LSM_EXPORT_APPARMOR 0x04 +static inline void lsm_export_init(struct lsm_export *l) +{ + memset(l, 0, sizeof(*l)); +} + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts); diff --git a/security/security.c b/security/security.c index d05f00a40e82..a1f28a5e582b 100644 --- a/security/security.c +++ b/security/security.c @@ -712,6 +712,36 @@ int lsm_superblock_alloc(struct super_block *sb) RC; \ }) +/** + * lsm_export_secid - pull the useful secid out of a lsm_export + * @data: the containing data structure + * @secid: where to put the one that matters. + * + * Shim that will disappear when all lsm_export conversions are done. + */ +static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) +{ + switch (data->flags) { + case LSM_EXPORT_NONE: + *secid = 0; + break; + case LSM_EXPORT_SELINUX: + *secid = data->selinux; + break; + case LSM_EXPORT_SMACK: + *secid = data->smack; + break; + case LSM_EXPORT_APPARMOR: + *secid = data->apparmor; + break; + default: + pr_warn("%s flags=0x%u - not a valid set\n", __func__, + data->flags); + *secid = 0; + break; + } +} + /* Security operations */ int security_binder_set_context_mgr(struct task_struct *mgr) @@ -1389,7 +1419,10 @@ EXPORT_SYMBOL(security_inode_listsecurity); void security_inode_getsecid(struct inode *inode, u32 *secid) { - call_void_hook(inode_getsecid, inode, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + call_void_hook(inode_getsecid, inode, &data); + lsm_export_secid(&data, secid); } int security_inode_copy_up(struct dentry *src, struct cred **new) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index ee840fecfebb..0e31be22d9bb 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -213,6 +213,15 @@ static void cred_init_security(void) tsec->osid = tsec->sid = SECINITSID_KERNEL; } +/* + * Set the SELinux secid in an lsm_export structure + */ +static inline void selinux_export_secid(struct lsm_export *l, u32 secid) +{ + l->selinux = secid; + l->flags |= LSM_EXPORT_SELINUX; +} + /* * get the security ID of a set of credentials */ @@ -3316,15 +3325,16 @@ static int selinux_inode_listsecurity(struct inode *inode, char *buffer, size_t return len; } -static void selinux_inode_getsecid(struct inode *inode, u32 *secid) +static void selinux_inode_getsecid(struct inode *inode, struct lsm_export *l) { struct inode_security_struct *isec = inode_security_novalidate(inode); - *secid = isec->sid; + + selinux_export_secid(l, isec->sid); } static int selinux_inode_copy_up(struct dentry *src, struct cred **new) { - u32 sid; + struct lsm_export l; struct task_security_struct *tsec; struct cred *new_creds = *new; @@ -3336,8 +3346,9 @@ static int selinux_inode_copy_up(struct dentry *src, struct cred **new) tsec = selinux_cred(new_creds); /* Get label from overlay inode and set it in create_sid */ - selinux_inode_getsecid(d_inode(src), &sid); - tsec->create_sid = sid; + lsm_export_init(&l); + selinux_inode_getsecid(d_inode(src), &l); + tsec->create_sid = l.selinux; *new = new_creds; return 0; } diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index e9560b078efe..5e345122ccb1 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -466,6 +466,15 @@ static int smk_ptrace_rule_check(struct task_struct *tracer, return rc; } +/* + * Set the Smack secid in an lsm_export structure + */ +static inline void smack_export_secid(struct lsm_export *l, u32 secid) +{ + l->smack = secid; + l->flags |= LSM_EXPORT_SMACK; +} + /* * LSM hooks. * We he, that is fun! @@ -1481,11 +1490,11 @@ static int smack_inode_listsecurity(struct inode *inode, char *buffer, * @inode: inode to extract the info from * @secid: where result will be saved */ -static void smack_inode_getsecid(struct inode *inode, u32 *secid) +static void smack_inode_getsecid(struct inode *inode, struct lsm_export *l) { struct smack_known *skp = smk_of_inode(inode); - *secid = skp->smk_secid; + smack_export_secid(l, skp->smk_secid); } /* From patchwork Tue Apr 9 19:17:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891987 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 382591390 for ; Tue, 9 Apr 2019 19:19:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2BF92288BD for ; Tue, 9 Apr 2019 19:19:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 204D0288D0; Tue, 9 Apr 2019 19:19:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B6D59288BD for ; Tue, 9 Apr 2019 19:18:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726564AbfDITS7 (ORCPT ); Tue, 9 Apr 2019 15:18:59 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:46256 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726551AbfDITS7 (ORCPT ); Tue, 9 Apr 2019 15:18:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837538; bh=+cOk5EbWObSrJ4n/q5EXan1kjg10sH4/KzvjAQgXLT4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Xk+aabNAa5zyIrshbvQ8vFifwNkPiVvw1eKGsG8Q/0YhCLkdFe6ZacfCGeON//voFMTcJxZuDWe+de2oh1q3AbQcrLvwI8Q+/uRaQv6gJtPzmEFZDc0SAZ511hY10PLIHZXhiSBDN4RDLSU3XG9Z1WIC/oUl3VXwq6EuofVa7BwoxScQcCjCOund4PpmNBNQ4gV4Ydr/+if9TJWxcaOJ+Dy+Vzo1PT1XoTBrmj/nhnBim7V3ysNDeY0emjoIS2ULgUn1BzoN526ieffNqy1jfMOidVq+ZT0Ubqfy8dCJNu1cqLhU2qkKO21KHRWr8M0RCgt8oVtsO9lskbFMGXqbKg== X-YMail-OSG: xLc4JnQVM1nkasSbLMAjNbYrz2f5yhr.oEoWdvjNbzCCvt9QoRRm4R4igoZg.lJ Jakmfrey835P.RCFChXX4kwgSjsL.B0rOKsQ97i_uArCahzgGkgiVjakOQIV8_WxKvcKR981PmYW JIefDyi.at467wJuPLpzFPG3Wcl0zF2QEQxmxvdDcfV2uJIjzU96.Qj8DeKeVXSwYdHwYM6bLGdW CYddfAcMkSVmEvdyGvchqijRTWwCikhaRCLbiWIjofDlKBgfllUXctqeq7qhP84HnU4osnluSXfe gehWtDF9nMtETDBvG2cuhRPXRFICFZHAc6xIAlTcfI81j.Ndcv8EWSIj9S8iII66vVcb89Xzs_Z4 8f2FUy.lqqmQt08bGle.ocBgElWbPYCL6h_yPbMyDftWzuqtU1VNJdtD8i44hNV7fDglBXiYYSOl 503QUlAgYy3cX42jLs1oOgai4E7fv931hTC3CUoApeYVSVgoR4e88m.Mo7P7NwzDtevL_XheGVXG MeBXSz1isb3xASKUWSjqei7TaIoaAwOt79HFPxZTAJs12EQf_NMZA3.roaXo_wEuZ7w5i4f4alC. Kbkh6NHl2PwcbYrkOcZ1wDgBYfY.JGhboCy5zH9PTajssh1BXNKMU8IhiUrIPOSRsc3rtPTHzId9 YAJEfqZ.8mwqBgglcCVTyw5oOvf7knzDpRvq91PkFD8iJ4rS3vtWUpLwE8yhedxC5WwIMvqzNc9s vg4_21J5RYCiYE2MueyofevkFkySKbf2IwufX06zKDRrTKVQlPn9DVAV2GZ87XJ07.0OcCj1qq9d uM7NE2F2mAv7CHjnRd.83tQijJX7JFsqcyR6Cr7efY9G3rBB.EF6KTE_6f9aXr2ElO3SegT7y8BU 2g864Cvwf1exJvlvLOZqNTMnSyDOPPWNlZtL0EKdXvMStw0mptcXIe7dyDqFZk5js2seCMR8yX3V 5ipZC2PhB5Kh2IOu9gUNKegErgFGcH96bcxQKceV4tyJGg_G3EyTehR4OprIbVwVwR9VEyXMlE5Q 5AKCI_OM3AfP15se5lGDlkIJtoxfaxCL9es0mKYYbWVjH9Dm6ckgYSJ1bxhbNhQHcAIUBQX00YhS 9llqr1emPD0nH685pwiGfUuLDMaAVBIpAlVLTjgLL.3MwvRnohB8_5g-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:58 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:57 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 06/59] LSM: Use lsm_export in the cred_getsecid hooks Date: Tue, 9 Apr 2019 12:17:55 -0700 Message-Id: <20190409191848.1380-7-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the cred_getsecid hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_cred_getsecid() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 5 +++-- security/security.c | 6 ++++-- security/selinux/hooks.c | 4 ++-- security/smack/smack_lsm.c | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index baeb83ef487d..2fe54dff3efa 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -572,7 +572,8 @@ * Transfer data from original creds to new creds * @cred_getsecid: * Retrieve the security identifier of the cred structure @c - * @c contains the credentials, secid will be placed into @secid. + * @c contains the credentials + * @l contains a pointer to the location where result will be saved. * In case of failure, @secid will be set to zero. * @kernel_act_as: * Set the credentials for a kernel service to act as (subjective context). @@ -1604,7 +1605,7 @@ union security_list_options { int (*cred_prepare)(struct cred *new, const struct cred *old, gfp_t gfp); void (*cred_transfer)(struct cred *new, const struct cred *old); - void (*cred_getsecid)(const struct cred *c, u32 *secid); + void (*cred_getsecid)(const struct cred *c, struct lsm_export *l); int (*kernel_act_as)(struct cred *new, u32 secid); int (*kernel_create_files_as)(struct cred *new, struct inode *inode); int (*kernel_module_request)(char *kmod_name); diff --git a/security/security.c b/security/security.c index a1f28a5e582b..ca485a777ca1 100644 --- a/security/security.c +++ b/security/security.c @@ -1638,8 +1638,10 @@ void security_transfer_creds(struct cred *new, const struct cred *old) void security_cred_getsecid(const struct cred *c, u32 *secid) { - *secid = 0; - call_void_hook(cred_getsecid, c, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + call_void_hook(cred_getsecid, c, &data); + lsm_export_secid(&data, secid); } EXPORT_SYMBOL(security_cred_getsecid); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 0e31be22d9bb..f97dd414ac8d 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3764,9 +3764,9 @@ static void selinux_cred_transfer(struct cred *new, const struct cred *old) *tsec = *old_tsec; } -static void selinux_cred_getsecid(const struct cred *c, u32 *secid) +static void selinux_cred_getsecid(const struct cred *c, struct lsm_export *l) { - *secid = cred_sid(c); + selinux_export_secid(l, cred_sid(c)); } /* diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 5e345122ccb1..15579bdd7244 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -1980,13 +1980,13 @@ static void smack_cred_transfer(struct cred *new, const struct cred *old) * * Sets the secid to contain a u32 version of the smack label. */ -static void smack_cred_getsecid(const struct cred *cred, u32 *secid) +static void smack_cred_getsecid(const struct cred *cred, struct lsm_export *l) { struct smack_known *skp; rcu_read_lock(); skp = smk_of_task(smack_cred(cred)); - *secid = skp->smk_secid; + smack_export_secid(l, skp->smk_secid); rcu_read_unlock(); } From patchwork Tue Apr 9 19:17:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891997 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DA085922 for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8A03288D0 for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BC7B5288EA; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2588428924 for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726691AbfDITTC (ORCPT ); Tue, 9 Apr 2019 15:19:02 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:39506 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726554AbfDITTB (ORCPT ); Tue, 9 Apr 2019 15:19:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837539; bh=MmtCEsyght4Z5zl828NTA0CWqne8Yk1YCMTRtKNxpho=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Mo3zW4UDYatjjECg/SDazRJeXvJdlPtXMfKnIQs+45XHAlfSPEH52SJ7t/AjsJcsBxAAvJCqnGdZSvQfqGyQ30Y5jpyIdlDwkNyh5GSxMQgK7ctN6V0LrFGyc1J70QZbSEsig2qnRCwMY5Cq/SwG2/iig/Dkx0d/E90o8rR2tB9urxvKCK4p4mzyJr3L4PUdhu/H2NFQ+nRBv4VIiT9G2fxQtxho/ULS1dbWTsz9CnkBAg4ZWifoKLUIMLSfFAnXrT0EbVkmhc8/8htA+0cVmTY8qgXVbS8GIYs2vdaTcrwixIQPxEkxMg8ZGH+YLsKFPjIYJucdf9w0FJoGlazHQA== X-YMail-OSG: dPRxZPUVM1mCN3pmHbOpf1ssx0hkX.PgHEjRF1BrSTNEi6r1ekRo5GS50m4gjzv Hu_DfVfQHF6yr.sAsgBHaqmzaBa5GIcr.InG4NV07JyUnTZy5GgrtTHKWriXaKlW0Q.Kvjan26ES px5zjhCvax6duD0MxQLYrHNajW8wDEHFIepUays07SVSJShnc2kk9cKkFSYllHqDJbmgL5UAJajD fuMeMBp5yDbG0LbHEqrIt.pyZUqM2b14abeUXCG4dk2MZpVg91kSlKj1OndVRiJ3PcefiTaN43g8 kaT2qsBvtEhVvFyYo9X7oICiPaGeeM7wylGn2cm_PFn6o6CY0E0OyuyGPYSx0U0IpMtiSHATIBHt UVZ8kpmm8G9r2r5tbHSjmsi5ln3pPaB2CbmTgXPAZo0tOqe4YO_5xewrG9348NaSNY5hdRZENw_a Nc0Qv8.f5iPmI.UxJIgnPqziQkivz3mbFqIcAw4or.WDMSRuqz51Ku1hgieukymc4AbvANXLZ5Pj x7Qt_PQS0nogXpfmM5yziJC.9XSgw3qcdu69VHxxivf9KhtXp3gk3Vzxwa2llMV00zG2fXcTc95a Gj4S68xcVIx_uZz_9IofLe5V.k45iH3M4a1z6yYI8BAv2uwsOzIYHaILzFd1dxeoLoahstEsO1wX 48pfirrxXZpXPhV_EhonJ3ZGvJitc6l1XXwd5TjoK.AhK15nv_wyYVn8ol.Ra0GLfsWgMjYDQTmM 9U3UJ.ML9svGX6wstxQsuPO3a8wJOAYzV5VTCkYRcZtEfaAVxA3F0PMnCH5XIE3v64VgFZ6VM8uA SYAj5zet06lS.uV4IL1I13u07AQgkUWPvU9yANpLljsGUkOoNeGn9nZpGu8EHYkujFsNyPvSOwf5 3YgEQnMhFInv5n7cysOlBY7TgzeYCQZc5kxF7.mKCRS9yrxCpwyBhyZHLmEofpo4cBg6jkcNtB7f u3G15TW6fsR1XVFFpQglGbSgi_Eq5YUkdHEG.0FarIVnqJ0c1iNmon4JIqWRCRcMWab4uZbp0XBS R6DWQgVHqHYPe2cIRYVEofT6xlzrLaWrYbMfOZr47GVQn9iRPkdPopvulF1v9yWzt8iO0_evA5nf YAISrPUjUlayEhl4KkUPG5AST7iq1XNL3LjRbm.oRJABxK3aBW8zt7g-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:59 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:58 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 07/59] LSM: Use lsm_export in the ipc_getsecid and task_getsecid hooks Date: Tue, 9 Apr 2019 12:17:56 -0700 Message-Id: <20190409191848.1380-8-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the cred_getsecid and task_getsecid hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_ipc_getsecid() and security_task_getsecid() are updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 8 ++++---- security/apparmor/lsm.c | 12 ++++++++++-- security/security.c | 12 ++++++++---- security/selinux/hooks.c | 10 ++++++---- security/smack/smack_lsm.c | 8 ++++---- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 2fe54dff3efa..544671f44dfa 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -638,7 +638,7 @@ * Return 0 if permission is granted. * @task_getsecid: * Retrieve the security identifier of the process @p. - * @p contains the task_struct for the process and place is into @secid. + * @p contains the task_struct for the process and place is into @l. * In case of failure, @secid will be set to zero. * * @task_setnice: @@ -1096,7 +1096,7 @@ * @ipc_getsecid: * Get the secid associated with the ipc object. * @ipcp contains the kernel IPC permission structure. - * @secid contains a pointer to the location where result will be saved. + * @l contains a pointer to the location where result will be saved. * In case of failure, @secid will be set to zero. * * Security hooks for individual messages held in System V IPC message queues @@ -1618,7 +1618,7 @@ union security_list_options { int (*task_setpgid)(struct task_struct *p, pid_t pgid); int (*task_getpgid)(struct task_struct *p); int (*task_getsid)(struct task_struct *p); - void (*task_getsecid)(struct task_struct *p, u32 *secid); + void (*task_getsecid)(struct task_struct *p, struct lsm_export *l); int (*task_setnice)(struct task_struct *p, int nice); int (*task_setioprio)(struct task_struct *p, int ioprio); int (*task_getioprio)(struct task_struct *p); @@ -1636,7 +1636,7 @@ union security_list_options { void (*task_to_inode)(struct task_struct *p, struct inode *inode); int (*ipc_permission)(struct kern_ipc_perm *ipcp, short flag); - void (*ipc_getsecid)(struct kern_ipc_perm *ipcp, u32 *secid); + void (*ipc_getsecid)(struct kern_ipc_perm *ipcp, struct lsm_export *l); int (*msg_msg_alloc_security)(struct msg_msg *msg); void (*msg_msg_free_security)(struct msg_msg *msg); diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 2716e7731279..706e5ae09170 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -49,6 +49,14 @@ int apparmor_initialized; DEFINE_PER_CPU(struct aa_buffers, aa_buffers); +/* + * Set the AppArmor secid in an lsm_export structure + */ +static inline void apparmor_export_secid(struct lsm_export *l, u32 secid) +{ + l->apparmor = secid; + l->flags |= LSM_EXPORT_APPARMOR; +} /* * LSM hook functions @@ -710,10 +718,10 @@ static void apparmor_bprm_committed_creds(struct linux_binprm *bprm) return; } -static void apparmor_task_getsecid(struct task_struct *p, u32 *secid) +static void apparmor_task_getsecid(struct task_struct *p, struct lsm_export *l) { struct aa_label *label = aa_get_task_label(p); - *secid = label->secid; + apparmor_export_secid(l, label->secid); aa_put_label(label); } diff --git a/security/security.c b/security/security.c index ca485a777ca1..802557ff6f60 100644 --- a/security/security.c +++ b/security/security.c @@ -1722,8 +1722,10 @@ int security_task_getsid(struct task_struct *p) void security_task_getsecid(struct task_struct *p, u32 *secid) { - *secid = 0; - call_void_hook(task_getsecid, p, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + call_void_hook(task_getsecid, p, &data); + lsm_export_secid(&data, secid); } EXPORT_SYMBOL(security_task_getsecid); @@ -1805,8 +1807,10 @@ int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag) void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) { - *secid = 0; - call_void_hook(ipc_getsecid, ipcp, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + call_void_hook(ipc_getsecid, ipcp, &data); + lsm_export_secid(&data, secid); } int security_msg_msg_alloc(struct msg_msg *msg) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index f97dd414ac8d..c82108793fb5 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3911,9 +3911,9 @@ static int selinux_task_getsid(struct task_struct *p) PROCESS__GETSESSION, NULL); } -static void selinux_task_getsecid(struct task_struct *p, u32 *secid) +static void selinux_task_getsecid(struct task_struct *p, struct lsm_export *l) { - *secid = task_sid(p); + selinux_export_secid(l, task_sid(p)); } static int selinux_task_setnice(struct task_struct *p, int nice) @@ -6094,10 +6094,12 @@ static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag) return ipc_has_perm(ipcp, av); } -static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) +static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, + struct lsm_export *l) { struct ipc_security_struct *isec = selinux_ipc(ipcp); - *secid = isec->sid; + + selinux_export_secid(l, isec->sid); } static void selinux_d_instantiate(struct dentry *dentry, struct inode *inode) diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 15579bdd7244..13ac3045a388 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -2087,11 +2087,11 @@ static int smack_task_getsid(struct task_struct *p) * * Sets the secid to contain a u32 version of the smack label. */ -static void smack_task_getsecid(struct task_struct *p, u32 *secid) +static void smack_task_getsecid(struct task_struct *p, struct lsm_export *l) { struct smack_known *skp = smk_of_task_struct(p); - *secid = skp->smk_secid; + smack_export_secid(l, skp->smk_secid); } /** @@ -3231,12 +3231,12 @@ static int smack_ipc_permission(struct kern_ipc_perm *ipp, short flag) * @ipp: the object permissions * @secid: where result will be saved */ -static void smack_ipc_getsecid(struct kern_ipc_perm *ipp, u32 *secid) +static void smack_ipc_getsecid(struct kern_ipc_perm *ipp, struct lsm_export *l) { struct smack_known **blob = smack_ipc(ipp); struct smack_known *iskp = *blob; - *secid = iskp->smk_secid; + smack_export_secid(l, iskp->smk_secid); } /** From patchwork Tue Apr 9 19:17:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892015 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CBCE2922 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BB93028924 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AFD6A288EA; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3C82928917 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726711AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:34652 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726714AbfDITTE (ORCPT ); Tue, 9 Apr 2019 15:19:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837543; bh=bnhiZa2kx1PJdglKUm2qCM3rIeOnoh8kwEckh5gvzqc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=G9S56UDDjDCObtjhss2HGd534Oox9M+orfd4XjNJNXIXibnXkA3P2bc4E61yE7LlvhGRTCR222FWEofr2M8l1CFseqsWKTKLQzf0yWL4tuHuEvts0GJ+tMBZQV3ixYSrNmB6LlpuiPlqSqsywweKaShLWhl74KXvw2NZcwA8pGRV5mzDha2lH73Bin9nM0AbDwfbQSz/rxqbtUQBEnWGoC/cuvwvm1evEzd8udICMeJoZMW3L4AKCFcvmkuCHuepM9E8a03tJwjiDPUcPVyzQPrWg1yBOOqqeWbl/KzaRsXZ9AeWPudTTv3YpcmXbdTvGpNEYKciV2qYUgvrbynfPw== X-YMail-OSG: qNZAkmwVM1lnFHEecY5df946UclB2wNbEjCodaapcsRBWqKA.3COozRUkl7KEqi i5gOUo78XJi5cp6t3T2dtDfw5oAR3.JYDBSTLfFDLwgMc0AQ6mPuH.ea2r3K4e0pXRfmf1.rph8F bdv4m7zaT_02l.mJ96.FJhnzSNCuqSL58EF9hztlTBblISVCpfNgmq2NO8LwfeWtizo_hFKjBk3H X3c4Atv1dLXZKQOIyUZqH3sEa32rD8asfff86dGc1uUsabZ1u9J4Hk7kUkKyPHoanumJ7rwDAk16 b_aUfamNC0Bi6hYyVHJzZd1awu2OJYJy4kRbZq63FuQjYt_w6H5v7lRzYJM_Jy5HnxydqSHTLVML rfrvSx5LYTCvJ6Km_4d4_YWj0DI4OMbrBQ9zjxJIIqScPHl3sUvExv_Mx6yKpJwlOWu9cLwcJSI9 LzIxAEJWof9JBFJunmeusV9bG_joWbB8iSAUh_ls6yrpgVjWx3x4p2sTOakom5nAcetEErA2aeVv dO9EwSHRS2wMxo4mgrJA3iZpxYODwYkVVXczD.rSyG3MvOQgIVQKnwF.ppkjEJQqJI_snBcg8Uos RJ6tbQZcWBxRz4u4mtpYVLDOOzhhynqduoXdbjuBb4.jMOJj4wQQuZlUbhLGzgtRY42F76Vd3KFc t5c0yZ7RsLd5eW6Z2wTozgf_bX7JwDdBJj9XLFxXcRkKgw8I4C0oRFdQDpHULP3cNihZBtm0BUWp JNynywyY9t4DjtuX.Irk5K9ePsQQrB5X1onV5.9BDbnFEWSqdAmBSEAqM3KOd4A2TrBB89OcXyWM 91wvNV0dTlej15HQob30sO3FKYw1RvQkc6ytMFFbD6qi0PbD97dTNDn_GYKVTJVS8V5suu3_szFC Z8k2aMTPCua4.dsR_4rpFKRsClfNmQN0p9iGqE9Z6j41PVUJ.a.wHVya031fDLh9WyI.acdnlKwE SukoVm_cd1jbmFTIWkIDGi5upVaywdjbV7GM78s.P8mVnZeBX6yW3ARkFztKz.kXUhTPZ3kBc52G p1sbNwgPM0SBFbl9TQaHP4gi35WH7joK6SqRSHKbDTPUfjoO3430rLWzLmzhPSwEjScY.mWIS9zW MIS4qGIm5UNnrnbhtYkYpDpCN2J_26IdMRD33YTP.0ZUr3pcde1949kQ- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:03 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:58 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 08/59] LSM: Use lsm_export in the kernel_ask_as hooks Date: Tue, 9 Apr 2019 12:17:57 -0700 Message-Id: <20190409191848.1380-9-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the kernel_ask_as hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_kernel_ask_as() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 4 ++-- security/security.c | 15 ++++++++++++++- security/selinux/hooks.c | 17 ++++++++++++++--- security/smack/smack_lsm.c | 12 +++++++++++- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 544671f44dfa..85b8217ce2f2 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -578,7 +578,7 @@ * @kernel_act_as: * Set the credentials for a kernel service to act as (subjective context). * @new points to the credentials to be modified. - * @secid specifies the security ID to be set + * @l specifies the security data to be set * The current task must be the one that nominated @secid. * Return 0 if successful. * @kernel_create_files_as: @@ -1606,7 +1606,7 @@ union security_list_options { gfp_t gfp); void (*cred_transfer)(struct cred *new, const struct cred *old); void (*cred_getsecid)(const struct cred *c, struct lsm_export *l); - int (*kernel_act_as)(struct cred *new, u32 secid); + int (*kernel_act_as)(struct cred *new, struct lsm_export *l); int (*kernel_create_files_as)(struct cred *new, struct inode *inode); int (*kernel_module_request)(char *kmod_name); int (*kernel_load_data)(enum kernel_load_data_id id); diff --git a/security/security.c b/security/security.c index 802557ff6f60..3a766755b722 100644 --- a/security/security.c +++ b/security/security.c @@ -742,6 +742,15 @@ static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) } } +static inline void lsm_export_to_all(struct lsm_export *data, u32 secid) +{ + data->selinux = secid; + data->smack = secid; + data->apparmor = secid; + data->flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | + LSM_EXPORT_APPARMOR; +} + /* Security operations */ int security_binder_set_context_mgr(struct task_struct *mgr) @@ -1647,7 +1656,11 @@ EXPORT_SYMBOL(security_cred_getsecid); int security_kernel_act_as(struct cred *new, u32 secid) { - return call_int_hook(kernel_act_as, 0, new, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + lsm_export_to_all(&data, secid); + + return call_int_hook(kernel_act_as, 0, new, &data); } int security_kernel_create_files_as(struct cred *new, struct inode *inode) diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index c82108793fb5..8d4334f68a65 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -222,6 +222,14 @@ static inline void selinux_export_secid(struct lsm_export *l, u32 secid) l->flags |= LSM_EXPORT_SELINUX; } +static inline void selinux_import_secid(struct lsm_export *l, u32 *secid) +{ + if (l->flags | LSM_EXPORT_SELINUX) + *secid = l->selinux; + else + *secid = SECSID_NULL; +} + /* * get the security ID of a set of credentials */ @@ -3773,19 +3781,22 @@ static void selinux_cred_getsecid(const struct cred *c, struct lsm_export *l) * set the security data for a kernel service * - all the creation contexts are set to unlabelled */ -static int selinux_kernel_act_as(struct cred *new, u32 secid) +static int selinux_kernel_act_as(struct cred *new, struct lsm_export *l) { struct task_security_struct *tsec = selinux_cred(new); + u32 nsid; u32 sid = current_sid(); int ret; + selinux_import_secid(l, &nsid); + ret = avc_has_perm(&selinux_state, - sid, secid, + sid, nsid, SECCLASS_KERNEL_SERVICE, KERNEL_SERVICE__USE_AS_OVERRIDE, NULL); if (ret == 0) { - tsec->sid = secid; + tsec->sid = nsid; tsec->create_sid = 0; tsec->keycreate_sid = 0; tsec->sockcreate_sid = 0; diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 13ac3045a388..da85d607d40a 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -475,6 +475,14 @@ static inline void smack_export_secid(struct lsm_export *l, u32 secid) l->flags |= LSM_EXPORT_SMACK; } +static inline void smack_import_secid(struct lsm_export *l, u32 *secid) +{ + if (l->flags | LSM_EXPORT_SMACK) + *secid = l->smack; + else + *secid = 0; +} + /* * LSM hooks. * We he, that is fun! @@ -1997,10 +2005,12 @@ static void smack_cred_getsecid(const struct cred *cred, struct lsm_export *l) * * Set the security data for a kernel service. */ -static int smack_kernel_act_as(struct cred *new, u32 secid) +static int smack_kernel_act_as(struct cred *new, struct lsm_export *l) { + u32 secid; struct task_smack *new_tsp = smack_cred(new); + smack_import_secid(l, &secid); new_tsp->smk_task = smack_from_secid(secid); return 0; } From patchwork Tue Apr 9 19:17:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10891995 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A04A1800 for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D7DE288BE for ; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 31502288BD; Tue, 9 Apr 2019 19:19:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B809A288BE for ; Tue, 9 Apr 2019 19:19:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726676AbfDITTC (ORCPT ); Tue, 9 Apr 2019 15:19:02 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:32957 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726559AbfDITTB (ORCPT ); Tue, 9 Apr 2019 15:19:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837539; bh=FXPJ6Gfz/Kw1RJDXF2OhaTmACwfJr6C43ZPwo4T1SLA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=QZIetdkpv5AMXQ6dcyblbbtC9iIeyb8eiEqV5pezknjjosDcQtmGP8HheP4tZXkSXHemMuF3z+Z28tPx2Oq2fHjNTQzpmnm9aeAasBs2rfFcPYZXAWCIuHx8AzolrgG8BavV9EBhpRJpka+pkZXMQh5QMyhTUVKgmEtFUxyXeKX1arwX4omIN1+FX0nGktZFBWY8Kcj9Zql49evoXOFNMUzvJWS+l1LbSjUbYyuSO/zVLsIjREqdCFEEdeowkyMclPoXJFZQm7U71vobHNC8/8gIPKObCZBC0LBGdEjzEkd6LLuzTVKpdY7ef72vsrrd8AZFWwnR0+OIUN51DzTgKQ== X-YMail-OSG: 5UuEYYkVM1mtAiN6YJ_H02kOnX9jZTQ7K_NwT2oGAGJUn6Do5foIt5QjNGk3oMk wHhKtMM8YGc2C1TXNjXdGE6gsK1GwjjidTD9tWGVdbU1w6.IwiiWs6HTvG41L_0A6hiN8Malq.x0 fuHZQVZJnByX7V2Z6DtkKP_x.rB0Xaz.rAIDx7ymxP7p9mMM9YPkLSS.tdaHqSYK6UmYDCFTzGD0 G0vqehYHkg5Ka36qVCdjlQqCt48k.qvMDrbJR2jnaNomqJLEXU456TUuDFDmvbSNNbF7_zO1CVsu hf1Sm9owNROsiftFR8dI0bD4EKxUPf4FwCzuEo_S1NBVnbDQEvle3YmwnbEOM_eh0i4n.OU.WZlQ 7wwkevw6quPVzg8XtxSmi5aixqiBxz2JBt4qDdoooK5hhLd2knbZ0lZP2bhujso80.mqtTuyd7ZW AbMfx4m_kWBRs8cVZ1QQrseS5bnQeVBW8p.afs5AsQjCPJuoqFP1qaZq8OXO7sV09_ukHN_l5Wa9 Egb2CnE9G95bQ.VGCTwjWR_TvZFcBa5EfOZehASEFyKRs_lbVuvfobZ9uNIaNiappmEWlWY.HoSF xm9wWSnlAHsuw8hhxis5k16ni8kLn4rm.zy8LLweqshqkdAKearTx7hCGBB5EItyU0YhFwT51aUR Kd02pynvB4OGe8LNRUXkEcvuby.y.rsu0q_KpC8r6Az7XM9NZ52jtko4TIVioQlwCm1aQ09WVgyE k6cSzvQNqcj2_4hZ1h1SHqwGe6T7BBnqcfQkjtMIcN9EpTUMg2soTQ0FNJhBTmtAFQ19NH4oNXZs uUyMLm.78NXn62K2G8FhYUguw_2hYFTN4O_zFwRY4vQ57LGy4qcPtv.9nU.A2Pu4oyZNju9_6WCr F8Ias.HWraQWZ2v1A0W9WIYc0uBTm1eoctr6N7ZdAGxa88YPLSsJG2MSgu9Ez73yorBtqNybXOmp V5u_9BXvN6C8NAQjQ6.v1d3G8vua36cLOfe7x2ixNWexn4gypI5yWDtbVasclAc7ZnQ1UappEahp v5eJFVdGzV1Tf5kN3Pe.5fAbAqCZQcmA3P4WDunNsng3q8phFH9J4wejHiPuqUIx3KmKpiHMAqLJ RZjrebMYypLcM6UbOt.dXHBqoDQoSku3cmIZjLJncgmWN85.lC0dXrw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:18:59 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp417.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b77b874e22efcf04356cc7acbadd009c; Tue, 09 Apr 2019 19:18:59 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 09/59] LSM: Use lsm_export in the getpeersec_dgram hooks Date: Tue, 9 Apr 2019 12:17:58 -0700 Message-Id: <20190409191848.1380-10-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the getpeersec_dgram hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_getpeersec_dgram() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 7 ++++--- security/apparmor/lsm.c | 3 ++- security/security.c | 13 ++++++++++--- security/selinux/hooks.c | 6 ++++-- security/smack/smack_lsm.c | 5 +++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 85b8217ce2f2..59f38c18426a 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -881,9 +881,9 @@ * the IP_PASSSEC option via getsockopt. It can then retrieve the * security state returned by this hook for a packet via the SCM_SECURITY * ancillary message type. + * @sock is the socket * @skb is the skbuff for the packet being queried - * @secdata is a pointer to a buffer in which to copy the security data - * @seclen is the maximum length for @secdata + * @l is a pointer to a buffer in which to copy the security data * Return 0 on success, error on failure. * @sk_alloc_security: * Allocate and attach a security structure to the sk->sk_security field, @@ -1710,7 +1710,8 @@ union security_list_options { char __user *optval, int __user *optlen, unsigned len); int (*socket_getpeersec_dgram)(struct socket *sock, - struct sk_buff *skb, u32 *secid); + struct sk_buff *skb, + struct lsm_export *l); int (*sk_alloc_security)(struct sock *sk, int family, gfp_t priority); void (*sk_free_security)(struct sock *sk); void (*sk_clone_security)(const struct sock *sk, struct sock *newsk); diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 706e5ae09170..24b638bd4305 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -1096,7 +1096,8 @@ static int apparmor_socket_getpeersec_stream(struct socket *sock, * Sets the netlabel socket state on sk from parent */ static int apparmor_socket_getpeersec_dgram(struct socket *sock, - struct sk_buff *skb, u32 *secid) + struct sk_buff *skb, + struct lsm_export *l) { /* TODO: requires secid support */ diff --git a/security/security.c b/security/security.c index 3a766755b722..2f1355d10e0d 100644 --- a/security/security.c +++ b/security/security.c @@ -2145,10 +2145,17 @@ int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, optval, optlen, len); } -int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) +int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, + u32 *secid) { - return call_int_hook(socket_getpeersec_dgram, -ENOPROTOOPT, sock, - skb, secid); + int rc; + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + rc = call_int_hook(socket_getpeersec_dgram, -ENOPROTOOPT, sock, skb, + &data); + + lsm_export_secid(&data, secid); + return rc; } EXPORT_SYMBOL(security_socket_getpeersec_dgram); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 8d4334f68a65..03dfa0cd6739 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -4949,7 +4949,9 @@ static int selinux_socket_getpeersec_stream(struct socket *sock, return err; } -static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) +static int selinux_socket_getpeersec_dgram(struct socket *sock, + struct sk_buff *skb, + struct lsm_export *l) { u32 peer_secid = SECSID_NULL; u16 family; @@ -4971,7 +4973,7 @@ static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff * selinux_skb_peerlbl_sid(skb, family, &peer_secid); out: - *secid = peer_secid; + selinux_export_secid(l, peer_secid); if (peer_secid == SECSID_NULL) return -EINVAL; return 0; diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index da85d607d40a..5318b9e6820a 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -3973,7 +3973,8 @@ static int smack_socket_getpeersec_stream(struct socket *sock, * Sets the netlabel socket state on sk from parent */ static int smack_socket_getpeersec_dgram(struct socket *sock, - struct sk_buff *skb, u32 *secid) + struct sk_buff *skb, + struct lsm_export *l) { struct netlbl_lsm_secattr secattr; @@ -4024,7 +4025,7 @@ static int smack_socket_getpeersec_dgram(struct socket *sock, #endif break; } - *secid = s; + smack_export_secid(l, s); if (s == 0) return -EINVAL; return 0; From patchwork Tue Apr 9 19:17:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892011 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 691C61390 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5728B288B3 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4B79628924; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 87A3A288B3 for ; Tue, 9 Apr 2019 19:19:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726536AbfDITTF (ORCPT ); Tue, 9 Apr 2019 15:19:05 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:41204 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726728AbfDITTE (ORCPT ); Tue, 9 Apr 2019 15:19:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837543; bh=JqmHPCKmgnqzoENFdhELAFCXcZpoQtrMW7bW3NRYmPs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=eMk6ek4gbbv3Kwni2xhb0zfW4QHmdPKGATVqUxRVXZuvttfw8zB1XpRUsoNIlqBsuy6bOSvc6QW1ezQJvbGZom82ogtG6x5y3GoDsBxFdQx2aJEmW/LIPaf+w5M4WfDtCXlnXCEVd3Kobr4jCFuCTDU8DWaDJTmSpvPLqrRDRqWZODWjCiJNoUZa8gMqIoTDMwBIogQJ8DxVtT6u2J90wIi13aV6NBvT9hvbwA7rc92VNpL8uOHDHvUmht76unAVLzpQDXY32sVTWC/mGjbf3DBDmFG/yay/N2TOOUL0ToOzjacCvLzxc5utKfoYWJYDGCon4gEWc3kwbU7mASH6ew== X-YMail-OSG: nQhCFEcVM1mfdB1r4eRNCnNwFyWA32Nwmn_mdximm5oaDFwhcMqPARriPYOYNh7 SclEGdNX_MJWJuahc7CtS.a.yTxFJdh_FVnjt8zReegGnm7wfo_TSIJy7q490_R62GWp3IOa95wa kWBcs.4Z9YybOPX84aqUcGiK5uu9Kw3LVD.1iUmxioiUjIdl9sOPT1oCs3_As9oDWgZw9HgTlt4Z ahuNAxP1_WwTEPW7ATabA8VtNvXvrW9N9I9Lq2fXsMXMGdAWKCT5FgQGVxYOknGO9oopIfA2QqWU RGCgUwkCqJphP6S1QrsOTDx0cUP2UGMLeiOksYiKjWjmtnCA8YGrFRFqNIkC.3sQrVC6XUcmKXaM Jvrol4DCBG84DiO9eSKIt9QYI4L9EuC8x0EF6hinJzAyw6UAA.DXLrDbmDOaNatjtctyvgiOdmOf NBuLBDYJWntY68cRSwfOL2AnhwJfl0ZRUKqZIwhHV3mxzspN2__aR6p3xjUG2FpFUc9cZ8eNH376 zOpm6_S.WZNY4iB4VxDxNnl8aZtN58PuN1Xfid3KECsf8EKMNTk.g4ujSQwZUTRzLZgK6ekXVONQ 97eZSHlIo0GcI9T9QdHZjiob2HHiW1OxF72MVrMB6rxC9g9HJk3UTXk5fuzo.42HMCGzUHx6K.f0 EO9o55uq9a_FYBXWa0nUk1as69YR4IuLyUS8sOHoWnJHtXnGNhajI7Ud5q7aTF9NMXxkynL2YefD MZOZP_8shc1OsJPQ8xbuSt7tiHho_OTp.IXsJ9.tXPliOh2JjTyiMrN9Zwrp.6uqdXq5KCS_en_b EmE9aVYo_ZuIO1Jl52DSr5LE9Kd.hK69tGiZBWsnqYgy2ewz.Ni80lh6zydksiAXdbTflR8jDTWd fVlgexAHmjU4nvOFoQYBJUOQ8TdAccfugr2QZvIYpaPhFK_R4nEUG_EbfGalxYZeBVtX0RLldTPE P4VHN66JyTRbk47yzx_HamcNO95nX6KsLnRbGD14qrLQIwXLrx2pg33PxlngbcePp.HXtuUlWsp2 tlAJ.n0JDDoVopvXQCHIFX0JtjczPnisdoWD6t2E_PlyCvQzNdotc7J1it.krEkbXzRC7Y32JAG5 sg4mS.9izX3rouV4VaZkE9ABtL7Y5VaBfARmsIx4XToegqhqBpIyvTNs- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:03 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:01 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 10/59] LSM: Use lsm_export in the audit_rule_match hooks Date: Tue, 9 Apr 2019 12:17:59 -0700 Message-Id: <20190409191848.1380-11-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the audit_rule_match hooks to use the lsm_export structure instead of a u32 secid. There is quite a bit of scaffolding involved that will be removed when security_audit_rule_match() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 5 +++-- security/apparmor/audit.c | 4 ++-- security/apparmor/include/audit.h | 2 +- security/apparmor/include/secid.h | 2 +- security/apparmor/secid.c | 17 +++++++++++++++-- security/security.c | 7 ++++++- security/selinux/hooks.c | 17 ----------------- security/selinux/include/audit.h | 5 +++-- security/selinux/include/objsec.h | 17 +++++++++++++++++ security/selinux/ss/services.c | 6 +++++- security/smack/smack_lsm.c | 7 +++++-- 11 files changed, 58 insertions(+), 31 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 59f38c18426a..690ab020508e 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1357,7 +1357,7 @@ * @audit_rule_match: * Determine if given @secid matches a rule previously approved * by @audit_rule_known. - * @secid contains the security id in question. + * @l points to the security data in question. * @field contains the field which relates to current LSM. * @op contains the operator that will be used for matching. * @rule points to the audit rule that will be checked against. @@ -1786,7 +1786,8 @@ union security_list_options { int (*audit_rule_init)(u32 field, u32 op, char *rulestr, void **lsmrule); int (*audit_rule_known)(struct audit_krule *krule); - int (*audit_rule_match)(u32 secid, u32 field, u32 op, void *lsmrule); + int (*audit_rule_match)(struct lsm_export *l, u32 field, u32 op, + void *lsmrule); void (*audit_rule_free)(void *lsmrule); #endif /* CONFIG_AUDIT */ diff --git a/security/apparmor/audit.c b/security/apparmor/audit.c index 5a8b9cded4f2..bea59bfad332 100644 --- a/security/apparmor/audit.c +++ b/security/apparmor/audit.c @@ -225,13 +225,13 @@ int aa_audit_rule_known(struct audit_krule *rule) return 0; } -int aa_audit_rule_match(u32 sid, u32 field, u32 op, void *vrule) +int aa_audit_rule_match(struct lsm_export *l, u32 field, u32 op, void *vrule) { struct aa_audit_rule *rule = vrule; struct aa_label *label; int found = 0; - label = aa_secid_to_label(sid); + label = aa_secid_to_label(l); if (!label) return -ENOENT; diff --git a/security/apparmor/include/audit.h b/security/apparmor/include/audit.h index ee559bc2acb8..372ba4fada9c 100644 --- a/security/apparmor/include/audit.h +++ b/security/apparmor/include/audit.h @@ -192,6 +192,6 @@ static inline int complain_error(int error) void aa_audit_rule_free(void *vrule); int aa_audit_rule_init(u32 field, u32 op, char *rulestr, void **vrule); int aa_audit_rule_known(struct audit_krule *rule); -int aa_audit_rule_match(u32 sid, u32 field, u32 op, void *vrule); +int aa_audit_rule_match(struct lsm_export *l, u32 field, u32 op, void *vrule); #endif /* __AA_AUDIT_H */ diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index fa2062711b63..c283c620efe3 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -25,7 +25,7 @@ struct aa_label; /* secid value that matches any other secid */ #define AA_SECID_WILDCARD 1 -struct aa_label *aa_secid_to_label(u32 secid); +struct aa_label *aa_secid_to_label(struct lsm_export *l); int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); void apparmor_release_secctx(char *secdata, u32 seclen); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 05373d9a3d6a..1546c45a2a18 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -61,9 +61,12 @@ void aa_secid_update(u32 secid, struct aa_label *label) * * see label for inverse aa_label_to_secid */ -struct aa_label *aa_secid_to_label(u32 secid) +struct aa_label *aa_secid_to_label(struct lsm_export *l) { struct aa_label *label; + u32 secid; + + secid = (l->flags & LSM_EXPORT_APPARMOR) ? l->apparmor : 0; rcu_read_lock(); label = idr_find(&aa_secids, secid); @@ -72,12 +75,22 @@ struct aa_label *aa_secid_to_label(u32 secid) return label; } +static inline void aa_import_secid(struct lsm_export *l, u32 secid) +{ + l->flags = LSM_EXPORT_APPARMOR; + l->apparmor = secid; +} + int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) { /* TODO: cache secctx and ref count so we don't have to recreate */ - struct aa_label *label = aa_secid_to_label(secid); + struct lsm_export data; + struct aa_label *label; int len; + aa_import_secid(&data, secid); + label = aa_secid_to_label(&data); + AA_BUG(!seclen); if (!label) diff --git a/security/security.c b/security/security.c index 2f1355d10e0d..60dd064c0531 100644 --- a/security/security.c +++ b/security/security.c @@ -2477,7 +2477,12 @@ void security_audit_rule_free(void *lsmrule) int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule) { - return call_int_hook(audit_rule_match, 0, secid, field, op, lsmrule); + int rc; + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + + rc = call_int_hook(audit_rule_match, 0, &data, field, op, lsmrule); + lsm_export_secid(&data, &secid); + return rc; } #endif /* CONFIG_AUDIT */ diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 03dfa0cd6739..bfd0f1f5979f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -213,23 +213,6 @@ static void cred_init_security(void) tsec->osid = tsec->sid = SECINITSID_KERNEL; } -/* - * Set the SELinux secid in an lsm_export structure - */ -static inline void selinux_export_secid(struct lsm_export *l, u32 secid) -{ - l->selinux = secid; - l->flags |= LSM_EXPORT_SELINUX; -} - -static inline void selinux_import_secid(struct lsm_export *l, u32 *secid) -{ - if (l->flags | LSM_EXPORT_SELINUX) - *secid = l->selinux; - else - *secid = SECSID_NULL; -} - /* * get the security ID of a set of credentials */ diff --git a/security/selinux/include/audit.h b/security/selinux/include/audit.h index 682e2b5de2a4..92dd5ab15fb2 100644 --- a/security/selinux/include/audit.h +++ b/security/selinux/include/audit.h @@ -39,7 +39,7 @@ void selinux_audit_rule_free(void *rule); /** * selinux_audit_rule_match - determine if a context ID matches a rule. - * @sid: the context ID to check + * @l: points to the context ID to check * @field: the field this rule refers to * @op: the operater the rule uses * @rule: pointer to the audit rule to check against @@ -47,7 +47,8 @@ void selinux_audit_rule_free(void *rule); * Returns 1 if the context id matches the rule, 0 if it does not, and * -errno on failure. */ -int selinux_audit_rule_match(u32 sid, u32 field, u32 op, void *rule); +int selinux_audit_rule_match(struct lsm_export *l, u32 field, u32 op, + void *rule); /** * selinux_audit_rule_known - check to see if rule contains selinux fields. diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index 3b78aa4ee98f..d7efc5f23c1e 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -50,6 +50,23 @@ static inline u32 current_sid(void) return tsec->sid; } +/* + * Set the SELinux secid in an lsm_export structure + */ +static inline void selinux_export_secid(struct lsm_export *l, u32 secid) +{ + l->selinux = secid; + l->flags |= LSM_EXPORT_SELINUX; +} + +static inline void selinux_import_secid(struct lsm_export *l, u32 *secid) +{ + if (l->flags | LSM_EXPORT_SELINUX) + *secid = l->selinux; + else + *secid = SECSID_NULL; +} + enum label_initialized { LABEL_INVALID, /* invalid or not initialized */ LABEL_INITIALIZED, /* initialized */ diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index e3f5d6aece66..626b877363fb 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -3395,13 +3395,15 @@ int selinux_audit_rule_known(struct audit_krule *rule) return 0; } -int selinux_audit_rule_match(u32 sid, u32 field, u32 op, void *vrule) +int selinux_audit_rule_match(struct lsm_export *l, u32 field, u32 op, + void *vrule) { struct selinux_state *state = &selinux_state; struct context *ctxt; struct mls_level *level; struct selinux_audit_rule *rule = vrule; int match = 0; + u32 sid; if (unlikely(!rule)) { WARN_ONCE(1, "selinux_audit_rule_match: missing rule\n"); @@ -3415,6 +3417,8 @@ int selinux_audit_rule_match(u32 sid, u32 field, u32 op, void *vrule) goto out; } + selinux_import_secid(l, &sid); + ctxt = sidtab_search(state->ss->sidtab, sid); if (unlikely(!ctxt)) { WARN_ONCE(1, "selinux_audit_rule_match: unrecognized SID %d\n", diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 5318b9e6820a..0e048c1456ed 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4369,7 +4369,7 @@ static int smack_audit_rule_known(struct audit_krule *krule) /** * smack_audit_rule_match - Audit given object ? - * @secid: security id for identifying the object to test + * @l: security id for identifying the object to test * @field: audit rule flags given from user-space * @op: required testing operator * @vrule: smack internal rule presentation @@ -4377,10 +4377,12 @@ static int smack_audit_rule_known(struct audit_krule *krule) * The core Audit hook. It's used to take the decision of * whether to audit or not to audit a given object. */ -static int smack_audit_rule_match(u32 secid, u32 field, u32 op, void *vrule) +static int smack_audit_rule_match(struct lsm_export *l, u32 field, u32 op, + void *vrule) { struct smack_known *skp; char *rule = vrule; + u32 secid; if (unlikely(!rule)) { WARN_ONCE(1, "Smack: missing rule\n"); @@ -4390,6 +4392,7 @@ static int smack_audit_rule_match(u32 secid, u32 field, u32 op, void *vrule) if (field != AUDIT_SUBJ_USER && field != AUDIT_OBJ_USER) return 0; + smack_import_secid(l, &secid); skp = smack_from_secid(secid); /* From patchwork Tue Apr 9 19:18:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892031 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60A5F922 for ; Tue, 9 Apr 2019 19:19:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 515AC288B3 for ; Tue, 9 Apr 2019 19:19:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 45C03288BD; Tue, 9 Apr 2019 19:19:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E17D8288B3 for ; Tue, 9 Apr 2019 19:19:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726655AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:41342 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726558AbfDITTE (ORCPT ); Tue, 9 Apr 2019 15:19:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837543; bh=fnJcv2J/MrzRf8h1makEn2/UWDvYNR2yTG2TfGic4Xg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Banpc0FEiVu1YfmezPMFFO1ACx1VPo4s2E+/WV/yn3SY3dMW06fqnvdz+dsINa63VX19MgY0OMVXteJhiWJ6eccvKLLN88XKHzSeYH0s9w/hGONGZ1mLT61voNw2br/6/y2uPieNYr6JgLWLeee6TU3vAqEq2hIm10YtTUzte2FZQG/ShU67cjPfhu2X1ZRQeQspt+ceheDvPcD4jjCtQsfKfYn0FOYMekW49w9hud8v+PBvwCENSdDFYE5jbVfLdm9L42o6LfkJftDQg/nd1uHeujzRwIQUSYJLn8LEGWpZbKXH9zPUIPcvhjQIHyz+EdhkDevY3bDUp+LMH1XgKw== X-YMail-OSG: A10j7E0VM1nFMlRT9W7FSsAb1jHUKi56S6SPhMxOPZx3IdxKX5sHoCBJMolS_Re Wq1ZeVWoiv1ZJyKJyRhxo2FgR_x2NwYlT2F28onvI9abmqpUK8nrvTLLkvmCcoPcjBkKeLHw5CNM bpWx_6U2H9i7alv.9UZPKe2.uaaj33p8EODU_Ent1z6HkTqHQJGxNBopYkpGxoT5d.5llPB98i_A iZ8mkjoCnyhup0ApW4pR6ws5BiUjgimJFDIIGwGt2Rwo_nq_xRFoUyioQmxyroC4iiF6.lf.1kMr zx77bCdQYfQI8bo.vgc2QT.eFCPjjtWYVeJecfry80lXJspiAOrOWXB4KTG1bOIc.2RZHOVeFet. flG1r0SktSQq3RDMWJqlCloytedHF4r.DZI2CEUALwdv_7VRK2QI0m18OFT9TMMnpY7CcrXU.Ssr 6CAthXRx0NCgNdimD0eeDSue.M1ieZZNO5SR.yQ4LfscPuhhnhjjhp.xGhvtUMJePJHK4ZtY9SPV Cn3W8bwDFnlukd537lKyuIDX2hPBn0SM25LV3MSujbZwP7dWPJik7ftAVkg4aMntkTlSgHJLseny Lbi7IMRsq3ei7EELBQOUn7gcIlwAgMlunl4I1w.L2lSPje1OIhZbF2qotmh5I7xdo.3GCfUJntAj xKczRgcgPKOh.Np5ejSpJBfSZ9O6gYNihBkgET5dHAPoye1KW68edeaeFD1phk8elyHTilJ6MbLJ M3maKLRS29kZjjmKn7Faki7ZuO_e9D20LqQfREUMAtK_XIj1SbSShjgT6Ch70n75WQI70cjOik2P IhtNCcGdW6udFkxW5C3fCtOj._KbkTc7eoejzgZbePH4K4K6BsiWeH4Dtq14LlRygRnrXD.N2Q.d 0wrPVMWHOfw.sYDg9KuCrytY9JqhwbyZ2wRh1rV0.91Y0BR1QhzLJjeoku8SYBDmYD3Gx.nI5dpa 20yyOI4Xij7byRTt.RVWd8SODuwI5L38dsz20HPOmAEr.zuYfg6tbC7XEeJ0kYm5e5QG9Zb83XnO bA.2VIhIyP8I2wRLAl4DF8H2RGn6G5uMf6w7Jn9iIZJNnvG778trnfwPUMH9c4Lgb_xlWxCcfEpj w3Arx_xsw2uVOTG1KkKDQ.OaMVGysKdRZHtd8AbCmLGFkpnSh9DRuIk4- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:03 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:01 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 11/59] LSM: Fix logical operation in lsm_export checks Date: Tue, 9 Apr 2019 12:18:00 -0700 Message-Id: <20190409191848.1380-12-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Fix the logic in Smack and SELinux when checking to see if the secid is included. Signed-off-by: Casey Schaufler --- security/selinux/include/objsec.h | 2 +- security/smack/smack_lsm.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index d7efc5f23c1e..59a3b1cd5ba9 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -61,7 +61,7 @@ static inline void selinux_export_secid(struct lsm_export *l, u32 secid) static inline void selinux_import_secid(struct lsm_export *l, u32 *secid) { - if (l->flags | LSM_EXPORT_SELINUX) + if (l->flags & LSM_EXPORT_SELINUX) *secid = l->selinux; else *secid = SECSID_NULL; diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 0e048c1456ed..a3776501965d 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -477,7 +477,7 @@ static inline void smack_export_secid(struct lsm_export *l, u32 secid) static inline void smack_import_secid(struct lsm_export *l, u32 *secid) { - if (l->flags | LSM_EXPORT_SMACK) + if (l->flags & LSM_EXPORT_SMACK) *secid = l->smack; else *secid = 0; From patchwork Tue Apr 9 19:18:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892017 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3CD681800 for ; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2B2F4288BD for ; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1CA4028917; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8B68E288B3 for ; Tue, 9 Apr 2019 19:19:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726717AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:37479 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726736AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837544; bh=seyjgce0pdmEa+cpaRVpjQK9OBPNuMErUFViqdarFKQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=W39znsNHmeAtKxtyrmJ8sebLQVYPCZYvQohm3r7gB7/erChVHhvAhn/4PM6vadZPchXvJBH6THEb3NcN4hGJNHGS30phU2wvYUEQj69+CxX7dxzbn3UKhRNcfYB6nDZ9D9WGretAjuUY9cdAl7A5bLeZjw0nq22M4dy7w+UZIZZhPtzlcWVgbhhW/Picg5atdN1tugobQ2x6zc4UEAVaTFK9U2vNTe0XbD1/vLLoTFpnOoG6CDFdTHGWzl1socDr6XrcNsckYIXNsdABWqgi+pq+9xP46S+icYHEw7arpYh1f/HDcO77DNlXl5D8cjTtg7dUwwW8qphhfZS9B6QUrQ== X-YMail-OSG: 8.o8Ta0VM1mR2TQK.dId253YLUOoKj2ZfmDi9Wtg41h0Vqw6TAZvNpnIMQVKhxw f_.FgRMgdgCkzQN.NjNpeq81kFa3WrMZJP2hJG7yUFj_1Aw6a4lzTthygkbE.bw5EP7Hq68CmAC2 67HwAkAYlNyx2Cn3QKFMmGOle6aTbUs6ifFu7IJnWY8dYu9dm3FBQUP3BdjRlW43QTcbRQPEyvpb SLNhu9y5QX6QqwfPuUgUR49XSA9t1a9my6GvKc8SuDF3Vaz2jTGI2tN3pYWt.dYt6aMeModyPjW3 Q3wszGehQ7iYDzbbyOVVHcrZiQ7r7bgr9slbYGZrcpqdTKjFAxmW6SfcaGhUvmTkuScau4RPPnhN .zh411I7AxmNP7OkVE4Id3oln6kfGfs.WlvqF60RM0Ca352pNtWiMc5g_lmJ_F5t39GK.NBBrcFr KHaZZ9FytBXw19IfQ8nZ29A5mdCkVSHFn4Fqejp9qfKxPGXh.M5Kq11r5K0IMVyAD4h9iErcvoPd MNzW5JXLaqFWJ5SQvaEZKMpX914gCoi0j5PZodwrwSmoMIX1PoN9PcqMuQb2.gKFXq.OXbaqC08f ZGKw83S2jRHx8RUmMKeVb9pIefCM45LP9DA8rZwlWG2cOxzdNniQM0Nyjrq4Pgf3GJioQjaJCLt1 kdjPwaBlTWfS2HQJ5W963qTStyCk9KQcG4ayp88OJWMFaPE0BMpLBPNzgA3urk.z5s_2XpJ_SwAW 1LsuRml.sYC8_0NEgnSgsss3LCNb11ZOBkUwO4wH7h88OwV5YZRPetxpH5OnDR9XEmtKU23qVqAe fC3IBnEloQ1EMGVoJd8pRXK3JiaX7qjIKo3.MiLjQaVHsSGbZphFjVU7BDQLvpPKRcvQMjchpqcF Eea4zivBv2thpV8qZw8JJrZTufwUsLreZvXYbjO7KTD5VuSK85xPsKEx1z8PXjlW8A9oiRsimB8X ACM2WKwaEarhey0o4Fd_dv5A2UJXqi3FtOSVtzhlLIYWyQf0MCqvL6PNEqiSsX9zrQW5AH3YADQ2 IJrGOgEkjA_r2RFWXWzr_mjIeW8It8MyWgs.eYj3RXOhDMXIm8_qfLi1gmNdSWmIXCyXOUEDRQ0f iSXv7DRBgbG6whH_PWESMmF7dd0F7qVuk2WmspfB5BlVth3iT.gszsJI- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:04 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:02 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 12/59] LSM: Use lsm_export in the secid_to_secctx hooks Date: Tue, 9 Apr 2019 12:18:01 -0700 Message-Id: <20190409191848.1380-13-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the secid_to_secctx hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_secid_to_secctx() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 5 +++-- security/apparmor/include/secid.h | 2 +- security/apparmor/secid.c | 6 ++---- security/security.c | 5 ++++- security/selinux/hooks.c | 6 +++++- security/smack/smack_lsm.c | 9 +++++++-- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 690ab020508e..11ace5c923bd 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1322,7 +1322,7 @@ * This does mean that the length could change between calls to check the * length and the next call which actually allocates and returns the * secdata. - * @secid contains the security ID. + * @l points to the security information. * @secdata contains the pointer that stores the converted security * context. * @seclen pointer which contains the length of the data @@ -1672,7 +1672,8 @@ union security_list_options { int (*getprocattr)(struct task_struct *p, char *name, char **value); int (*setprocattr)(const char *name, void *value, size_t size); int (*ismaclabel)(const char *name); - int (*secid_to_secctx)(u32 secid, char **secdata, u32 *seclen); + int (*secid_to_secctx)(struct lsm_export *l, char **secdata, + u32 *seclen); int (*secctx_to_secid)(const char *secdata, u32 seclen, u32 *secid); void (*release_secctx)(char *secdata, u32 seclen); diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index c283c620efe3..03369183f512 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -26,7 +26,7 @@ struct aa_label; #define AA_SECID_WILDCARD 1 struct aa_label *aa_secid_to_label(struct lsm_export *l); -int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); +int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen); int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); void apparmor_release_secctx(char *secdata, u32 seclen); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 1546c45a2a18..ab4dc165e43e 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -81,15 +81,13 @@ static inline void aa_import_secid(struct lsm_export *l, u32 secid) l->apparmor = secid; } -int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) { /* TODO: cache secctx and ref count so we don't have to recreate */ - struct lsm_export data; struct aa_label *label; int len; - aa_import_secid(&data, secid); - label = aa_secid_to_label(&data); + label = aa_secid_to_label(l); AA_BUG(!seclen); diff --git a/security/security.c b/security/security.c index 60dd064c0531..adf4cb768665 100644 --- a/security/security.c +++ b/security/security.c @@ -2002,7 +2002,10 @@ EXPORT_SYMBOL(security_ismaclabel); int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) { - return call_int_hook(secid_to_secctx, -EOPNOTSUPP, secid, secdata, + struct lsm_export data; + + lsm_export_to_all(&data, secid); + return call_int_hook(secid_to_secctx, -EOPNOTSUPP, &data, secdata, seclen); } EXPORT_SYMBOL(security_secid_to_secctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index bfd0f1f5979f..16d902158e8a 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6301,8 +6301,12 @@ static int selinux_ismaclabel(const char *name) return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0); } -static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +static int selinux_secid_to_secctx(struct lsm_export *l, char **secdata, + u32 *seclen) { + u32 secid; + + selinux_import_secid(l, &secid); return security_sid_to_context(&selinux_state, secid, secdata, seclen); } diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index a3776501965d..809af981f14c 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4433,9 +4433,14 @@ static int smack_ismaclabel(const char *name) * * Exists for networking code. */ -static int smack_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +static int smack_secid_to_secctx(struct lsm_export *l, char **secdata, + u32 *seclen) { - struct smack_known *skp = smack_from_secid(secid); + struct smack_known *skp; + u32 secid; + + smack_import_secid(l, &secid); + skp = smack_from_secid(secid); if (secdata) *secdata = skp->smk_known; From patchwork Tue Apr 9 19:18:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892035 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 358041800 for ; Tue, 9 Apr 2019 19:19:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 29658288B3 for ; Tue, 9 Apr 2019 19:19:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1D60428917; Tue, 9 Apr 2019 19:19:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9C9F1288B3 for ; Tue, 9 Apr 2019 19:19:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726752AbfDITTJ (ORCPT ); Tue, 9 Apr 2019 15:19:09 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:34833 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726765AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837545; bh=HePCWke2c6I7BkpqTHfPNmlfpR/ZgJTIEAfrAn5Ctvo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Hmbt6DXr5wow4a8MZFr3F0ElkwSuvUsw77DZwInNxRz6icqXhwEjr/I/sukUrK1JyG7u/VRLLChhUXzEBLkKSHosQSB55AZy811fg4JroS0xuRe/dPIcwqo8C7lkm2cGoLd3UxSMaIwb1h2Ks2cB313kG5c1wDmZ6chPxyD2gurB6JeSXywuvasSjCYxHz8Xt67l9V7dV5JIi2ZXWA+Zu8ORqzM1efHY023CMRM4I8iYx8NrwFrgdt6F7ku8PwDI1BvC6DemeKqafumVkHQqF1aXHGXhUd6p4aJXty10cGF6z056IEcoXNIGHBtenP4YpUOB6VZYlka9UAjzTdz2ew== X-YMail-OSG: XtfMoIoVM1kKFneUUTgJBZ5v3pyimkcLrFWZ3uaYF3JW6.a9dmc9uE_j7H3Ftde m9.GcMOiJtypqJ5zDp_2rgsizbgMBX8EkTLHhR0JDciuxY6IG1muAk37j4TYYs.xWv7lGCkftwAA gktNcfzF7GheipfwPBWqi.bRKM5YMTJXeZDOG2FIKOUtXTN0TNmxLwa6InlghJCPSLvj3o_gc.at 8aJUolPyxIJqd1gMI8Cxq11eOtgI9AVqEWDQrWjsaBcqHv55khcrKcrDuYY1MC5Ul0aIn5C9e3zW yFjQrgxy1HUSYtDV6el2vvXICCsdwS_.3iUXkRMeVZY8XdctCy4i7.ASkSNNwStOBLrKf4lS99c8 KUbSUIKMBv_yIq.P43.s3Ov2aVNIbSAdl0tmOMrKg4SYS7sa5h5pgH0wnQGynXKZiJTWkwy.Qmyh GlrNd63sW8eGBQ4TOiCaa6d_nSScfRouBtKMnLyKP1UHkKyT0WbdCPS2g28jQRf3QZacGOmTjnm7 8NCYwOy42it3WO2tyErN1yeNBfF7pYvjjgcM4wkZ9glXGXKrwNv3_IDhN8LMar_xueVcYPVHMbkA 6smUdaDHM..sN_FdWo.TunksoAQHg2Cy3wU2Sov1txmoEvSln03Pn8DvR_Mw._QKLRJvzD7SnrtP kKfch6hzJKWqXTeCSbzNapkMSlPKy5jtFAmkfoRXS6OrYFtKfD5_3a.whk1JKASZWXv3iooZuLJF euLfXWiLzJFW6r3wVemfE7wrvq3.lWidVARxNQo9LwGOrA2JqLO1W8GdJXchr4chsDthrhzcjZv0 MKjZdgWkWRohUZ1KgdqrLqVu1lv9mAKd4inAXJUl.yDYspnKdlJmL3FTEvLSuBM.Jcs8XUE0qel4 tciO.MxExWHKoMbMWcQsDFV4pumfQSei27.WGDZUCEe50u8Z.RYEHGvQO188E2ODkufSaGQHARqd r_1z2gACGeUYFX56k1x9RoVVKLKhMmTubpA6VV9C.LuEI.nKBebO21d7Oj0EP9iyj_bhvBzEytc_ OSKorGonytzJY4aGo1iQSi9.wVndGUS6a8ts6GVMeCOABiNEQG6oiUoCK.uC6RoysuMBXTRPs5qS m9T5qKN6m5lLUAPx6ElnP.gQoVdnoRkDJsIY8MR7p24TLwilQ_HIIVg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:05 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:03 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 13/59] LSM: Use lsm_export in the secctx_to_secid hooks Date: Tue, 9 Apr 2019 12:18:02 -0700 Message-Id: <20190409191848.1380-14-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert the secctx_to_secid hooks to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when security_secctx_to_secid() is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 7 ++++--- security/apparmor/include/secid.h | 3 ++- security/apparmor/secid.c | 9 +++++---- security/security.c | 8 ++++++-- security/selinux/hooks.c | 12 +++++++++--- security/smack/smack_lsm.c | 7 ++++--- 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 11ace5c923bd..af0bcdf8fcfe 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1327,8 +1327,8 @@ * context. * @seclen pointer which contains the length of the data * @secctx_to_secid: - * Convert security context to secid. - * @secid contains the pointer to the generated security ID. + * Convert security context to exported lsm data. + * @l contains the pointer to the generated security data. * @secdata contains the security context. * * @release_secctx: @@ -1674,7 +1674,8 @@ union security_list_options { int (*ismaclabel)(const char *name); int (*secid_to_secctx)(struct lsm_export *l, char **secdata, u32 *seclen); - int (*secctx_to_secid)(const char *secdata, u32 seclen, u32 *secid); + int (*secctx_to_secid)(const char *secdata, u32 seclen, + struct lsm_export *l); void (*release_secctx)(char *secdata, u32 seclen); void (*inode_invalidate_secctx)(struct inode *inode); diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index 03369183f512..5381eff03d4f 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -27,7 +27,8 @@ struct aa_label; struct aa_label *aa_secid_to_label(struct lsm_export *l); int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen); -int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); +int apparmor_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l); void apparmor_release_secctx(char *secdata, u32 seclen); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index ab4dc165e43e..69d98a89db75 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -75,9 +75,9 @@ struct aa_label *aa_secid_to_label(struct lsm_export *l) return label; } -static inline void aa_import_secid(struct lsm_export *l, u32 secid) +static inline void aa_export_secid(struct lsm_export *l, u32 secid) { - l->flags = LSM_EXPORT_APPARMOR; + l->flags |= LSM_EXPORT_APPARMOR; l->apparmor = secid; } @@ -111,7 +111,8 @@ int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) return 0; } -int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) +int apparmor_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l) { struct aa_label *label; @@ -119,7 +120,7 @@ int apparmor_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) seclen, GFP_KERNEL, false, false); if (IS_ERR(label)) return PTR_ERR(label); - *secid = label->secid; + aa_export_secid(l, label->secid); return 0; } diff --git a/security/security.c b/security/security.c index adf4cb768665..1645ebe06715 100644 --- a/security/security.c +++ b/security/security.c @@ -2012,8 +2012,12 @@ EXPORT_SYMBOL(security_secid_to_secctx); int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) { - *secid = 0; - return call_int_hook(secctx_to_secid, 0, secdata, seclen, secid); + struct lsm_export data = { .flags = LSM_EXPORT_NONE }; + int rc; + + rc = call_int_hook(secctx_to_secid, 0, secdata, seclen, &data); + lsm_export_secid(&data, secid); + return rc; } EXPORT_SYMBOL(security_secctx_to_secid); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 16d902158e8a..7dd333f133db 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6311,10 +6311,16 @@ static int selinux_secid_to_secctx(struct lsm_export *l, char **secdata, secdata, seclen); } -static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) +static int selinux_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l) { - return security_context_to_sid(&selinux_state, secdata, seclen, - secid, GFP_KERNEL); + u32 secid; + int rc; + + rc = security_context_to_sid(&selinux_state, secdata, seclen, + &secid, GFP_KERNEL); + selinux_export_secid(l, secid); + return rc; } static void selinux_release_secctx(char *secdata, u32 seclen) diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 809af981f14c..ecd636e5c75c 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4456,14 +4456,15 @@ static int smack_secid_to_secctx(struct lsm_export *l, char **secdata, * * Exists for audit and networking code. */ -static int smack_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) +static int smack_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l) { struct smack_known *skp = smk_find_entry(secdata); if (skp) - *secid = skp->smk_secid; + smack_export_secid(l, skp->smk_secid); else - *secid = 0; + smack_export_secid(l, 0); return 0; } From patchwork Tue Apr 9 19:18:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892033 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 15A771390 for ; Tue, 9 Apr 2019 19:19:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 084B1288BD for ; Tue, 9 Apr 2019 19:19:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F0B1028917; Tue, 9 Apr 2019 19:19:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4367A288EA for ; Tue, 9 Apr 2019 19:19:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726750AbfDITTI (ORCPT ); Tue, 9 Apr 2019 15:19:08 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:45366 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726738AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837545; bh=kBs6xavdKLksOJrpeyZAKYy1l7B4qvl4+o1ibk1YtLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=gcxccMEzrmEvi8EL3OZsrPybqFNidXpKjZufexe/wxIAyw2hKCBZLGD1WKFIFKec1Z1gqpDqDwnaBQA+nu1KpYyNPVBbsR9Sfm5zqdTSbA6kB4LGkV7evJVuy4kGn3pzdKPvlJ5nylZoS/ANvFEfUBHcKQM33nQCokPho/7LFwWSUaAw/2e6igzJ8HSz4F/GtZyy8WacYouurp0g9ESJ4iPVr3zOt4JgNBp3sJZk2yYZ/yuhpnRgDD0PAy1l03ey/TXTWa2BmuID1LnnnQy/tfrqNzRpQ1+fVImxnlNXNgM2+y2kcaU8IdiUj6SHKIj7DYPs4wr9eRkRG4p3IbSXCw== X-YMail-OSG: 5eBdqI4VM1mSwqPwu5KSaW_MDg3gVPouySLM_Jebp4NPRnozBLBEPmRaJTJuMYC hV4QRXlWrfj.tCBO88QNjvfWYyx3mJx52bwE1quFf1JVsZb5eXu8PZlvih0SMNLU_1HkQD_PCBQX LzEgDaPeSWTYLJxfNGxrtrgXT07JmiUE8nzcZbtUF2GIiNodoHJQmxmoio837fLJ_PUCK2POhwqx S6q2Bh73bDbIliUicuRgpviPRS7qJIP8tk5tjkaElHytTaQ5TVrZicDI5mh.Yfffj47RQJpmjFcO bN1FntoTt_oz77vi24pMGd3QAHzxeLOoLH7UtuE2At8Bl_gDkvoajD1ZEZ8kSgakbSjGo2AiQd.3 qFum209rSf08UU77c.9bKbH8US0xjxVsaN8EGZqKbj3y308Ixwu9OjNx31CmDZ3LjEBMgIDGHMG6 k2_PcKhbCm74C.jAC9mHyyh7Nc7amaTaccI03ruCSUsSwLEDpVSLm.KkZW9XVPrDZ60Bt2URH5lO qulMWPeRB1rWDmZmzwx61MJd8KJlQFHQsZADEIQ0KdKuDmlm.sXdcwvmIw7GbNdEagX4pfS6VtL0 Cne.8Z16NJSjsc_J38fNAYL_YUZgeO8_UKZN1IWf5y36lMeA5uGBYw6ndF4KySBya4MlHwMB7r14 txUdEURVgGSFAefN2V9Fnu6bFhpV8.703tUEeQQKlPwED8vVBYTYjdFWHHwOC6_U9HgKKpMfYqJ7 I_BWQYdZkEu4JF_Fk9GhzEp0ziSQe0xRAqO9mVhX_rhQKglf1U0PdrxpEMmTSYvK86fYHjDdwQyQ mVURkZQ1EftqFJgISC.0XhSPpH3xw1iKYUsJyBPWDaDNmOg6OaXAgR5.X2puJUSRAi5YzPi2VPN_ hVyaTMesXm70TH4HG0p5RGqM7P9YRUsTfIcXyLBLrjhhK6cUCA4Nz9ZFlW7R8Ro993c1tiEoLRkb wD4wJbv4DGcrCQgWSaEUSBIi4c5h9XL38LfaYaOuE1fQAv1MoFCaY9KiCK3k2fLP8bFRedVwgeol 2ztQMTPumkdakLr1EK7B7iTVM5YfbwgTFZmGPT.JBMqnb5Ncj93wjNCp4GxSMnRA.0XoxPBNRqvQ YWH0.f1DhE4IChjo4J_cCtGQWUAYRZIUhUYq3y39Vwvdm91IjSxmsmcg- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:05 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:03 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 14/59] LSM: Use lsm_export in security_audit_rule_match Date: Tue, 9 Apr 2019 12:18:03 -0700 Message-Id: <20190409191848.1380-15-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_audit_rule_match to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 46 +++++++++++++++++++++++++-- kernel/auditfilter.c | 4 ++- kernel/auditsc.c | 13 +++++--- security/integrity/ima/ima_policy.c | 7 +++-- security/security.c | 48 ++--------------------------- 5 files changed, 63 insertions(+), 55 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index fb19f41d630b..ea2c6c4e88db 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -93,6 +93,45 @@ static inline void lsm_export_init(struct lsm_export *l) memset(l, 0, sizeof(*l)); } +/** + * lsm_export_secid - pull the useful secid out of a lsm_export + * @data: the containing data structure + * @secid: where to put the one that matters. + * + * Shim that will disappear when all lsm_export conversions are done. + */ +static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) +{ + switch (data->flags) { + case LSM_EXPORT_NONE: + *secid = 0; + break; + case LSM_EXPORT_SELINUX: + *secid = data->selinux; + break; + case LSM_EXPORT_SMACK: + *secid = data->smack; + break; + case LSM_EXPORT_APPARMOR: + *secid = data->apparmor; + break; + default: + pr_warn("%s flags=0x%u - not a valid set\n", __func__, + data->flags); + *secid = 0; + break; + } +} + +static inline void lsm_export_to_all(struct lsm_export *data, u32 secid) +{ + data->selinux = secid; + data->smack = secid; + data->apparmor = secid; + data->flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | + LSM_EXPORT_APPARMOR; +} + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts); @@ -1712,7 +1751,8 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer) #ifdef CONFIG_SECURITY int security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule); int security_audit_rule_known(struct audit_krule *krule); -int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule); +int security_audit_rule_match(struct lsm_export *l, u32 field, u32 op, + void *lsmrule); void security_audit_rule_free(void *lsmrule); #else @@ -1728,8 +1768,8 @@ static inline int security_audit_rule_known(struct audit_krule *krule) return 0; } -static inline int security_audit_rule_match(u32 secid, u32 field, u32 op, - void *lsmrule) +static inline int security_audit_rule_match(struct lsm_export *l, u32 field, + u32 op, void *lsmrule) { return 0; } diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c index 63f8b3f26fab..15771102919d 100644 --- a/kernel/auditfilter.c +++ b/kernel/auditfilter.c @@ -1324,6 +1324,7 @@ int audit_filter(int msgtype, unsigned int listtype) struct audit_field *f = &e->rule.fields[i]; pid_t pid; u32 sid; + struct lsm_export le; switch (f->type) { case AUDIT_PID: @@ -1354,7 +1355,8 @@ int audit_filter(int msgtype, unsigned int listtype) case AUDIT_SUBJ_CLR: if (f->lsm_rule) { security_task_getsecid(current, &sid); - result = security_audit_rule_match(sid, + lsm_export_to_all(&le, sid); + result = security_audit_rule_match(&le, f->type, f->op, f->lsm_rule); } break; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index d1eab1d4a930..822ba35e4e64 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -445,6 +445,7 @@ static int audit_filter_rules(struct task_struct *tsk, const struct cred *cred; int i, need_sid = 1; u32 sid; + struct lsm_export le; unsigned int sessionid; cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation); @@ -630,7 +631,8 @@ static int audit_filter_rules(struct task_struct *tsk, security_task_getsecid(tsk, &sid); need_sid = 0; } - result = security_audit_rule_match(sid, f->type, + lsm_export_to_all(&le, sid); + result = security_audit_rule_match(&le, f->type, f->op, f->lsm_rule); } @@ -645,15 +647,17 @@ static int audit_filter_rules(struct task_struct *tsk, if (f->lsm_rule) { /* Find files that match */ if (name) { + lsm_export_to_all(&le, name->osid); result = security_audit_rule_match( - name->osid, + &le, f->type, f->op, f->lsm_rule); } else if (ctx) { list_for_each_entry(n, &ctx->names_list, list) { + lsm_export_to_all(&le, n->osid); if (security_audit_rule_match( - n->osid, + &le, f->type, f->op, f->lsm_rule)) { @@ -665,7 +669,8 @@ static int audit_filter_rules(struct task_struct *tsk, /* Find ipc objects that match */ if (!ctx || ctx->type != AUDIT_IPC) break; - if (security_audit_rule_match(ctx->ipc.osid, + lsm_export_to_all(&le, ctx->ipc.osid); + if (security_audit_rule_match(&le, f->type, f->op, f->lsm_rule)) ++result; diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index e0cc323f948f..090ef8ceb116 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -327,6 +327,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, for (i = 0; i < MAX_LSM_RULES; i++) { int rc = 0; u32 osid; + struct lsm_export le; int retried = 0; if (!rule->lsm[i].rule) @@ -337,7 +338,8 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, case LSM_OBJ_ROLE: case LSM_OBJ_TYPE: security_inode_getsecid(inode, &osid); - rc = security_filter_rule_match(osid, + lsm_export_to_all(&le, osid); + rc = security_filter_rule_match(&le, rule->lsm[i].type, Audit_equal, rule->lsm[i].rule); @@ -345,7 +347,8 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, case LSM_SUBJ_USER: case LSM_SUBJ_ROLE: case LSM_SUBJ_TYPE: - rc = security_filter_rule_match(secid, + lsm_export_to_all(&le, secid); + rc = security_filter_rule_match(&le, rule->lsm[i].type, Audit_equal, rule->lsm[i].rule); diff --git a/security/security.c b/security/security.c index 1645ebe06715..1e819ecf26ff 100644 --- a/security/security.c +++ b/security/security.c @@ -712,45 +712,6 @@ int lsm_superblock_alloc(struct super_block *sb) RC; \ }) -/** - * lsm_export_secid - pull the useful secid out of a lsm_export - * @data: the containing data structure - * @secid: where to put the one that matters. - * - * Shim that will disappear when all lsm_export conversions are done. - */ -static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) -{ - switch (data->flags) { - case LSM_EXPORT_NONE: - *secid = 0; - break; - case LSM_EXPORT_SELINUX: - *secid = data->selinux; - break; - case LSM_EXPORT_SMACK: - *secid = data->smack; - break; - case LSM_EXPORT_APPARMOR: - *secid = data->apparmor; - break; - default: - pr_warn("%s flags=0x%u - not a valid set\n", __func__, - data->flags); - *secid = 0; - break; - } -} - -static inline void lsm_export_to_all(struct lsm_export *data, u32 secid) -{ - data->selinux = secid; - data->smack = secid; - data->apparmor = secid; - data->flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | - LSM_EXPORT_APPARMOR; -} - /* Security operations */ int security_binder_set_context_mgr(struct task_struct *mgr) @@ -2482,14 +2443,11 @@ void security_audit_rule_free(void *lsmrule) call_void_hook(audit_rule_free, lsmrule); } -int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule) +int security_audit_rule_match(struct lsm_export *l, u32 field, u32 op, + void *lsmrule) { - int rc; - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - rc = call_int_hook(audit_rule_match, 0, &data, field, op, lsmrule); - lsm_export_secid(&data, &secid); - return rc; + return call_int_hook(audit_rule_match, 0, l, field, op, lsmrule); } #endif /* CONFIG_AUDIT */ From patchwork Tue Apr 9 19:18:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892019 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9D01F1390 for ; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 87240288BD for ; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7B34028917; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 081E3288EA for ; Tue, 9 Apr 2019 19:19:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726735AbfDITTH (ORCPT ); Tue, 9 Apr 2019 15:19:07 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:43434 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726750AbfDITTG (ORCPT ); Tue, 9 Apr 2019 15:19:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837545; bh=1W3uUkvFiV/hG0OeWxySGoGDdIhr1Nn/Tz9IT5pFX0c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=aic8+MnGzRtDZ6XGLKhUrYA0W3lS+gKGCcdLs0XXAZlWzHDpy0LAeApbQYQG+hqAfUcJ9uFs+UcGRv9kZXncdL71df+A6771EYLKI6wj1jBfXyDDB3STrm07+wkwxETb/07BHcOCaVJg53cvXORpQr0gxHqi2TNrAzIfsvn5aipWnLPGQxhkSOIK8bBEV8pt/NMSgcfsP3xwHdVP7ykWZAq4++N+BPH6G4/quLN6hfStnmBSC9q6d+BedC6/exsjh3JWEAupAIKKBZPw0FOTrZC9kpiL0wRXgpNXza+Cb8kCyMQoestiJKhtIm7ZmuT4qeGIHTGqULsSXOdYOS7NFA== X-YMail-OSG: iIZxfhgVM1kfQvxwsH.x510B8fDurjmeGpYDcMzNmiFKNXndgUHXaQJJsDzhTlq 8JryplqVOe2F45GoFTgUmbJ8NLwGV8n5wcd5yRhTgqLeSfhS6mPl9wLF1sIfrt54c11nc8H1svjQ 9w_d8hcrY7UGr.k9FxxBBNwW4mVVNE01QwocSlY47tQZydtzBCBFAvaTHAVCb0rMkN5obtaPODT8 fVwgBClZ646u5O9DibTsHQrFjWmrbMzyj4izHtLn9g2w0s4vWSVvEUXJjNjBvZ5cRqqv48JFwiOC R9wzZ82i0Ml2MaNaqjWl2oOOqUvZjb_uSjrJI4uppEVnCgYQgf19FIEmlruaf60u2OCvbntukry6 gmQ8EIDOyNcdzh8vpbQdFaXdJqHnbYwU1SwpEDL93C5XgwMkciXQKmZ1_e7njftp_vWMvkmBakGg lvylosX.HCX.9egOVQGyiOTKrhStB6olnPYIMS5ehfO9Q0EQIkjjjck6ao7gIk7OXN1G4btVJq.T 7irkMNZd3059XG7bLmatzF1MONP2gwldmFJYJF5thswLZs.qUXNFkWt.Dkdhr8qeTfXRvL_5oZmU wEwEKQVYUV3tvzQXOVY2genqLIq4HlE2ik9jwTxXfPRGjpjflRNVF_izRd_8GxUuHEP5b..iSAyT R3W.X6GK7q3IBbfPOAQHJ2whN4woVDLuZgN7uFHh62PWzBnoWmVL.ihaLBXpCSreSyfAfI8kKyz. wH4OVdOIqTNkYM_iigvOWhW2CJSNm5Bnky2hfFiMx.YbBP06PnrnWb8MWOyGyTQDQS945yTYHx8C X8IMSPLiIICSqMlwKOp0K4sZsNT2uzMSZAWVN8F19FLNZAWyss9iIZjfKMCqXcCKuvG5GNgu7pEL zjno_T750RWjQbjFmYFWKDKj.RN1viMsy_dBV37CyVSLcMRqeU2_0Z.W5ouJkP7lIVBgSiWUYZ46 CVFZTuJar1EMP7dVFKTv4l2cs2Rz9Wy5iV2Fp59Q3P.85Rvv2AsR35TQ9HIdb1LiNjG0qtBfOztj aydGR0i_z5BiOmG3YUoTGGy5Fzi83sYmXk._8_vYS4wVLujgkQynqSDQwj2.8ZYT9fojqfM.20Lx CmM0Gq6uH9BvC54R7hLzgt2tb1U4WBkqkKB.rk5rCX5yQEGSpucMD7w-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:05 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:04 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 15/59] LSM: Use lsm_export in security_kernel_act_as Date: Tue, 9 Apr 2019 12:18:04 -0700 Message-Id: <20190409191848.1380-16-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Casey Schaufler Convert security_kernel_act_as to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/cred.h | 3 ++- include/linux/security.h | 5 +++-- kernel/cred.c | 10 ++++++---- security/security.c | 8 ++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/linux/cred.h b/include/linux/cred.h index ddd45bb74887..023f422eefd6 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h @@ -22,6 +22,7 @@ struct cred; struct inode; +struct lsm_export; /* * COW Supplementary groups list @@ -165,7 +166,7 @@ extern const struct cred *override_creds(const struct cred *); extern void revert_creds(const struct cred *); extern struct cred *prepare_kernel_cred(struct task_struct *); extern int change_create_files_as(struct cred *, struct inode *); -extern int set_security_override(struct cred *, u32); +extern int set_security_override(struct cred *, struct lsm_export *); extern int set_security_override_from_ctx(struct cred *, const char *); extern int set_create_files_as(struct cred *, struct inode *); extern int cred_fscmp(const struct cred *, const struct cred *); diff --git a/include/linux/security.h b/include/linux/security.h index ea2c6c4e88db..7369cdc3a681 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -378,7 +378,7 @@ void security_cred_free(struct cred *cred); int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); void security_transfer_creds(struct cred *new, const struct cred *old); void security_cred_getsecid(const struct cred *c, u32 *secid); -int security_kernel_act_as(struct cred *new, u32 secid); +int security_kernel_act_as(struct cred *new, struct lsm_export *l); int security_kernel_create_files_as(struct cred *new, struct inode *inode); int security_kernel_module_request(char *kmod_name); int security_kernel_load_data(enum kernel_load_data_id id); @@ -961,7 +961,8 @@ static inline void security_transfer_creds(struct cred *new, { } -static inline int security_kernel_act_as(struct cred *cred, u32 secid) +static inline int security_kernel_act_as(struct cred *cred, + struct lsm_export *l) { return 0; } diff --git a/kernel/cred.c b/kernel/cred.c index 45d77284aed0..40a3fde22667 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -701,14 +701,14 @@ EXPORT_SYMBOL(prepare_kernel_cred); /** * set_security_override - Set the security ID in a set of credentials * @new: The credentials to alter - * @secid: The LSM security ID to set + * @l: The LSM security information to set * * Set the LSM security ID in a set of credentials so that the subjective * security is overridden when an alternative set of credentials is used. */ -int set_security_override(struct cred *new, u32 secid) +int set_security_override(struct cred *new, struct lsm_export *l) { - return security_kernel_act_as(new, secid); + return security_kernel_act_as(new, l); } EXPORT_SYMBOL(set_security_override); @@ -724,6 +724,7 @@ EXPORT_SYMBOL(set_security_override); */ int set_security_override_from_ctx(struct cred *new, const char *secctx) { + struct lsm_export le; u32 secid; int ret; @@ -731,7 +732,8 @@ int set_security_override_from_ctx(struct cred *new, const char *secctx) if (ret < 0) return ret; - return set_security_override(new, secid); + lsm_export_to_all(&le, secid); + return set_security_override(new, &le); } EXPORT_SYMBOL(set_security_override_from_ctx); diff --git a/security/security.c b/security/security.c index 1e819ecf26ff..edaaaef54239 100644 --- a/security/security.c +++ b/security/security.c @@ -1615,13 +1615,9 @@ void security_cred_getsecid(const struct cred *c, u32 *secid) } EXPORT_SYMBOL(security_cred_getsecid); -int security_kernel_act_as(struct cred *new, u32 secid) +int security_kernel_act_as(struct cred *new, struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - lsm_export_to_all(&data, secid); - - return call_int_hook(kernel_act_as, 0, new, &data); + return call_int_hook(kernel_act_as, 0, new, l); } int security_kernel_create_files_as(struct cred *new, struct inode *inode) From patchwork Tue Apr 9 19:18:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892063 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2325E18B7 for ; Tue, 9 Apr 2019 19:19:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 14C452875F for ; Tue, 9 Apr 2019 19:19:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 09418288BD; Tue, 9 Apr 2019 19:19:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9AB6E2875F for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726771AbfDITTO (ORCPT ); Tue, 9 Apr 2019 15:19:14 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:38742 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726761AbfDITTJ (ORCPT ); Tue, 9 Apr 2019 15:19:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837548; bh=wTEQTvklkThW7Dll4nUn/vb0sTDbloo0pZigu96CHzg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=f+MN8or10vtja8aLtO+3akHKBdGTXJvKkfeSPld9enTfoWIYR2gDkExbDAEIsV++aXiGHZetoOz8Xt+AWUEBrgXPNlvZ9MyyWRIHfloTNXeKiGy9QHZMcg6OtkCetvCYCHU/SyTDOIWeKRCyWrAxeI37LD3uSgrMu2/OeUZgf4dv9uN6A2Tf1TfXILz2Lc35IwiXye+bcSFzU1382LbaNnwrQ46FdG8GYz45JboYUSHEuXojj3fDQvkcmfgmNS3bvR5S3c5dxqGvIxh3B0zB0ToH5iPpjCR7bY95/UqPC/K8uLRycY4TIwRNSzXfxiUFhiQqKuVVtv3I/mG0KGSwog== X-YMail-OSG: dPcxbsMVM1nTr3Be34CgZSByw46wneN6HN84NPJGDli3ETowQYHldIZT3UlDYzA 3DglXktsvDhSKh1vFYIXe1GBNy_hhSimEk8Oh600bPJwQU3w3yQUABYoxWCgX97V4ICaIWH03gUH rd.7AiCgIsJLJnWn_NTt7aKtiL.Pw1R3SUGJVJMpy1p94SUNK.0eTrzWHgYSDsHvKp2rPnXb15Tb 8dpHUm.Z9bKLeOSybMJFavn7oDsVciB.HiJjyRF2k7D6tIQitqdjvvZ1OYZcIE66GkUvbigqGwLk RzxDnXCl19IgGOV.R.dYdryBiumWGkO6E3UbFfb42ShoCYnIM5_KlUHBVe_SGWBvU_vdOLcBIdcJ 8h3g94ri4Rlr2NVulmLBkiMLfme3ROYGe10L0OpsiVlDdq7v3UowdeRSgkn2SIeDCBC1Rb5Jczyq .CTxfTN.r1ArVl7XPqMpMGA8CoN.xIvXyRUyhW8EL6DXV4Qe4rfU0AJoXDrQbgt7x0ab1n2aXgFv oQtCSOHweJI9r26byr8v13m_jj9Ip88rrVvGXa17ZaeAZbL0btu6TAyGXyEtW6nHd13ZpG0pFYYz UvTG7x8hla_hU23PNVGuoC4_A3OyjdTEQKzrCO2.A6y9B77hzapBGRSdHPkcWFhJlWxIJV_.uhIJ Xd6MdvSsHqvq2zUQlG5jZ0IRpNTRaGmhDegsl51lC4G66ILwU7zSpEqe2sVhugkxXxnPi673kj8a DMe.iYlY1dvGmrRdrir0kCgZ573GX.gNgZLaV3IdvWnzpFNBI.tkH0y58gxqFKdepDzZDAjndeVP 45V_.QypsMSTxLcJ6cpo69GgIvjSuKZcdQBCVb5JD_APYg2L8FJCLlgC.27rDRnAp1NL0qjtwQEK P70BT9eyuwPe_xf0PNeohFTmKNIDbZ9uFtn4bAnTa.fJYfp8qSsWWJvcV8ptoCTzKQUHyzqVlG7L 5efeNnLeBkzqk0gFCmoNV.CJdJtzXxFs5JMYH6LkiOIv07VMe8PpHi0YnYofHlXymaZzE7483atT R1RugR.FUOTjEvjv1kA36GiLTM8oY_sTjARsCXnbX_rU.sXUa3GXqW6Bj2uNzU8aXtd.._mo1BDC GcT5gfXzkNX87zkuXXcNkvicDtbwWY4mHELqIjPeMcIfrUe9JmWB97Q-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:08 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:05 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 16/59] LSM: Use lsm_export in security_socket_getpeersec_dgram Date: Tue, 9 Apr 2019 12:18:05 -0700 Message-Id: <20190409191848.1380-17-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_socket_getpeersec_dgram to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. In particular, the le entry in scm_cookie includes the secid data. The secid will go away. Signed-off-by: Casey Schaufler --- include/linux/security.h | 7 +++++-- include/net/scm.h | 4 +++- net/ipv4/ip_sockglue.c | 4 +++- security/security.c | 13 ++++--------- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index 7369cdc3a681..e3f5c61b9b2c 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -1270,7 +1270,8 @@ int security_socket_shutdown(struct socket *sock, int how); int security_sock_rcv_skb(struct sock *sk, struct sk_buff *skb); int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, int __user *optlen, unsigned len); -int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid); +int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, + struct lsm_export *l); int security_sk_alloc(struct sock *sk, int family, gfp_t priority); void security_sk_free(struct sock *sk); void security_sk_clone(const struct sock *sk, struct sock *newsk); @@ -1408,7 +1409,9 @@ static inline int security_socket_getpeersec_stream(struct socket *sock, char __ return -ENOPROTOOPT; } -static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) +static inline int security_socket_getpeersec_dgram(struct socket *sock, + struct sk_buff *skb, + struct lsm_export *l) { return -ENOPROTOOPT; } diff --git a/include/net/scm.h b/include/net/scm.h index 1ce365f4c256..13b8a369fd89 100644 --- a/include/net/scm.h +++ b/include/net/scm.h @@ -34,6 +34,7 @@ struct scm_cookie { struct scm_creds creds; /* Skb credentials */ #ifdef CONFIG_SECURITY_NETWORK u32 secid; /* Passed security ID */ + struct lsm_export le; /* Passed LSM data */ #endif }; @@ -46,7 +47,8 @@ struct scm_fp_list *scm_fp_dup(struct scm_fp_list *fpl); #ifdef CONFIG_SECURITY_NETWORK static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) { - security_socket_getpeersec_dgram(sock, NULL, &scm->secid); + security_socket_getpeersec_dgram(sock, NULL, &scm->le); + lsm_export_secid(&scm->le, &scm->secid); } #else static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 82f341e84fae..b8ef7677a7e5 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -130,14 +130,16 @@ static void ip_cmsg_recv_checksum(struct msghdr *msg, struct sk_buff *skb, static void ip_cmsg_recv_security(struct msghdr *msg, struct sk_buff *skb) { + struct lsm_export le; char *secdata; u32 seclen, secid; int err; - err = security_socket_getpeersec_dgram(NULL, skb, &secid); + err = security_socket_getpeersec_dgram(NULL, skb, &le); if (err) return; + lsm_export_secid(&le, &secid); err = security_secid_to_secctx(secid, &secdata, &seclen); if (err) return; diff --git a/security/security.c b/security/security.c index edaaaef54239..d8300a6400c3 100644 --- a/security/security.c +++ b/security/security.c @@ -2110,16 +2110,11 @@ int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, } int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, - u32 *secid) + struct lsm_export *l) { - int rc; - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - rc = call_int_hook(socket_getpeersec_dgram, -ENOPROTOOPT, sock, skb, - &data); - - lsm_export_secid(&data, secid); - return rc; + lsm_export_init(l); + return call_int_hook(socket_getpeersec_dgram, -ENOPROTOOPT, sock, skb, + l); } EXPORT_SYMBOL(security_socket_getpeersec_dgram); From patchwork Tue Apr 9 19:18:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892043 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 27C381390 for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 11199288EA for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 05979288BD; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6DDC4288EA for ; Tue, 9 Apr 2019 19:19:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726778AbfDITTL (ORCPT ); Tue, 9 Apr 2019 15:19:11 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:46316 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726818AbfDITTL (ORCPT ); Tue, 9 Apr 2019 15:19:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837549; bh=nhyQ5HEMViXMwzj11P6PbXR0lPC7xmZwGngBq91che4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ZC4TAQHh7dE3hCyXb+w7tHghKfcSnXv1iCQ1DcKFUl3oJm9TkThciQ81H9QkLUFxq3bavI9582CS6byzyxc5AhOUFssfVazI+3zbldeb9uYRBS20xlv0hi6e2c92nW58HfGnW3LAwh3erM6KWDj2l0NJAXeCYir9HGEx8lYpbr0lYSY0OJZy9m14wktv8WUfx0pjLDBmX/9w+MDTLHDrDdRZiB8yt1uh43h2PI/8mmBAVnPimnBQ7ZDySEERlFlH49sLR93EQIzScBDbHtZy7JUUpf9S6HozKbm1njIAPnatSf29lA5jMA8gaNkmN9+Oa1x0iFPoaq0gymcPbcBcOA== X-YMail-OSG: bnIrBXMVM1kR7HARYK348UzkQWsZCSf9YOiBa7XDSyqXLRxmlwGkmdqQ3PhOT3r ASPCB5EefRE_ecnzdNACUIxFbINbS8uqx31oXIDRfybExtaFROUK7.thRdm.aW6PzBF293Lys.BP UikTqr4HbvGvOQw5T9qbOMSXBZFHrj0LS6dsUHBrAHL1gz.AA2uLIXrjPyQ0ApmnUF1MZ6hs4sAP TSzwtlWv2NwTXRP5JQ.br1O17PybBMnkyUIwzn_V8DogIkC3Wrd6na6vwAOxTGgE6VGQlWV5HGby F66zuPEWJTk_eAKZog5nvT9VwU1u6wE8a5r5ObpvmVB0Q1btlqa04w7.ax0UHYmCYuNS_kKOMWjc tNBdm7y9Yuu9qwEiWOabxq8wJU5bcrx9P5615ASgQGP60gJIituvLb8hkz4UcF_g_YqJlxrCEoeD uk5JxTKi5gNNEfN8Ix1kRlV0x8gBVHNUsl3qFsKf5RbonGA3Ml7dEr3o7.K6NTiC8lEXhMXPeCKH 0pJmt79LeZE0Xf7SkBpUs3Zt9h.SgPusXC_McYn89XhmWuxvsJzRz2_Y9T4..CsHa1WAOl86izKL Gn61OJ1pkRZ_ZA6yp0XK5URLqCLo5dMT0hm4lZiLEu_3LDXofvWC7wdqz2K6abbrPFwv3O7_4GFa xz84VAiW3DCYh9fGFFhm_ssAVXGBhDFvfrOoOxecgJ8oruhUg_y_ipWYDIb8K4Jhc1GLnogQkvM6 gWY.nvC_xmmDisPItbBl9eCF30Q32486KiLLDnb1Gf_gBkeXX3uf4MKv4lj5N29hJlP_YxxgetFM tcJt817qnI6_z4kEHIFzS_.eaPnQg2ZwBLl5czW7KxOLeK0F_z5xMblupcU0qTM1o296RBB_jPU8 3PXnYFMMZ9PioOMU6MFFTzddzjaXZC3uF3hIKMKikYYGWIhItsAZrV.9ZIibniH5tWcTCjBFf6th 0sN1fP1CNkKQttEDOaI0vR6QdsX0qtH.8Rpa0EGFmKXRyJGOzYAPhqxMnD.5ILgDz4lspl2lDA8i 1srcozEA7uVuLclolF0DIrE23cQo0FgizA.OniE8gez3fzqtfZsH.Ucwhrtk6K8UZ_EUIcVoKN0f IuSR4t7r.tyyO6z__kb3i9ncUurwPdyyMmeZu21o_u8pjMHEh3DTqV7HLU8_uoBQsxjbkAg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:09 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:05 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 17/59] LSM: Use lsm_export in security_secctx_to_secid Date: Tue, 9 Apr 2019 12:18:06 -0700 Message-Id: <20190409191848.1380-18-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_secctx_to_secid to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 5 +++-- kernel/cred.c | 4 +--- net/netfilter/nft_meta.c | 4 +++- net/netfilter/xt_SECMARK.c | 5 +++-- net/netlabel/netlabel_unlabeled.c | 8 ++++++-- security/security.c | 11 ++++------- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index e3f5c61b9b2c..991d2d2e290e 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -437,7 +437,8 @@ int security_setprocattr(const char *lsm, const char *name, void *value, int security_netlink_send(struct sock *sk, struct sk_buff *skb); int security_ismaclabel(const char *name); int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); -int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); +int security_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l); void security_release_secctx(char *secdata, u32 seclen); void security_inode_invalidate_secctx(struct inode *inode); @@ -1220,7 +1221,7 @@ static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *secle static inline int security_secctx_to_secid(const char *secdata, u32 seclen, - u32 *secid) + struct lsm_export *l) { return -EOPNOTSUPP; } diff --git a/kernel/cred.c b/kernel/cred.c index 40a3fde22667..7792538b1ca6 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -725,14 +725,12 @@ EXPORT_SYMBOL(set_security_override); int set_security_override_from_ctx(struct cred *new, const char *secctx) { struct lsm_export le; - u32 secid; int ret; - ret = security_secctx_to_secid(secctx, strlen(secctx), &secid); + ret = security_secctx_to_secid(secctx, strlen(secctx), &le); if (ret < 0) return ret; - lsm_export_to_all(&le, secid); return set_security_override(new, &le); } EXPORT_SYMBOL(set_security_override_from_ctx); diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c index 987d2d6ce624..598bea8e4799 100644 --- a/net/netfilter/nft_meta.c +++ b/net/netfilter/nft_meta.c @@ -576,13 +576,15 @@ static const struct nla_policy nft_secmark_policy[NFTA_SECMARK_MAX + 1] = { static int nft_secmark_compute_secid(struct nft_secmark *priv) { + struct lsm_export le; u32 tmp_secid = 0; int err; - err = security_secctx_to_secid(priv->ctx, strlen(priv->ctx), &tmp_secid); + err = security_secctx_to_secid(priv->ctx, strlen(priv->ctx), &le); if (err) return err; + lsm_export_secid(&le, &tmp_secid); if (!tmp_secid) return -ENOENT; diff --git a/net/netfilter/xt_SECMARK.c b/net/netfilter/xt_SECMARK.c index f16202d26c20..2def8d8898e6 100644 --- a/net/netfilter/xt_SECMARK.c +++ b/net/netfilter/xt_SECMARK.c @@ -49,13 +49,13 @@ secmark_tg(struct sk_buff *skb, const struct xt_action_param *par) static int checkentry_lsm(struct xt_secmark_target_info *info) { + struct lsm_export le; int err; info->secctx[SECMARK_SECCTX_MAX - 1] = '\0'; info->secid = 0; - err = security_secctx_to_secid(info->secctx, strlen(info->secctx), - &info->secid); + err = security_secctx_to_secid(info->secctx, strlen(info->secctx), &le); if (err) { if (err == -EINVAL) pr_info_ratelimited("invalid security context \'%s\'\n", @@ -63,6 +63,7 @@ static int checkentry_lsm(struct xt_secmark_target_info *info) return err; } + lsm_export_secid(&le, &info->secid); if (!info->secid) { pr_info_ratelimited("unable to map security context \'%s\'\n", info->secctx); diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index c92894c3e40a..fc38934ccb35 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -896,6 +896,7 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, void *mask; u32 addr_len; u32 secid; + struct lsm_export le; struct netlbl_audit audit_info; /* Don't allow users to add both IPv4 and IPv6 addresses for a @@ -919,10 +920,11 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, ret_val = security_secctx_to_secid( nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]), nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]), - &secid); + &le); if (ret_val != 0) return ret_val; + lsm_export_secid(&le, &secid); return netlbl_unlhsh_add(&init_net, dev_name, addr, mask, addr_len, secid, &audit_info); @@ -947,6 +949,7 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, void *mask; u32 addr_len; u32 secid; + struct lsm_export le; struct netlbl_audit audit_info; /* Don't allow users to add both IPv4 and IPv6 addresses for a @@ -968,10 +971,11 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, ret_val = security_secctx_to_secid( nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]), nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]), - &secid); + &le); if (ret_val != 0) return ret_val; + lsm_export_secid(&le, &secid); return netlbl_unlhsh_add(&init_net, NULL, addr, mask, addr_len, secid, &audit_info); diff --git a/security/security.c b/security/security.c index d8300a6400c3..868e9ae6b48c 100644 --- a/security/security.c +++ b/security/security.c @@ -1967,14 +1967,11 @@ int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) } EXPORT_SYMBOL(security_secid_to_secctx); -int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) +int security_secctx_to_secid(const char *secdata, u32 seclen, + struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - int rc; - - rc = call_int_hook(secctx_to_secid, 0, secdata, seclen, &data); - lsm_export_secid(&data, secid); - return rc; + lsm_export_init(l); + return call_int_hook(secctx_to_secid, 0, secdata, seclen, l); } EXPORT_SYMBOL(security_secctx_to_secid); From patchwork Tue Apr 9 19:18:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892059 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8CE0B1805 for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7D68C28924 for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 72055288EA; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A748288B3 for ; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726831AbfDITTK (ORCPT ); Tue, 9 Apr 2019 15:19:10 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:33309 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726770AbfDITTK (ORCPT ); Tue, 9 Apr 2019 15:19:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837548; bh=7li7tkNnxiLkHtu/0oyIewmS2h9OYS5xrTRq2nlRU0I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=d2KtawrzQTkis6EXNl9h+FPpMo33HVOo6IMPZEDKRVwQgDIOLRHOa4otQcUXLdng8yWNdkAWld6bP6TymeWvs3i8gultJaHBg2mr6Hh/Dr4VC72uKsfC9w6Yu6+HRQtteCfZ8dTu7KJrxpZlPzTgUourNHm2yMgfAOM+D/4JfiGGof5Bo12sdjYR+d2EDUNFux3PED/PnD/oeyXW7FE3Rh8B0sWiwQGHjV+srsiykTOx6aALJAhljWipS9uYTnbEOuE5I4sZ0+WcO4KZzmY55xS8rz0k8hlMdN7Kk7+4Ph6qXGTkdR7fupMe+BaJmAWWO9wVftwAqSnQsmDbMokx6g== X-YMail-OSG: vZnFMjEVM1mizXJb7zxWryw.iMQkNy1XKQoUv6MYurXHmthe.46F0_owoVImZ24 IVewUMmkhRh90SAXVR7zjI0NytGlPHZJIREzOMwJ0_wKjjN7cGp6FZ1OWuYRd31oHkktHnjXG9h1 Aji3k_Zaa6Dl3XghMA.eXtgqXKOiPAfR241SGpL8fy5rhLGeA8QBgcLXDmbGJqcJvR37y6xC3IC0 Z7sGKGzN_TfzlqlAa9RlYiqPUocOjJzEwtR9gFh04gtNkAn9oeVAgj3rxxE0OCZZeing2xehqBug Kt8cTARRIdI0nIeTTlHuhRzUZMydwJEkE891fCKS97RRYDNNKqZbIBqi0B5uadaL1wEPIoZfb4wU Bb9hCxJByg2uXCbQHdCKR35Ox89BEB40czgGZqDx5dMBFIq7ctlhqaBlf3utaKHpcIroofd4oUF7 SmYEIW5YoNFSGf6Y.lnRdirvlA4dqEerztkAtL8N5djmFR88ak.faFCrl_gG3pEIfnqptZw47SYK WoJsyRI1lP.PZR1qK5459z1vu1pyPD2XjQTACxXx_brEnPBWcb8xZW4de73cES5IcedI8oW0EMLp CBblmR0jzAAs4BULi.nQL0hbMKncLjsr22IjYod35otLD9ynn1i2kKTDmEIzACT8iQCvr4mRhWXc nu2RH8Zj3e3iKIm1KbNum2S1DLubpG56syqt8b57egF44FNARtlP4oKZDIVB3tksRhCJZV7j9Vs_ zc5XEEfXETnjW.3GIoM5X3YxZCpzTPjpEgLbOR76PxezQtcJVfZzWE2e7rqo0qxzmQ11aCBxOVKF G0WyF6bWUIyvyZiluc0o7yCSgGt3Fslu3OzaFsczoizG6UxZC6pa1U9qYnAJHuZEOu.QkEUfRGpO TPtQvUj5GwnM3VIWLRB1ZDnDrUhOwybC.3vMC_w1m_nSHvciVraSVz6NVuMKI3c2QLBMfoYco.hz 6im5EPQC0NcKW7JUJPRFa6sf3NFdwZZq0.2hZnpdvByW.O_eiAaDkLMoUdPYqExrLBmAXZqIVPus KnQBBHsPhIi4aMWVaoWHYdbZ8BjNzv700L_xbHRxc52GgQtCO6Yu5j3Z0EUsEgGno5.IIBCaGkyf fayiBTpnJTeHVrka8YTYtH8asbul5C7iGO7HSexg11qaSvT6O5AaA Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:08 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:06 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 18/59] LSM: Use lsm_export in security_secid_to_secctx Date: Tue, 9 Apr 2019 12:18:07 -0700 Message-Id: <20190409191848.1380-19-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_secid_to_secctx to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- drivers/android/binder.c | 4 +++- include/linux/security.h | 9 +++++++-- include/net/scm.h | 4 +--- kernel/audit.c | 9 +++++++-- kernel/auditsc.c | 13 +++++++++---- net/ipv4/ip_sockglue.c | 5 ++--- net/netfilter/nf_conntrack_netlink.c | 8 ++++++-- net/netfilter/nf_conntrack_standalone.c | 4 +++- net/netfilter/nfnetlink_queue.c | 8 ++++++-- net/netlabel/netlabel_unlabeled.c | 18 ++++++++++++++---- net/netlabel/netlabel_user.c | 6 +++--- net/unix/af_unix.c | 9 ++++++--- security/security.c | 8 ++------ 13 files changed, 69 insertions(+), 36 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 8685882da64c..9119333f794b 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3120,9 +3120,11 @@ static void binder_transaction(struct binder_proc *proc, if (target_node && target_node->txn_security_ctx) { u32 secid; + struct lsm_export le; security_task_getsecid(proc->tsk, &secid); - ret = security_secid_to_secctx(secid, &secctx, &secctx_sz); + lsm_export_to_all(&le, secid); + ret = security_secid_to_secctx(&le, &secctx, &secctx_sz); if (ret) { return_error = BR_FAILED_REPLY; return_error_param = ret; diff --git a/include/linux/security.h b/include/linux/security.h index 991d2d2e290e..5cea6260bbd9 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -115,6 +115,10 @@ static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) case LSM_EXPORT_APPARMOR: *secid = data->apparmor; break; + case LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | LSM_EXPORT_APPARMOR: + /* For scaffolding only */ + *secid = data->selinux; + break; default: pr_warn("%s flags=0x%u - not a valid set\n", __func__, data->flags); @@ -436,7 +440,7 @@ int security_setprocattr(const char *lsm, const char *name, void *value, size_t size); int security_netlink_send(struct sock *sk, struct sk_buff *skb); int security_ismaclabel(const char *name); -int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); +int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen); int security_secctx_to_secid(const char *secdata, u32 seclen, struct lsm_export *l); void security_release_secctx(char *secdata, u32 seclen); @@ -1214,7 +1218,8 @@ static inline int security_ismaclabel(const char *name) return 0; } -static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +static inline int security_secid_to_secctx(struct lsm_export *l, + char **secdata, u32 *seclen) { return -EOPNOTSUPP; } diff --git a/include/net/scm.h b/include/net/scm.h index 13b8a369fd89..b5d1c24318e3 100644 --- a/include/net/scm.h +++ b/include/net/scm.h @@ -33,7 +33,6 @@ struct scm_cookie { struct scm_fp_list *fp; /* Passed files */ struct scm_creds creds; /* Skb credentials */ #ifdef CONFIG_SECURITY_NETWORK - u32 secid; /* Passed security ID */ struct lsm_export le; /* Passed LSM data */ #endif }; @@ -48,7 +47,6 @@ struct scm_fp_list *scm_fp_dup(struct scm_fp_list *fpl); static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) { security_socket_getpeersec_dgram(sock, NULL, &scm->le); - lsm_export_secid(&scm->le, &scm->secid); } #else static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) @@ -99,7 +97,7 @@ static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct sc int err; if (test_bit(SOCK_PASSSEC, &sock->flags)) { - err = security_secid_to_secctx(scm->secid, &secdata, &seclen); + err = security_secid_to_secctx(&scm->le, &secdata, &seclen); if (!err) { put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, seclen, secdata); diff --git a/kernel/audit.c b/kernel/audit.c index c89ea48c70a6..b5d96a0320fb 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -1430,7 +1430,10 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) case AUDIT_SIGNAL_INFO: len = 0; if (audit_sig_sid) { - err = security_secid_to_secctx(audit_sig_sid, &ctx, &len); + struct lsm_export le; + + lsm_export_to_all(&le, audit_sig_sid); + err = security_secid_to_secctx(&le, &ctx, &len); if (err) return err; } @@ -2073,12 +2076,14 @@ int audit_log_task_context(struct audit_buffer *ab) unsigned len; int error; u32 sid; + struct lsm_export le; security_task_getsecid(current, &sid); if (!sid) return 0; - error = security_secid_to_secctx(sid, &ctx, &len); + lsm_export_to_all(&le, sid); + error = security_secid_to_secctx(&le, &ctx, &len); if (error) { if (error != -EINVAL) goto error_path; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 822ba35e4e64..83aba0336eac 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -946,6 +946,7 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, char *ctx = NULL; u32 len; int rc = 0; + struct lsm_export le; ab = audit_log_start(context, GFP_KERNEL, AUDIT_OBJ_PID); if (!ab) @@ -955,7 +956,8 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, from_kuid(&init_user_ns, auid), from_kuid(&init_user_ns, uid), sessionid); if (sid) { - if (security_secid_to_secctx(sid, &ctx, &len)) { + lsm_export_to_all(&le, sid); + if (security_secid_to_secctx(&le, &ctx, &len)) { audit_log_format(ab, " obj=(none)"); rc = 1; } else { @@ -1197,7 +1199,9 @@ static void show_special(struct audit_context *context, int *call_panic) if (osid) { char *ctx = NULL; u32 len; - if (security_secid_to_secctx(osid, &ctx, &len)) { + struct lsm_export le; + lsm_export_to_all(&le, osid); + if (security_secid_to_secctx(&le, &ctx, &len)) { audit_log_format(ab, " osid=%u", osid); *call_panic = 1; } else { @@ -1348,9 +1352,10 @@ static void audit_log_name(struct audit_context *context, struct audit_names *n, if (n->osid != 0) { char *ctx = NULL; u32 len; + struct lsm_export le; - if (security_secid_to_secctx( - n->osid, &ctx, &len)) { + lsm_export_to_all(&le, n->osid); + if (security_secid_to_secctx(&le, &ctx, &len)) { audit_log_format(ab, " osid=%u", n->osid); if (call_panic) *call_panic = 2; diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index b8ef7677a7e5..a4f37ba6dbe2 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -132,15 +132,14 @@ static void ip_cmsg_recv_security(struct msghdr *msg, struct sk_buff *skb) { struct lsm_export le; char *secdata; - u32 seclen, secid; + u32 seclen; int err; err = security_socket_getpeersec_dgram(NULL, skb, &le); if (err) return; - lsm_export_secid(&le, &secid); - err = security_secid_to_secctx(secid, &secdata, &seclen); + err = security_secid_to_secctx(&le, &secdata, &seclen); if (err) return; diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 66c596d287a5..b069277450c5 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -330,8 +330,10 @@ static int ctnetlink_dump_secctx(struct sk_buff *skb, const struct nf_conn *ct) struct nlattr *nest_secctx; int len, ret; char *secctx; + struct lsm_export le; - ret = security_secid_to_secctx(ct->secmark, &secctx, &len); + lsm_export_to_all(&le, ct->secmark); + ret = security_secid_to_secctx(&le, &secctx, &len); if (ret) return 0; @@ -615,8 +617,10 @@ static inline int ctnetlink_secctx_size(const struct nf_conn *ct) { #ifdef CONFIG_NF_CONNTRACK_SECMARK int len, ret; + struct lsm_export le; - ret = security_secid_to_secctx(ct->secmark, NULL, &len); + lsm_export_to_all(&le, ct->secmark); + ret = security_secid_to_secctx(&le, NULL, &len); if (ret) return 0; diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index c2ae14c720b4..12318026d8d4 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -175,8 +175,10 @@ static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) int ret; u32 len; char *secctx; + struct lsm_export le; - ret = security_secid_to_secctx(ct->secmark, &secctx, &len); + lsm_export_to_all(&le, ct->secmark); + ret = security_secid_to_secctx(&le, &secctx, &len); if (ret) return; diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 0dcc3592d053..4c74c383e26b 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -309,13 +309,17 @@ static u32 nfqnl_get_sk_secctx(struct sk_buff *skb, char **secdata) { u32 seclen = 0; #if IS_ENABLED(CONFIG_NETWORK_SECMARK) + struct lsm_export le; + if (!skb || !sk_fullsock(skb->sk)) return 0; read_lock_bh(&skb->sk->sk_callback_lock); - if (skb->secmark) - security_secid_to_secctx(skb->secmark, secdata, &seclen); + if (skb->secmark) { + lsm_export_to_all(&le, skb->secmark); + security_secid_to_secctx(&le, secdata, &seclen); + } read_unlock_bh(&skb->sk->sk_callback_lock); #endif diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index fc38934ccb35..00922f55dd9e 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -389,6 +389,7 @@ int netlbl_unlhsh_add(struct net *net, struct audit_buffer *audit_buf = NULL; char *secctx = NULL; u32 secctx_len; + struct lsm_export le; if (addr_len != sizeof(struct in_addr) && addr_len != sizeof(struct in6_addr)) @@ -451,7 +452,8 @@ int netlbl_unlhsh_add(struct net *net, unlhsh_add_return: rcu_read_unlock(); if (audit_buf != NULL) { - if (security_secid_to_secctx(secid, + lsm_export_to_all(&le, secid); + if (security_secid_to_secctx(&le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); @@ -488,6 +490,7 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, struct net_device *dev; char *secctx; u32 secctx_len; + struct lsm_export le; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af4list_remove(addr->s_addr, mask->s_addr, @@ -507,8 +510,10 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, addr->s_addr, mask->s_addr); if (dev != NULL) dev_put(dev); + if (entry != NULL) + lsm_export_to_all(&le, entry->secid); if (entry != NULL && - security_secid_to_secctx(entry->secid, + security_secid_to_secctx(&le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); security_release_secctx(secctx, secctx_len); @@ -550,6 +555,7 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, struct net_device *dev; char *secctx; u32 secctx_len; + struct lsm_export le; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af6list_remove(addr, mask, &iface->addr6_list); @@ -568,8 +574,10 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, addr, mask); if (dev != NULL) dev_put(dev); + if (entry != NULL) + lsm_export_to_all(&le, entry->secid); if (entry != NULL && - security_secid_to_secctx(entry->secid, + security_secid_to_secctx(&le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); security_release_secctx(secctx, secctx_len); @@ -1092,6 +1100,7 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, u32 secid; char *secctx; u32 secctx_len; + struct lsm_export le; data = genlmsg_put(cb_arg->skb, NETLINK_CB(cb_arg->nl_cb->skb).portid, cb_arg->seq, &netlbl_unlabel_gnl_family, @@ -1146,7 +1155,8 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, secid = addr6->secid; } - ret_val = security_secid_to_secctx(secid, &secctx, &secctx_len); + lsm_export_to_all(&le, secid); + ret_val = security_secid_to_secctx(&le, &secctx, &secctx_len); if (ret_val != 0) goto list_cb_failure; ret_val = nla_put(cb_arg->skb, diff --git a/net/netlabel/netlabel_user.c b/net/netlabel/netlabel_user.c index 4676f5bb16ae..1079cdea872c 100644 --- a/net/netlabel/netlabel_user.c +++ b/net/netlabel/netlabel_user.c @@ -100,6 +100,7 @@ struct audit_buffer *netlbl_audit_start_common(int type, struct audit_buffer *audit_buf; char *secctx; u32 secctx_len; + struct lsm_export le; if (audit_enabled == AUDIT_OFF) return NULL; @@ -112,10 +113,9 @@ struct audit_buffer *netlbl_audit_start_common(int type, from_kuid(&init_user_ns, audit_info->loginuid), audit_info->sessionid); + lsm_export_to_all(&le, audit_info->secid); if (audit_info->secid != 0 && - security_secid_to_secctx(audit_info->secid, - &secctx, - &secctx_len) == 0) { + security_secid_to_secctx(&le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " subj=%s", secctx); security_release_secctx(secctx, secctx_len); } diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index ddb838a1b74c..4d4107927ba2 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -143,17 +143,20 @@ static struct hlist_head *unix_sockets_unbound(void *addr) #ifdef CONFIG_SECURITY_NETWORK static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { - UNIXCB(skb).secid = scm->secid; + lsm_export_secid(&scm->le, &(UNIXCB(skb).secid)); } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { - scm->secid = UNIXCB(skb).secid; + lsm_export_to_all(&scm->le, UNIXCB(skb).secid); } static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb) { - return (scm->secid == UNIXCB(skb).secid); + u32 best_secid; + + lsm_export_secid(&scm->le, &best_secid); + return (best_secid == UNIXCB(skb).secid); } #else static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) diff --git a/security/security.c b/security/security.c index 868e9ae6b48c..b6a096be95ac 100644 --- a/security/security.c +++ b/security/security.c @@ -1957,13 +1957,9 @@ int security_ismaclabel(const char *name) } EXPORT_SYMBOL(security_ismaclabel); -int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) { - struct lsm_export data; - - lsm_export_to_all(&data, secid); - return call_int_hook(secid_to_secctx, -EOPNOTSUPP, &data, secdata, - seclen); + return call_int_hook(secid_to_secctx, -EOPNOTSUPP, l, secdata, seclen); } EXPORT_SYMBOL(security_secid_to_secctx); From patchwork Tue Apr 9 19:18:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892045 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B687A922 for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A5C26288BD for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9A63428938; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3A1EA288BD for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726770AbfDITTL (ORCPT ); Tue, 9 Apr 2019 15:19:11 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:44122 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726774AbfDITTJ (ORCPT ); Tue, 9 Apr 2019 15:19:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837548; bh=affcoRY2PaaUmEgcqS6C9HybTLSyjRteSCEEdycSbI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=rctRlsWgSC5C8HFxq/sP0CAIQge6XAk57NxQUkH+4eF1u/cPod8su+Dx2cH+7XNEpUmqEtAJImr99lX2Wm7kyVmhQvAC0+rIgpg0lIU5J1Y0ZOBwprwAg2Z2T+Fe5SvOULBOkWatLVuhHT0binMy6kNfcGkgxu2LkrXVXg3ykA2sEp+KRj3dJMT8SMAn0w+cypNxrJfF/+pCYf4Enh9lZfiZ/3mrw1FpQwLdcOpEUKdUS16P+NZEuJSeM51Q+bitBPQZj+OS2I/3oYVSp830Wjz/YVeZf4z2gc02GNv9kZVZBkTka++lXRsmwVeX0MyFxDTSxOWjih1QZGdLzRQyzw== X-YMail-OSG: 2foU4CQVM1m3HXjVX90kurKtONjrT3AmXx_NGjTCjXV.VlVUO9hXloT9r6u0Tpb 9wVjNaXOzzcSs9gcarGZTXyYNolJ9XRTtsztle4v7bEenoxZXme0llwbJTEP64pMboNRQ84X5XnM P4hJw440q.lBM6yiDNkLyAEP.WWMkbzjGmHL1SucmExsBOiQ2M6zIaku4_1JKxcKLOYnn8wXm5vD KNaJ.yf2MlqRadI3ZJSZduit2e7COQcr4lF5A_VbMK7mWTDXj3acksERGsHyNK8xubxZrMJQ4xD6 uoBc_DisannoErJAjXcxZCzEEinsGeBPYCxVps6gJTVnMdI0DzjH6jbgR.ZewDstig1Q5_.k3lZp qKwPbloL4dZKulfuJETWoGALIx3VRd564Td7moZA8HhIcn1NVgZpS9QLchfQUNR8wyPM6x4VgbGu LVYkI2UHVQvEmC328AJEiJdfZSUYxlLXo.UhHNxDOLwNDayixfWn.8.Vh.IIKrcTO5YWDKo5LgkX TQ6zAsU7Rkfq3OdIInJMe6ArBzOLuopa_jAFc8gEuRWQJdyjYZPtVMVYVNU__h9qHqeit59XCCZU oV8wJSlbuHpGhDXzG9.TSG.hTteAjKWA216vcjnuG17PqrnNkk6Zcefg0o5OERC3hGp7ypjiN.iA 9A0.5wV_Mg0shcewjuYcmTrO6hBFyJke4E2xnBja9zZRnHdsJ4Ru3e4jsOaEcA1E10ne1cgFHTWN CSopKvKmyCNccb4HvjRrgXh6rT5qli2VmuTHHHNecTKeIHeBXBGEZ2oSPiKhl1p1SGrdJgkXEtBn p7RtKBRjmh1E_nilrwp25938deDrmhwHA1hnAbyy4MaZgIpRF511a.suruW4xL1ufuJUOe4XDWHU z658IDoK5PIIdd3tq6SMJyPb_Z3EIaR0PAPm.NvWRx6p1Sm7plPl7zpnyy8iQVw5c2RBEExt8b7F aAcBnt6gVY2qbm4ts_RpRZpOwzchWUcvJJdd.ncsNUWXU6BFCByA2Bo46GKLrpRhjWUBHH.3b.TT jTqCReb1reJ7UHFWPQlIdjDTYAHwzp2zuDzLlphNZcddg10kbRTIugibT.PlwWIel61VE7rtcj.4 riYjAcF2sKNXPhN7P4Sew.mDULhxSYyk7_0E1LEGMKpNcz7.CIdwB.FY- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:08 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 54e8f28a4675c25365c7725d1b772c7b; Tue, 09 Apr 2019 19:19:06 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 19/59] LSM: Use lsm_export in security_ipc_getsecid Date: Tue, 9 Apr 2019 12:18:08 -0700 Message-Id: <20190409191848.1380-20-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_ipc_getsecid to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 7 ++++--- kernel/auditsc.c | 4 +++- security/security.c | 8 +++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index 5cea6260bbd9..6ac48c7c4a41 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -411,7 +411,7 @@ int security_task_prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5); void security_task_to_inode(struct task_struct *p, struct inode *inode); int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag); -void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid); +void security_ipc_getsecid(struct kern_ipc_perm *ipcp, struct lsm_export *l); int security_msg_msg_alloc(struct msg_msg *msg); void security_msg_msg_free(struct msg_msg *msg); int security_msg_queue_alloc(struct kern_ipc_perm *msq); @@ -1096,9 +1096,10 @@ static inline int security_ipc_permission(struct kern_ipc_perm *ipcp, return 0; } -static inline void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) +static inline void security_ipc_getsecid(struct kern_ipc_perm *ipcp, + struct lsm_export *l) { - *secid = 0; + lsm_export_init(l); } static inline int security_msg_msg_alloc(struct msg_msg *msg) diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 83aba0336eac..eabbf78fee96 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2266,11 +2266,13 @@ void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) void __audit_ipc_obj(struct kern_ipc_perm *ipcp) { struct audit_context *context = audit_context(); + struct lsm_export le; context->ipc.uid = ipcp->uid; context->ipc.gid = ipcp->gid; context->ipc.mode = ipcp->mode; context->ipc.has_perm = 0; - security_ipc_getsecid(ipcp, &context->ipc.osid); + security_ipc_getsecid(ipcp, &le); + lsm_export_secid(&le, &context->ipc.osid); context->type = AUDIT_IPC; } diff --git a/security/security.c b/security/security.c index b6a096be95ac..6ba1187c9655 100644 --- a/security/security.c +++ b/security/security.c @@ -1775,12 +1775,10 @@ int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag) return call_int_hook(ipc_permission, 0, ipcp, flag); } -void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) +void security_ipc_getsecid(struct kern_ipc_perm *ipcp, struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - call_void_hook(ipc_getsecid, ipcp, &data); - lsm_export_secid(&data, secid); + lsm_export_init(l); + call_void_hook(ipc_getsecid, ipcp, l); } int security_msg_msg_alloc(struct msg_msg *msg) From patchwork Tue Apr 9 19:18:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892047 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0545F1390 for ; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E3D3E288B3 for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7EA028938; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E9D3288B3 for ; Tue, 9 Apr 2019 19:19:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726818AbfDITTM (ORCPT ); Tue, 9 Apr 2019 15:19:12 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:44585 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726780AbfDITTL (ORCPT ); Tue, 9 Apr 2019 15:19:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837549; bh=rnYFo5ZRZDk+OWS44zRZyocobFLx6h6kqTHu/9Enlaw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=eqNFVqAkiywpoRCXSICCag+mAEE2BjwUDObRovchVRc1Vr5dITrY16DIm6zntcQEcGyR6ARFrKlUEwBaFZIrLLYNfTCdmmQ5BI35Vtl0X2/5EafJJQ1db3xxBzJAw9gQBkeCEzLow5ljQwq4S1TsvETvcSuC5zLw8n8OreHvHaEzSXX5TrARrp5aGzAJ0c1B3otgVJwMNNiPIhdUZMLVbEoWCJdlxLv2jIqQE6dlptL63SljG7C8OEAW/kEB/3JBGVypUjxol0LozmB1vB3ebymKuUAZihdoOSoKioi5W2z6pop2tK1MKQ7qPGyxylXZ1I8EXZJ6S8mJeR/8PVmK5w== X-YMail-OSG: zUmBewcVM1ladYcuO8AnfedLEVh9HnHAfE0tg48wROEpMgWXkChI9Z1JyD0.T4f _DmH8c7Z7w1zaq85wWP8VXXLUyrQBrmRXeDcYOioCFJo7AhqgvMa6zeTbuVrfdbnOtaAMRe0pH4V CeaHcdd3B6BUEm9xfQhfP137rANZV0YGb4_ONXlLodU4RHNBYX7jzsAnEbvSZFI58x7g7zlyIp_f o6WlcGkrPpkjfu2aJVL4ceb5Wvo2MwRyFxj8QmorJafQXG5BSmPZj4Vl1LF3yvTzd81ywytKmBPT 22WBYmrSot8TSDN_uM1gw.YrmRtC8zZyObAVfQRkUVKsX7RQcM8_gtD5Tm2okBZf4IHZ4EHFac1I CDHKQnFf8p7VU7kU_3qv714yuIJn6d21zdTzBnmEq127auvmsCGHvH2N3zojCm59Eu0ZbWccM3FQ gzjlK7CpIyJn.Jj_E83rilN8wr.akL6fH7wMauQTEoLsP0iHs6MaHLNGrX13vwEAiCDLH1QTnNKz RyIp67IqM1mIAk9J1tRBEGtNlHgBZnYzuuETDnUxfk32yw4uGCK1oDF53Ne1t9.l5CmdQORYjgUP oWFEcBeztoloI1ya7HmordMAklgFVmDmgGdZAx6n4lfDYprhth.L6e9ZodNiAv2MxX.vXp18pzAw DKkB5OOcHW2OPEAe08rOKsZcSeZPnxn1kKzH.IbW1b2Sq_XRC6.yRT.07zQ4wdrztJ2P51BtJ3PY ehmDclhOFak6p.JxcOO5O_o_c8.73ADJkBkLIz3VdBOLH_dBr2meF1c.2l8zWwYZRHurGnp8nkTu wKupx_uJQ7wRxKpH.lXN8i17PE.oS5U_2T0WX7sCRtQE9qARbuOUDQKZ6LuZnmlXRYyC2joZldAq O5i8QaqcfX11mOveP7oZexke3J6FMqX_6ogTVUF6IrqcKzfV3DD0kLqrT_bMtCTMylz6iPxdat33 r4IB._k3yRRUZRTWnkkuX3UszugC6P9IOFbhdNrgcY.rzHNM6r1GdaYRvWkT8N7yN6H6Dx90Bzky FB3JMehZMmxuU1G2XwkSyt8pPn3oyaxAis7ZsK74nUCNqakTIaRnSSV5LrPjZEwVHm6w8rNCddwU DZ7RdJDl0hs44k6un283np8JsRUvfgTl5.OeSAUbEKSGU_eib739lvQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:09 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:08 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 20/59] LSM: Use lsm_export in security_task_getsecid Date: Tue, 9 Apr 2019 12:18:09 -0700 Message-Id: <20190409191848.1380-21-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_task_getsecid to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- drivers/android/binder.c | 4 +--- include/linux/security.h | 7 ++++--- kernel/audit.c | 4 ++-- kernel/auditfilter.c | 4 +--- kernel/auditsc.c | 18 +++++++++++------- net/netlabel/netlabel_unlabeled.c | 4 +++- net/netlabel/netlabel_user.h | 5 ++++- security/integrity/ima/ima_appraise.c | 4 +++- security/integrity/ima/ima_main.c | 16 ++++++++++++---- security/security.c | 8 +++----- 10 files changed, 44 insertions(+), 30 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 9119333f794b..0eeb5b75da5b 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3119,11 +3119,9 @@ static void binder_transaction(struct binder_proc *proc, t->priority = task_nice(current); if (target_node && target_node->txn_security_ctx) { - u32 secid; struct lsm_export le; - security_task_getsecid(proc->tsk, &secid); - lsm_export_to_all(&le, secid); + security_task_getsecid(proc->tsk, &le); ret = security_secid_to_secctx(&le, &secctx, &secctx_sz); if (ret) { return_error = BR_FAILED_REPLY; diff --git a/include/linux/security.h b/include/linux/security.h index 6ac48c7c4a41..ae4c058abc5e 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -394,7 +394,7 @@ int security_task_fix_setuid(struct cred *new, const struct cred *old, int security_task_setpgid(struct task_struct *p, pid_t pgid); int security_task_getpgid(struct task_struct *p); int security_task_getsid(struct task_struct *p); -void security_task_getsecid(struct task_struct *p, u32 *secid); +void security_task_getsecid(struct task_struct *p, struct lsm_export *l); int security_task_setnice(struct task_struct *p, int nice); int security_task_setioprio(struct task_struct *p, int ioprio); int security_task_getioprio(struct task_struct *p); @@ -1023,9 +1023,10 @@ static inline int security_task_getsid(struct task_struct *p) return 0; } -static inline void security_task_getsecid(struct task_struct *p, u32 *secid) +static inline void security_task_getsecid(struct task_struct *p, + struct lsm_export *l) { - *secid = 0; + lsm_export_init(l); } static inline int security_task_setnice(struct task_struct *p, int nice) diff --git a/kernel/audit.c b/kernel/audit.c index b5d96a0320fb..fa4c5544eb37 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -2078,11 +2078,11 @@ int audit_log_task_context(struct audit_buffer *ab) u32 sid; struct lsm_export le; - security_task_getsecid(current, &sid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &sid); if (!sid) return 0; - lsm_export_to_all(&le, sid); error = security_secid_to_secctx(&le, &ctx, &len); if (error) { if (error != -EINVAL) diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c index 15771102919d..468dac2bdce5 100644 --- a/kernel/auditfilter.c +++ b/kernel/auditfilter.c @@ -1323,7 +1323,6 @@ int audit_filter(int msgtype, unsigned int listtype) for (i = 0; i < e->rule.field_count; i++) { struct audit_field *f = &e->rule.fields[i]; pid_t pid; - u32 sid; struct lsm_export le; switch (f->type) { @@ -1354,8 +1353,7 @@ int audit_filter(int msgtype, unsigned int listtype) case AUDIT_SUBJ_SEN: case AUDIT_SUBJ_CLR: if (f->lsm_rule) { - security_task_getsecid(current, &sid); - lsm_export_to_all(&le, sid); + security_task_getsecid(current, &le); result = security_audit_rule_match(&le, f->type, f->op, f->lsm_rule); } diff --git a/kernel/auditsc.c b/kernel/auditsc.c index eabbf78fee96..b06ffcf9bb9f 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -444,7 +444,6 @@ static int audit_filter_rules(struct task_struct *tsk, { const struct cred *cred; int i, need_sid = 1; - u32 sid; struct lsm_export le; unsigned int sessionid; @@ -628,10 +627,9 @@ static int audit_filter_rules(struct task_struct *tsk, logged upon error */ if (f->lsm_rule) { if (need_sid) { - security_task_getsecid(tsk, &sid); + security_task_getsecid(tsk, &le); need_sid = 0; } - lsm_export_to_all(&le, sid); result = security_audit_rule_match(&le, f->type, f->op, f->lsm_rule); @@ -2362,12 +2360,14 @@ int __audit_sockaddr(int len, void *a) void __audit_ptrace(struct task_struct *t) { struct audit_context *context = audit_context(); + struct lsm_export le; context->target_pid = task_tgid_nr(t); context->target_auid = audit_get_loginuid(t); context->target_uid = task_uid(t); context->target_sessionid = audit_get_sessionid(t); - security_task_getsecid(t, &context->target_sid); + security_task_getsecid(t, &le); + lsm_export_secid(&le, &context->target_sid); memcpy(context->target_comm, t->comm, TASK_COMM_LEN); } @@ -2384,6 +2384,7 @@ int audit_signal_info(int sig, struct task_struct *t) struct audit_aux_data_pids *axp; struct audit_context *ctx = audit_context(); kuid_t uid = current_uid(), auid, t_uid = task_uid(t); + struct lsm_export le; if (auditd_test_task(t) && (sig == SIGTERM || sig == SIGHUP || @@ -2394,7 +2395,8 @@ int audit_signal_info(int sig, struct task_struct *t) audit_sig_uid = auid; else audit_sig_uid = uid; - security_task_getsecid(current, &audit_sig_sid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &audit_sig_sid); } if (!audit_signals || audit_dummy_context()) @@ -2407,7 +2409,8 @@ int audit_signal_info(int sig, struct task_struct *t) ctx->target_auid = audit_get_loginuid(t); ctx->target_uid = t_uid; ctx->target_sessionid = audit_get_sessionid(t); - security_task_getsecid(t, &ctx->target_sid); + security_task_getsecid(t, &le); + lsm_export_secid(&le, &ctx->target_sid); memcpy(ctx->target_comm, t->comm, TASK_COMM_LEN); return 0; } @@ -2428,7 +2431,8 @@ int audit_signal_info(int sig, struct task_struct *t) axp->target_auid[axp->pid_count] = audit_get_loginuid(t); axp->target_uid[axp->pid_count] = t_uid; axp->target_sessionid[axp->pid_count] = audit_get_sessionid(t); - security_task_getsecid(t, &axp->target_sid[axp->pid_count]); + security_task_getsecid(t, &le); + lsm_export_secid(&le, &axp->target_sid[axp->pid_count]); memcpy(axp->target_comm[axp->pid_count], t->comm, TASK_COMM_LEN); axp->pid_count++; diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index 00922f55dd9e..7f245d593c8f 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -1554,11 +1554,13 @@ int __init netlbl_unlabel_defconf(void) int ret_val; struct netlbl_dom_map *entry; struct netlbl_audit audit_info; + struct lsm_export le; /* Only the kernel is allowed to call this function and the only time * it is called is at bootup before the audit subsystem is reporting * messages so don't worry to much about these values. */ - security_task_getsecid(current, &audit_info.secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &audit_info.secid); audit_info.loginuid = GLOBAL_ROOT_UID; audit_info.sessionid = 0; diff --git a/net/netlabel/netlabel_user.h b/net/netlabel/netlabel_user.h index 4a397cde1a48..2dbc4276bdcc 100644 --- a/net/netlabel/netlabel_user.h +++ b/net/netlabel/netlabel_user.h @@ -48,7 +48,10 @@ static inline void netlbl_netlink_auditinfo(struct sk_buff *skb, struct netlbl_audit *audit_info) { - security_task_getsecid(current, &audit_info->secid); + struct lsm_export le; + + security_task_getsecid(current, &le); + lsm_export_secid(&le, &audit_info->secid); audit_info->loginuid = audit_get_loginuid(current); audit_info->sessionid = audit_get_sessionid(current); } diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c index 5fb7127bbe68..be714afc9fd2 100644 --- a/security/integrity/ima/ima_appraise.c +++ b/security/integrity/ima/ima_appraise.c @@ -51,11 +51,13 @@ bool is_ima_appraise_enabled(void) int ima_must_appraise(struct inode *inode, int mask, enum ima_hooks func) { u32 secid; + struct lsm_export le; if (!ima_appraise) return 0; - security_task_getsecid(current, &secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &secid); return ima_match_policy(inode, current_cred(), secid, func, mask, IMA_APPRAISE | IMA_HASH, NULL); } diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 357edd140c09..1e3cfaf0ee5c 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -336,9 +336,11 @@ static int process_measurement(struct file *file, const struct cred *cred, int ima_file_mmap(struct file *file, unsigned long prot) { u32 secid; + struct lsm_export le; if (file && (prot & PROT_EXEC)) { - security_task_getsecid(current, &secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &secid); return process_measurement(file, current_cred(), secid, NULL, 0, MAY_EXEC, MMAP_CHECK); } @@ -363,8 +365,10 @@ int ima_bprm_check(struct linux_binprm *bprm) { int ret; u32 secid; + struct lsm_export le; - security_task_getsecid(current, &secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &secid); ret = process_measurement(bprm->file, current_cred(), secid, NULL, 0, MAY_EXEC, BPRM_CHECK); if (ret) @@ -388,8 +392,10 @@ int ima_bprm_check(struct linux_binprm *bprm) int ima_file_check(struct file *file, int mask) { u32 secid; + struct lsm_export le; - security_task_getsecid(current, &secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &secid); return process_measurement(file, current_cred(), secid, NULL, 0, mask & (MAY_READ | MAY_WRITE | MAY_EXEC | MAY_APPEND), FILE_CHECK); @@ -500,6 +506,7 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size, { enum ima_hooks func; u32 secid; + struct lsm_export le; if (!file && read_id == READING_FIRMWARE) { if ((ima_appraise & IMA_APPRAISE_FIRMWARE) && @@ -521,7 +528,8 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size, } func = read_idmap[read_id] ?: FILE_CHECK; - security_task_getsecid(current, &secid); + security_task_getsecid(current, &le); + lsm_export_secid(&le, &secid); return process_measurement(file, current_cred(), secid, buf, size, MAY_READ, func); } diff --git a/security/security.c b/security/security.c index 6ba1187c9655..22ea709593f3 100644 --- a/security/security.c +++ b/security/security.c @@ -1690,12 +1690,10 @@ int security_task_getsid(struct task_struct *p) return call_int_hook(task_getsid, 0, p); } -void security_task_getsecid(struct task_struct *p, u32 *secid) +void security_task_getsecid(struct task_struct *p, struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - call_void_hook(task_getsecid, p, &data); - lsm_export_secid(&data, secid); + lsm_export_init(l); + call_void_hook(task_getsecid, p, l); } EXPORT_SYMBOL(security_task_getsecid); From patchwork Tue Apr 9 19:18:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892055 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E2B1F922 for ; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D73C02875F for ; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CC267288EA; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 69C6F2875F for ; Tue, 9 Apr 2019 19:19:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726530AbfDITTM (ORCPT ); Tue, 9 Apr 2019 15:19:12 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:42929 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726827AbfDITTL (ORCPT ); Tue, 9 Apr 2019 15:19:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837550; bh=GPvWJDPXSClM26o50qIJxfLTG9C4Dy1cxsnhyj+//zw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=m+6x4nqWu0WnUE1/B2PO8l2fj6eWP5iMIMQxef05FgrhKAlp3mBNYITqLc06W4dsYhg2+Xit3g/OOPcjaAyfjiEGS4DnhCF7IsWswNtRmzVM4K0veqqG4k8kAY8r5C3qPH4aQTxFsU2ByXmId9ggVL0gqt4ATEEhfeARDnI4NnVRyW+Rj56kRPZoqatkNWMw/e9hcHr02ObEpZ8+XCNQZs1L8Ov/2i0S/gEfuJVAJ1hi/wQFzORerBMKb2OuJnlQssut/dt9sUgUF0bjVhBPKKE+uizUXSXaHIdRq9jNT/BiaMO/sr4csLsh5nqJPRSaDKBql/rxywHnOtz7ivJT5A== X-YMail-OSG: ZGHeldUVM1mPfGd_lgbA.9D9ejeUBvFMpwEaPcdS3uvnsepN6iQifB1.uG6P7CR vlP2dR406II884VsZyoStBlqlgZdjO2cjI1j0AbNGu5bsCcry1gTE3wtNndnOULSzI8eW3U.GrFB TOSC94.8akTSUYfE3euK1w3zVONUgRtTGlzFMv2j4_jDrjXdg6DFVy_eZEuvu6rweIvBulWWorwJ 4ModVHQECQ7Nq.t_rjX130Dco_0FQKKIY1_uSOZxsljWz1jPqqYaHvJWEgoWsT0lpNMAGMAKvws6 ZEcbDnOYmGkIv10w5zkvJsFtnlh5M.qC1m3_EKoYPE3MZ1FjrUu6Ixz94OcZtNBW4UZAt4GRqlMj GuHYdKmUbVLIYRoqCLKomrpk_f8y5z0GeLr7uk1Wc6FIfhJ0A65gNCY5zSzGKoUIkbFd8Y.MhvEF .mdTaXXTxJj89z_QfJCH4TdiUt33bmivE96ExKWvMFR2P8UvutbUdQbp8x5Xog_PVWoxJ.qZOS7K SApFI3Srlm8zy.n2NxlAMqWnyee2a5MjR9KPlNtvKLiGh1u1XaofSBh3o.mSI75o6eSKio0TxPRL YH62buT2xXeHLqpXogJjYpLH8ssSn1lJJyinKCPnvGmMpzD7dZbLxBzOo1.CQVA0ctujzTfvxRjP yhju5IyHaAILWQEz5x2kBz5W.hlgLAwlFmAW7s3_aaVjJAXDIPPbXNC8XvXqeEWJbQbj3LFFkOh8 BR.UmoxKdb2Gi.cT.OJw.V9cL20WAHoB.0NT4LqEBKPvwThT.6PEcMhyn5rP5YUi96uPkuDKP7N0 VyvBbXAXnzHMPOQEGe5EhXnoys4HynFHXNE7HBrzb91Oknwkkm6veDwK5_FsfruGa1rWMjZtrgJf Q6fynojCKOKsUDHfsOxZutXHoUjoBoYTW3aOH29uWjaIQuPYIOkGz97BLkOXWydiSHgkc_AcidQ. Hgv0cxyGPfAuNCiJW_DEiwomOqBZK.jOwxnRsPX2DQT.LCtjtTHdNFQgQfSla6rjR6PGGgMHMlCz lGV33J4k9OFRWCq03qe.Kr3azKMvvsk_6lRCb8EXqW6ogtBW7TRdSq1abWlgZt_g2Jlkb6bXkGMU JIcSDrCjcZs6JzxmF_wtRJWjd5SC0mwHlYO0.MlPkljzxoK88gRtCtFw- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:10 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:08 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 21/59] LSM: Use lsm_export in security_inode_getsecid Date: Tue, 9 Apr 2019 12:18:10 -0700 Message-Id: <20190409191848.1380-22-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_inode_getsecid to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 7 ++++--- kernel/auditsc.c | 5 ++++- security/integrity/ima/ima_policy.c | 4 +--- security/security.c | 8 +++----- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index ae4c058abc5e..2d04687c3fa9 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -356,7 +356,7 @@ int security_inode_killpriv(struct dentry *dentry); int security_inode_getsecurity(struct inode *inode, const char *name, void **buffer, bool alloc); int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags); int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size); -void security_inode_getsecid(struct inode *inode, u32 *secid); +void security_inode_getsecid(struct inode *inode, struct lsm_export *l); int security_inode_copy_up(struct dentry *src, struct cred **new); int security_inode_copy_up_xattr(const char *name); int security_file_permission(struct file *file, int mask); @@ -852,9 +852,10 @@ static inline int security_inode_listsecurity(struct inode *inode, char *buffer, return 0; } -static inline void security_inode_getsecid(struct inode *inode, u32 *secid) +static inline void security_inode_getsecid(struct inode *inode, + struct lsm_export *l) { - *secid = 0; + lsm_export_init(l); } static inline int security_inode_copy_up(struct dentry *src, struct cred **new) diff --git a/kernel/auditsc.c b/kernel/auditsc.c index b06ffcf9bb9f..71daead619e5 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -1908,13 +1908,16 @@ static inline int audit_copy_fcaps(struct audit_names *name, void audit_copy_inode(struct audit_names *name, const struct dentry *dentry, struct inode *inode, unsigned int flags) { + struct lsm_export le; + name->ino = inode->i_ino; name->dev = inode->i_sb->s_dev; name->mode = inode->i_mode; name->uid = inode->i_uid; name->gid = inode->i_gid; name->rdev = inode->i_rdev; - security_inode_getsecid(inode, &name->osid); + security_inode_getsecid(inode, &le); + lsm_export_secid(&le, &name->osid); if (flags & AUDIT_INODE_NOEVAL) { name->fcap_ver = -1; return; diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 090ef8ceb116..280f2410e551 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -326,7 +326,6 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, return false; for (i = 0; i < MAX_LSM_RULES; i++) { int rc = 0; - u32 osid; struct lsm_export le; int retried = 0; @@ -337,8 +336,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, case LSM_OBJ_USER: case LSM_OBJ_ROLE: case LSM_OBJ_TYPE: - security_inode_getsecid(inode, &osid); - lsm_export_to_all(&le, osid); + security_inode_getsecid(inode, &le); rc = security_filter_rule_match(&le, rule->lsm[i].type, Audit_equal, diff --git a/security/security.c b/security/security.c index 22ea709593f3..e12ce930dfd9 100644 --- a/security/security.c +++ b/security/security.c @@ -1387,12 +1387,10 @@ int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer } EXPORT_SYMBOL(security_inode_listsecurity); -void security_inode_getsecid(struct inode *inode, u32 *secid) +void security_inode_getsecid(struct inode *inode, struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - call_void_hook(inode_getsecid, inode, &data); - lsm_export_secid(&data, secid); + lsm_export_init(l); + call_void_hook(inode_getsecid, inode, l); } int security_inode_copy_up(struct dentry *src, struct cred **new) From patchwork Tue Apr 9 19:18:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892061 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BEAE7922 for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AF526288B3 for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4076288EA; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4F543288BD for ; Tue, 9 Apr 2019 19:19:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726794AbfDITTO (ORCPT ); Tue, 9 Apr 2019 15:19:14 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:34974 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726783AbfDITTK (ORCPT ); Tue, 9 Apr 2019 15:19:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837549; bh=0JVMKDcgnflVCRGzj1eTsOgE9xKpgnePntpCQbXL9EQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=tyMD3GTbyw/vdCcTM2ieqkO8uwXlmONh83yPKDMNBFGCtTUF3h17j9pgSfHkeG+pLnIOA0MuQu6RIdmmVeippFG0sG97DR9MmthFiZE+Ga2/QepaA+58xzUcTFblNZeOl1hfsJzJrZvvRVzZPvXQOnci0YPkBOxVpMON7mWFtX9rXBt/tI8UeS+/ts8u7f1EETj4Ow0J1FyufHF1Bzie3CE+ZOLy2f84rME/DsPeBhjL5z1OUuadMO4FTNioAEXAaaZflFX6ZskS0BmYwG9izdf8rfS1/0E4TRfd3AqGwBEv9eSOBz65rSOLa/NWuQUfz67wede3y4knhgz+mcJHcA== X-YMail-OSG: KO0u5AYVM1m5IzRm61hJT081_F82jN2Rl7AqWyjGNDKV6aVxVtA53JiFZpDUadY MsLZ0C3UXSV6Ktz8WYKnR4wM20R55hkPLJcQCzQGcVOhcnZ7Kbl1hyJ418RqNuF.aIsXDKVe7fpp IqVJ7RdR5ZxEGUr9iyqkmD0BPRteBVeuZL2WzIki2E004wzYllrUePZ8w3KEc4I9D1pZRBW_4eCt .9Azwk134piaE5mLHTDwQ3bmrtfOGO1DUpn0b8YaUYGpxDPg1ZQc5KTQV.ru2.tjbKyGhWtfLNUR OVO5BczJCYJ8VKCkijUlIXhlRgvLKqq.04iM2Ter5xGKti70Cec5BrctRENo5ExDWpURqVz78alu .c0A1v7b1Nq5C7qG1hLJ5_UP5Q7G91c4MI_pNkEffnSQOIrf36No12wj2hU9DutzR205d8suo3Kr PZ.wJYODCAuq.kgZ_MkeT_TCXMLbzud1.ntfaxV1dJmZ2YJrHTdmTkH.1FBmn3nUMVpr_bSaLdEt G1jmuBtvpmGD08exa0EGWhQktrFWm4crQD2mbO3XK7gHZmqjLvNAdVGkKMU7nVUl2xf4CG2z7Wdi E_y0rritRmoiUurcm4AteRdtU8ZGPk45QJ0CCWob4MQa44pTPblyafUfMBHbZqxhRdX_Fsw8LbOv 4pGGzqhvzw9mbPASKbDUwhduqtvQkJLhmU13_qCG15L8C.azvz.HYhNr9BQOCDwehBimolCzzSkU uii9l8xzSoKxyVQ9YZNZDnaj23Lrw18Y0q8E8qT2eTg53WIpPUsQNClOW5QH7dCQ9wLB6h78KEbN ZLPWRgbyyWNFNV.C.dtX.fYbG_OvQexWbCs.ZxxpgaEpmgLDz.GeRyqSuj..mIG26JeZBsFxZ0cq OOM0aiY57dWKArwzs.FV76ImSpb.pLDQxazwtcjxHurh5mTsSkBRBxJ0gcaCcPc.O.DCSrrqZRjI KGxEsRdLm8sa1mzBACf_SLipTA2vzFz6ItdWjBiulvvFrMVYVUpMNAqGj5VJ4O8w.qZPZDrxrWyj rjyJimlqkFW4D_gdwI68I7s.zwQqGLtOpA9BZR_aSQt9hwPWYoM9sV4P4p6uLtnGl74UlZpj8OUk UrZD_UWdfVA6KFUR5l6i4Y3EInSjnCnGV2kCgwbN0PFKRzPKRXW9psrk- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:09 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:09 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 22/59] LSM: Use lsm_export in security_cred_getsecid Date: Tue, 9 Apr 2019 12:18:11 -0700 Message-Id: <20190409191848.1380-23-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_cred_getsecid to use the lsm_export structure instead of a u32 secid. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 2 +- security/integrity/ima/ima_main.c | 3 ++- security/security.c | 8 +++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index 2d04687c3fa9..40aa7b9f3c83 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -381,7 +381,7 @@ int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); void security_cred_free(struct cred *cred); int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); void security_transfer_creds(struct cred *new, const struct cred *old); -void security_cred_getsecid(const struct cred *c, u32 *secid); +void security_cred_getsecid(const struct cred *c, struct lsm_export *l); int security_kernel_act_as(struct cred *new, struct lsm_export *l); int security_kernel_create_files_as(struct cred *new, struct inode *inode); int security_kernel_module_request(char *kmod_name); diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 1e3cfaf0ee5c..f5efa9ef270d 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -374,7 +374,8 @@ int ima_bprm_check(struct linux_binprm *bprm) if (ret) return ret; - security_cred_getsecid(bprm->cred, &secid); + security_cred_getsecid(bprm->cred, &le); + lsm_export_secid(&le, &secid); return process_measurement(bprm->file, bprm->cred, secid, NULL, 0, MAY_EXEC, CREDS_CHECK); } diff --git a/security/security.c b/security/security.c index e12ce930dfd9..69983ad68233 100644 --- a/security/security.c +++ b/security/security.c @@ -1604,12 +1604,10 @@ void security_transfer_creds(struct cred *new, const struct cred *old) call_void_hook(cred_transfer, new, old); } -void security_cred_getsecid(const struct cred *c, u32 *secid) +void security_cred_getsecid(const struct cred *c, struct lsm_export *l) { - struct lsm_export data = { .flags = LSM_EXPORT_NONE }; - - call_void_hook(cred_getsecid, c, &data); - lsm_export_secid(&data, secid); + lsm_export_init(l); + call_void_hook(cred_getsecid, c, l); } EXPORT_SYMBOL(security_cred_getsecid); From patchwork Tue Apr 9 19:18:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892083 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2F0621515 for ; Tue, 9 Apr 2019 19:19:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2184D2875F for ; Tue, 9 Apr 2019 19:19:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 159FE288EA; Tue, 9 Apr 2019 19:19:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AD5D92875F for ; Tue, 9 Apr 2019 19:19:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726826AbfDITTT (ORCPT ); Tue, 9 Apr 2019 15:19:19 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:38120 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726844AbfDITTQ (ORCPT ); Tue, 9 Apr 2019 15:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=j+cuqymh91xxGIirxxPJDUSMb0L9mw21aX8dKstwmqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=OvWj9qZ02uNEWwbVQt/75N/N+nI6Df32LE+2fvD9j88Syy2lyCpuL+BcZbJPRcg8d8x3ZchuxEOYz3awB7yUwfwpYq/rpb/pmblldo96E2NmafO68qKR1QZ7s28WFBiyOocrRoKMPISTZMfT25CW/at+kZkh6TGxKb+DzX7blL6JBqSwn90upFkABmUP5XVMAXzU/Ai/3Jc7Gzjp/B7fzCaTbCrTrMl46AaUuzu8qvDMlTScMFlO2GHSWjOSPaDxAinHezefwxhByEd2VPR+ppidyjfAzK6ziXRJwSNc48dtOiudkClBbl6OKUhNyAjhilyZTGldxxAsbbSribEoRg== X-YMail-OSG: 6J7QVgwVM1lKWmNpo43mkcpnDZd2TKM.DkuPUQP6wIj0CTt5OU39mB1CGy3zED7 FzqdvDZfSmzfFeK6BrcgeIai3inSMxAniB.bvjZCr7EK35wED8h_Jgf48sD_Dl37OgP4mW7L4XB3 INVXVGXSjFY64wnmi0Z.jNwaPzZeBWpaufgD2nhDYabR4kPg7HcBZXMil979rNbYoKTXiXeVzSfC DuRJiGutNpch0SI1a_6iSsg4e9YHaDmY7S5xbXMTtoDNMIVMm1Sfyv9xEgzkC4xr_8XYY0ClNMCW 0iXGQ5yuvZohMvWo8351TJTWP96bGBFyQ6IVqJd_dG.CSF3SKNoG3e3NKe.GnkVVvGcFhminX6Vm Z7Rr5A7TGbj6G_oS0eHwy75FDmAYNdOLbz.aMtBpaGwcUTJ6prbUxHzBZ_UkO74NpSeobiDWi8tr 8QvGBG0_q7zDvcfRctuB6tWREi7Z8yAHgHAUmtTrxnUuuB.uM_L5Aia674TWXe_Qg9J7lQ_9PjBQ fk4_yAh3QCO0bV.8dgTjWUVhroxKg_d8ZIM7Yxbx0ho4Up5Fi6wMIKRmKqaKgK2oTuSsckPAMVg_ ujyXx8DpKSW.0ecD3sXyHMXUwtcXBoWAQs1nDNblLhkRmLWMVZq0xiqMgt8uW6GcZllMH73dFe4S FNGcYJujYTDGUGdLtkLUOLFygIkF3lpuXyc6JY4aUGyTiqBYNk9G3nlwQ9v06Nu9aYoqy8Emm.QR HimU_EdY1T_sQZftQWkhDB3RwokRGi1FyVETDpbZ6nm0iso9E29xzPMTwFVXw9bkZIAo2nQFAusF TS7ALBRP8i3T544uWqu1JjfGcSAo5QWx9aziInvOzwwfnIGmokY5Pqb3W711lIhfUjkrGZxI9fDH Sud2fSanjQWUghoSPcdBUN08X3noW5tiUS9TLePrdaqFpiHxJ7N3YAr9UA84JB7DmICilc9EFe4W gytbf5OQKfiRv_1lMLt_AU1qbl2JBBjdDxh_OU0KQdDgMUWt6AmhdAGDvIB3e2jGrRrWbH9aAmZZ .LfAildkUr2pItslXsM.MP62rHMShOoHyMC4VNLmYDVCs5KT6u7DTi5XxQmrtvHxlo1H5ERv_IyC hFOzdYCE5NBj9kx7inQ64ZI3iLD67p1UzU6yJvTrjN3rldhdebtJq6ms- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:10 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 23/59] Audit: Change audit_sig_sid to audit_sig_lsm Date: Tue, 9 Apr 2019 12:18:12 -0700 Message-Id: <20190409191848.1380-24-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Remove lsm_export scaffolding around audit_sig_sid by changing the u32 secid into an lsm_export structure named audit_sig_lsm. Signed-off-by: Casey Schaufler --- include/linux/security.h | 7 +++++++ kernel/audit.c | 18 ++++++++---------- kernel/audit.h | 2 +- kernel/auditsc.c | 3 +-- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index 40aa7b9f3c83..e76d7a9dbe50 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -93,6 +93,13 @@ static inline void lsm_export_init(struct lsm_export *l) memset(l, 0, sizeof(*l)); } +static inline bool lsm_export_any(struct lsm_export *l) +{ + return (((l->flags & LSM_EXPORT_SELINUX) && l->selinux) || + ((l->flags & LSM_EXPORT_SMACK) && l->smack) || + ((l->flags & LSM_EXPORT_APPARMOR) && l->apparmor)); +} + /** * lsm_export_secid - pull the useful secid out of a lsm_export * @data: the containing data structure diff --git a/kernel/audit.c b/kernel/audit.c index fa4c5544eb37..5226e2af9498 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -135,9 +135,9 @@ static u32 audit_backlog_limit = 64; static u32 audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME; /* The identity of the user shutting down the audit system. */ -kuid_t audit_sig_uid = INVALID_UID; -pid_t audit_sig_pid = -1; -u32 audit_sig_sid = 0; +kuid_t audit_sig_uid = INVALID_UID; +pid_t audit_sig_pid = -1; +struct lsm_export audit_sig_lsm; /* Records can be lost in several ways: 0) [suppressed in audit_alloc] @@ -1429,23 +1429,21 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) } case AUDIT_SIGNAL_INFO: len = 0; - if (audit_sig_sid) { - struct lsm_export le; - - lsm_export_to_all(&le, audit_sig_sid); - err = security_secid_to_secctx(&le, &ctx, &len); + if (lsm_export_any(&audit_sig_lsm)) { + err = security_secid_to_secctx(&audit_sig_lsm, &ctx, + &len); if (err) return err; } sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL); if (!sig_data) { - if (audit_sig_sid) + if (lsm_export_any(&audit_sig_lsm)) security_release_secctx(ctx, len); return -ENOMEM; } sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid); sig_data->pid = audit_sig_pid; - if (audit_sig_sid) { + if (lsm_export_any(&audit_sig_lsm)) { memcpy(sig_data->ctx, ctx, len); security_release_secctx(ctx, len); } diff --git a/kernel/audit.h b/kernel/audit.h index 958d5b8fc1b3..64498850c52b 100644 --- a/kernel/audit.h +++ b/kernel/audit.h @@ -338,7 +338,7 @@ extern char *audit_unpack_string(void **bufp, size_t *remain, size_t len); extern pid_t audit_sig_pid; extern kuid_t audit_sig_uid; -extern u32 audit_sig_sid; +extern struct lsm_export audit_sig_lsm; extern int audit_filter(int msgtype, unsigned int listtype); diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 71daead619e5..41f540037a93 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -2398,8 +2398,7 @@ int audit_signal_info(int sig, struct task_struct *t) audit_sig_uid = auid; else audit_sig_uid = uid; - security_task_getsecid(current, &le); - lsm_export_secid(&le, &audit_sig_sid); + security_task_getsecid(current, &audit_sig_lsm); } if (!audit_signals || audit_dummy_context()) From patchwork Tue Apr 9 19:18:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892069 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E37AE1390 for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8B422875F for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BCC3F288BD; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 44E682875F for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726836AbfDITTR (ORCPT ); Tue, 9 Apr 2019 15:19:17 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:38875 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726847AbfDITTQ (ORCPT ); Tue, 9 Apr 2019 15:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=V6rKCyElicKZF/0fKwJbU08oHRiI1KUrOSjj+nGJXW4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=LkMSVqkyT/1q3UjwuyS0dRCnBhCTkJnPynPY/4ZJCCg8JTmXNL650HrUi1tn56z2bFtvmGe/kETjA7kATy9Cm/fYPFzH30zrbqSRlzzIyyskD5VCHcOmXRt5X+mbWWqZYG+QThymoRU/oIT28RI6pKT2l85lsq7BfEFv8O4N1NZo4TLz1Mwce0ibcYJmxVsz1aE4Je8BB94lAqcxVQpEdrZOL5TM/qDCD1+tYXyYEmpOZaE/CQfiZf0xjU4lVQXjoWqppc0vqd3UAya7zejAR/CVDZaz71RkVH5KSqlGL42xd5E5/bMettMOEjSeyfCMqmtYaVlwK22hpRvjeCMe5Q== X-YMail-OSG: lVo6sJsVM1lNRnwnGeg9TZT7OfsNIiVJmc6iAni9au6vXHBvbUApD45k7.0pdpg XbblQZqUJdGa62xT_NBAJXWq.5hZe8PEG8UNrvYiaoKoswRQbzYTdgZB.Pg.7ZBzjooJflPCMPHo 3D0p1OplbO7IZrsLIKSwwtZPAQGsjreC9EULGGMJ7ebzHNAfMzMGkfCqZFSItw9cxd2AfVoYUAds tGgUqdYsBM682Wyf9cT3bEHdBlczylpS14CUCwuU6SgB1pmPkIrVsNRBgDOAHFs.7AymIj85agcH aLVDx940BnIdGa9vRPBEaIMgBaxWqvdlhtRuZHkIT_mlX88WAhymE0qeq0.3His62iY00LCdF9Dc KeyF.vEDdzyOeWsLGqNh1meqj2olffz44e_6DpdE6e5u_TgqFwvIo7t5FlKOe6H8SgmfZI_GS2cd Fs3BXGPZrwxX5gZniLBvysMOmcmOyEprk1_unTVj7FUjK0Uee4qrU19ftAPgjRRv1vfpzV8Ev05d 71rI7xwpCzaoqeNfoIF.K0pHMzpwch3iQcbXSzTQ5pRQAMqBBRARHq78qkNEnT8lT6pSCHvTj3gV CsY8YbDXsbEcVl5sCvueTPDNtjhuX2CYSgp9WX6dxXwyyZtPQ1Fpz8i0dkg3aRaErTWJ9Mw9Ltm8 TW6bFG5Vah74Yrb7Ws6jwls0T0_fyywzVw7JasUOk4o8l5mTRj79Y5eN5PDLkEMQG6976kwGztVE sM6p_PgjJY9nWIctW02wjfZKAMFVDrNuL2vg9t0P.Dg9gPK3gypeME8roqZbniYsK3pb7LMTevLZ iDTBUJKkBPhtIfQpt01wiOEhvVS3CPiwuDL.jTXx5ClX.FE6UkVGNp7_tB_v1wc3DhqRhZ19KBsQ YjRItL3mOZaLMXpKqTJ19kiHemF9M9dGVLoyinom6LwfWMLmlYduMazTsqbx1hz3.lj2ay6gi9kS wvJxpYiC.UtRDFLoHbNf3ff6LdfLCU3q1iSeO_PGxniQLlk99wxg5jqc9gUDctXkeybdvNfstbWg jKTVBR5eI7otDBBC6ltZjzfqxQavjS17juzIIRBgvhnFFmX2Nt9RfPuLJ.HzfrLHXk4ef1ONbxhv wVtN5P7JKdaMSoGpCRIO90sOyuGrZmkxZY5SHf.MzjsAFqJ5DJsn9Zg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:10 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 24/59] Audit: Convert target_sid to an lsm_export structure Date: Tue, 9 Apr 2019 12:18:13 -0700 Message-Id: <20190409191848.1380-25-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert target_sid to be an lsm_export structure instead of a u32 secid. Clean out the associated scaffolding. Change the name to target_lsm to be descriptive. Signed-off-by: Casey Schaufler --- kernel/audit.h | 3 ++- kernel/auditsc.c | 30 ++++++++++++------------------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/kernel/audit.h b/kernel/audit.h index 64498850c52b..e2e6fa911f9c 100644 --- a/kernel/audit.h +++ b/kernel/audit.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -147,7 +148,7 @@ struct audit_context { kuid_t target_auid; kuid_t target_uid; unsigned int target_sessionid; - u32 target_sid; + struct lsm_export target_lsm; char target_comm[TASK_COMM_LEN]; struct audit_tree_refs *trees, *first_trees; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 41f540037a93..75d181029d40 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -112,7 +112,7 @@ struct audit_aux_data_pids { kuid_t target_auid[AUDIT_AUX_PIDS]; kuid_t target_uid[AUDIT_AUX_PIDS]; unsigned int target_sessionid[AUDIT_AUX_PIDS]; - u32 target_sid[AUDIT_AUX_PIDS]; + struct lsm_export target_lsm[AUDIT_AUX_PIDS]; char target_comm[AUDIT_AUX_PIDS][TASK_COMM_LEN]; int pid_count; }; @@ -937,14 +937,14 @@ static inline void audit_free_context(struct audit_context *context) } static int audit_log_pid_context(struct audit_context *context, pid_t pid, - kuid_t auid, kuid_t uid, unsigned int sessionid, - u32 sid, char *comm) + kuid_t auid, kuid_t uid, + unsigned int sessionid, + struct lsm_export *l, char *comm) { struct audit_buffer *ab; char *ctx = NULL; u32 len; int rc = 0; - struct lsm_export le; ab = audit_log_start(context, GFP_KERNEL, AUDIT_OBJ_PID); if (!ab) @@ -953,9 +953,8 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, audit_log_format(ab, "opid=%d oauid=%d ouid=%d oses=%d", pid, from_kuid(&init_user_ns, auid), from_kuid(&init_user_ns, uid), sessionid); - if (sid) { - lsm_export_to_all(&le, sid); - if (security_secid_to_secctx(&le, &ctx, &len)) { + if (lsm_export_any(l)) { + if (security_secid_to_secctx(l, &ctx, &len)) { audit_log_format(ab, " obj=(none)"); rc = 1; } else { @@ -1525,7 +1524,7 @@ static void audit_log_exit(void) axs->target_auid[i], axs->target_uid[i], axs->target_sessionid[i], - axs->target_sid[i], + &axs->target_lsm[i], axs->target_comm[i])) call_panic = 1; } @@ -1534,7 +1533,7 @@ static void audit_log_exit(void) audit_log_pid_context(context, context->target_pid, context->target_auid, context->target_uid, context->target_sessionid, - context->target_sid, context->target_comm)) + &context->target_lsm, context->target_comm)) call_panic = 1; if (context->pwd.dentry && context->pwd.mnt) { @@ -1711,7 +1710,7 @@ void __audit_syscall_exit(int success, long return_code) context->aux = NULL; context->aux_pids = NULL; context->target_pid = 0; - context->target_sid = 0; + lsm_export_init(&context->target_lsm); context->sockaddr_len = 0; context->type = 0; context->fds[0] = -1; @@ -2363,14 +2362,12 @@ int __audit_sockaddr(int len, void *a) void __audit_ptrace(struct task_struct *t) { struct audit_context *context = audit_context(); - struct lsm_export le; context->target_pid = task_tgid_nr(t); context->target_auid = audit_get_loginuid(t); context->target_uid = task_uid(t); context->target_sessionid = audit_get_sessionid(t); - security_task_getsecid(t, &le); - lsm_export_secid(&le, &context->target_sid); + security_task_getsecid(t, &context->target_lsm); memcpy(context->target_comm, t->comm, TASK_COMM_LEN); } @@ -2387,7 +2384,6 @@ int audit_signal_info(int sig, struct task_struct *t) struct audit_aux_data_pids *axp; struct audit_context *ctx = audit_context(); kuid_t uid = current_uid(), auid, t_uid = task_uid(t); - struct lsm_export le; if (auditd_test_task(t) && (sig == SIGTERM || sig == SIGHUP || @@ -2411,8 +2407,7 @@ int audit_signal_info(int sig, struct task_struct *t) ctx->target_auid = audit_get_loginuid(t); ctx->target_uid = t_uid; ctx->target_sessionid = audit_get_sessionid(t); - security_task_getsecid(t, &le); - lsm_export_secid(&le, &ctx->target_sid); + security_task_getsecid(t, &ctx->target_lsm); memcpy(ctx->target_comm, t->comm, TASK_COMM_LEN); return 0; } @@ -2433,8 +2428,7 @@ int audit_signal_info(int sig, struct task_struct *t) axp->target_auid[axp->pid_count] = audit_get_loginuid(t); axp->target_uid[axp->pid_count] = t_uid; axp->target_sessionid[axp->pid_count] = audit_get_sessionid(t); - security_task_getsecid(t, &le); - lsm_export_secid(&le, &axp->target_sid[axp->pid_count]); + security_task_getsecid(t, &axp->target_lsm[axp->pid_count]); memcpy(axp->target_comm[axp->pid_count], t->comm, TASK_COMM_LEN); axp->pid_count++; From patchwork Tue Apr 9 19:18:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892089 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5994F1800 for ; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4738C2875F for ; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3BB5C2893A; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B14432875F for ; Tue, 9 Apr 2019 19:19:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726853AbfDITTU (ORCPT ); Tue, 9 Apr 2019 15:19:20 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:32772 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726828AbfDITTQ (ORCPT ); Tue, 9 Apr 2019 15:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=NLJ9WRLN3mqnoEKmIr7GkqEF3TZIbdXheKniGVooL5g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=WYA2au8L2/MMz/JEEcHXhdL3TpapnhpuigtszhArGDU5DqG77DhGDqkX3A6FxztxRG/cDpNs4XJpY/eS94mMAJZMhR1qK2l2kakWrarQlrNRmgzElu1BhMGDhGFmEx3fGz2N7aaicvd7HQCacoYHuuTgxKBfgdkhmvRwmU4l77+8GLRT6ZaYQNp4XR3xoAW7gBMxB1l2Jgmrvme1RisdMv2cKFuTkiuCrf0MZdK1+X/fkCw/CA+FzSvW8ySj+JZULc+L8hvDIliienk3J1A0M+JwfZRuQS4wD75KfJl4iYYfMdxKsTZz0/XEill3NXY/912cfaUa/Yja9urwQ5PJBg== X-YMail-OSG: cfnj6X8VM1kb3wQbYs7gDyvCI2920QK2cXNFRqq1o4kgy27WQy3h3TvZEAN6nHQ rwYnQVLHZh8Bt2.dcZvOCJus_wWBzTKrDpoL0cXgxkaFa4b2h_YQGL00VC.2GW_EVspzf5DCLdhP HbWPAGdJRrodVNX7ebAJKcNeOrk8LW4LS919T9hiFSlD5nfB78CHqlqR7r1JWVqbrZxo6r72MDv_ 4rAPxtqYHevC.bhhG64qOFQeYTIIbrDK3E6xwj3j_nkjC.iCKZIwB6eCff5AsKh3l2lQoPCfvppa 8FFjCHLMCeMK1kuYhcG59EyZkqhtSid.E4Y48HpvC4JeS.q6473WRlevtVb1MMydfBPaj5fsHPvQ 3J0w55hw6Z22UicahmLOXYKmcFj9WSALWocc7Nri1Cw7Uvi4SJt3RMqSYeqtQHevdsr.FrdHjWfT 5wMnA2SZO33OJv3EmIsYg8ol8exUsqNNmWFLxePisn08ggC00a7FxZ86.XEBVSsoQnLYhHOhimWU 8n3JdMgESisHH1p0lOS0jnn0Suvh7k4J0WI0Nn0b9EP5b49QNxp7Qufgv8ydbz5v4MpVv73.CtcO fhte3dpDjC8ePjMYMt7omE4K_28tuiSH.iIGUsU78kR62pTWWNXURxN32xPY5ibd7m5H4kgkGMMI Pi8mNTmcR7sHAyOpAm4sDDW1g4aaaKUF0zadfh81PnJBN94ubMFVBhVUjixj9ulVlJePJeZxlPTX .sFUIRpv70xC2Pqixxoi6_RhNc2sJQFx2TZcWxbIHbYUfSUBA2IVyzHroYIR2V4VhwsFNr00VcHZ GjxA08dwFYw7wASFmCXicJ73vsrDB3rxgkZ3bteKW0PZIZSiocjLy1vRzb8BGCHnCBw1idaZ1lmW bwBfEuiU7PTjbVihgWfdXwU0yrYrJMNT0KMSyle2i5E4Up8xS5gH0quE70cWrStTPVWr1Wv1F464 Imt0mR1gt3KURmO5EHP8.eHXjC_gpFVOrsxlMO1nbZbxx1Kkc1m2Rvgs0f48Da01EX0gNNK9z7mw adi.z9_pONHcr_UoRW2XBlif5VjtyzgSVVJX4JHrTpEWaeRGI5Nwc2wHnl12C59QDM.1jp.M7zP8 D53IaXlCYbVeWNl28zfzwFHa9xCmfXwiDrh36K89h01ENIJtB3TL6ug-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:11 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 25/59] Audit: Convert osid to an lsm_export structure Date: Tue, 9 Apr 2019 12:18:14 -0700 Message-Id: <20190409191848.1380-26-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert osid to be an lsm_export structure instead of a u32 secid. Clean out the associated scaffolding. Change the name to olsm to be descriptive. Signed-off-by: Casey Schaufler --- kernel/audit.c | 4 +--- kernel/audit.h | 4 ++-- kernel/auditsc.c | 36 ++++++++++++------------------------ 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/kernel/audit.c b/kernel/audit.c index 5226e2af9498..d83d1f05c95d 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -2073,12 +2073,10 @@ int audit_log_task_context(struct audit_buffer *ab) char *ctx = NULL; unsigned len; int error; - u32 sid; struct lsm_export le; security_task_getsecid(current, &le); - lsm_export_secid(&le, &sid); - if (!sid) + if (!lsm_export_any(&le)) return 0; error = security_secid_to_secctx(&le, &ctx, &len); diff --git a/kernel/audit.h b/kernel/audit.h index e2e6fa911f9c..7d2fcdf0bc94 100644 --- a/kernel/audit.h +++ b/kernel/audit.h @@ -91,7 +91,7 @@ struct audit_names { kuid_t uid; kgid_t gid; dev_t rdev; - u32 osid; + struct lsm_export olsm; struct audit_cap_data fcap; unsigned int fcap_ver; unsigned char type; /* record type */ @@ -165,7 +165,7 @@ struct audit_context { kuid_t uid; kgid_t gid; umode_t mode; - u32 osid; + struct lsm_export olsm; int has_perm; uid_t perm_uid; gid_t perm_gid; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 75d181029d40..d64775f4bb1b 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -645,17 +645,15 @@ static int audit_filter_rules(struct task_struct *tsk, if (f->lsm_rule) { /* Find files that match */ if (name) { - lsm_export_to_all(&le, name->osid); result = security_audit_rule_match( - &le, + &name->olsm, f->type, f->op, f->lsm_rule); } else if (ctx) { list_for_each_entry(n, &ctx->names_list, list) { - lsm_export_to_all(&le, n->osid); if (security_audit_rule_match( - &le, + &n->olsm, f->type, f->op, f->lsm_rule)) { @@ -667,8 +665,7 @@ static int audit_filter_rules(struct task_struct *tsk, /* Find ipc objects that match */ if (!ctx || ctx->type != AUDIT_IPC) break; - lsm_export_to_all(&le, ctx->ipc.osid); - if (security_audit_rule_match(&le, + if (security_audit_rule_match(&ctx->ipc.olsm, f->type, f->op, f->lsm_rule)) ++result; @@ -1187,19 +1184,17 @@ static void show_special(struct audit_context *context, int *call_panic) context->socketcall.args[i]); break; } case AUDIT_IPC: { - u32 osid = context->ipc.osid; + struct lsm_export *l = &context->ipc.olsm; audit_log_format(ab, "ouid=%u ogid=%u mode=%#ho", from_kuid(&init_user_ns, context->ipc.uid), from_kgid(&init_user_ns, context->ipc.gid), context->ipc.mode); - if (osid) { + if (lsm_export_any(l)) { char *ctx = NULL; u32 len; - struct lsm_export le; - lsm_export_to_all(&le, osid); - if (security_secid_to_secctx(&le, &ctx, &len)) { - audit_log_format(ab, " osid=%u", osid); + if (security_secid_to_secctx(l, &ctx, &len)) { + audit_log_format(ab, " osid=(unknown)"); *call_panic = 1; } else { audit_log_format(ab, " obj=%s", ctx); @@ -1346,14 +1341,12 @@ static void audit_log_name(struct audit_context *context, struct audit_names *n, from_kgid(&init_user_ns, n->gid), MAJOR(n->rdev), MINOR(n->rdev)); - if (n->osid != 0) { + if (lsm_export_any(&n->olsm)) { char *ctx = NULL; u32 len; - struct lsm_export le; - lsm_export_to_all(&le, n->osid); - if (security_secid_to_secctx(&le, &ctx, &len)) { - audit_log_format(ab, " osid=%u", n->osid); + if (security_secid_to_secctx(&n->olsm, &ctx, &len)) { + audit_log_format(ab, " osid=(unknown)"); if (call_panic) *call_panic = 2; } else { @@ -1907,16 +1900,13 @@ static inline int audit_copy_fcaps(struct audit_names *name, void audit_copy_inode(struct audit_names *name, const struct dentry *dentry, struct inode *inode, unsigned int flags) { - struct lsm_export le; - name->ino = inode->i_ino; name->dev = inode->i_sb->s_dev; name->mode = inode->i_mode; name->uid = inode->i_uid; name->gid = inode->i_gid; name->rdev = inode->i_rdev; - security_inode_getsecid(inode, &le); - lsm_export_secid(&le, &name->osid); + security_inode_getsecid(inode, &name->olsm); if (flags & AUDIT_INODE_NOEVAL) { name->fcap_ver = -1; return; @@ -2266,13 +2256,11 @@ void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) void __audit_ipc_obj(struct kern_ipc_perm *ipcp) { struct audit_context *context = audit_context(); - struct lsm_export le; context->ipc.uid = ipcp->uid; context->ipc.gid = ipcp->gid; context->ipc.mode = ipcp->mode; context->ipc.has_perm = 0; - security_ipc_getsecid(ipcp, &le); - lsm_export_secid(&le, &context->ipc.osid); + security_ipc_getsecid(ipcp, &context->ipc.olsm); context->type = AUDIT_IPC; } From patchwork Tue Apr 9 19:18:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892071 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D37C01390 for ; Tue, 9 Apr 2019 19:19:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BC9EE2875F for ; Tue, 9 Apr 2019 19:19:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B14DD28924; Tue, 9 Apr 2019 19:19:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EB2872875F for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726730AbfDITTR (ORCPT ); Tue, 9 Apr 2019 15:19:17 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:39640 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726814AbfDITTR (ORCPT ); Tue, 9 Apr 2019 15:19:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=WdnFJNhqMM887DyLRoNCsL62MRkkEDeoMEYJROIA3Sw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=OmSpPmrzMO11FJI/w9Pu6kSt1UnK0hcCC9tAwxP79J+jgmo8o+nM1quZPGjNVrYYatcs3JHKinUmiVkhpL9VEYJ822j0AIk2T+u1r2hrwbTaPWhHUcP0VN/NV/DpNIvREzkhkqRcPwdK4e8j7myCS8HnhWSf9Ecqa47JftQ+e8viLUOdIufmpoaqGmC+lRkMe2s3orBDWBEeE+q36GEaqA67G2G1doh4MAJgwxTcPS8IVmxIO17hNo/kWugf2wACs89nKB5r9WFgzA9K9ljDUR1aNH0jiLu40al3RrDd3HgDh9Y8GPElsD6Z9vSHIs8M2K26K2lxKCOV6zHac5WoTg== X-YMail-OSG: b_XjZREVM1lMzadR2eJyrTRrBvUK2kZlF5NeTMBiji9t8Az7r1XBn0T3LrYZlPM IZFaAgDmXmWJdoRlV6S_Q55sQ5Wh7AZfkO4xtF1WPT0xE_74y0e1atno5SI6lfHdGyBe6hlZl7KM Yk6oyxrT2wjmgA4qYg8Y5nB7jIDefwMzrEdp6xeKcUXlTTXaixjR2G7B2FRFSv1dGR7a1slD2gWS pOHThZ5qWRBnpaIAWhBx1kFIJcchoDfuEB.ytj4J95fXYcr2vhshgJy0hrIeZRGstxf_.LYoZNbF h7ti53EilDy4285Q3YCHMJekCDTCakVagC3mVd0r7TgnRHDu4m_0LQMd_fOqrFXSG.Mr0Z30P3Vb mwlSc9kmHSMOrhqs7mmhcm2d2UPmh3eYLfK2HJk.rsxjxSzDw3PCkeT.4mTjWYTK13CHbgZkpnpm G.LPqGwqNv34WgDzOoX1RlVxtUJMAiaw1fdv7hf5rXpkRs2JHWJygdsG0b8aZ7td0zBd1NXmSfkl lq7widGkCFuFdEl2irgUH0gYe1iQYWd8jBj_ish33vfHNFiOJJbEz0COakeDyn3roLdzTG8ANrNi EIsX9VIF2NQ_4cKFubk_DJck_4Z09h3uNvJ65qsdKvtBP4rDnjOhk.aNl0g7w.RdMOQ.CanN9eGC ljTZUpfEHPbcZtOZfjBFW5e05XJnN_fiK68qdIFjvikz8amUtkaE.ECOC1vqRXtNH5Ekf7xGUXqO TdDqM5matxc.vicTj.5RD3Ld5w06yixNwyysoDvvUrkvSnFXqI2Wgi3d1MjAYugvzFpzsU9X7e7h lG2H2wraVL1D8xnMBpDcAiBwzGv0xXA5orWhDt13JTMPQND8a03HaPPB0c.gJseTfFaSpXg5MKTZ OZRBuEZv2aIfv6CdCEwfboowZFc1G71KQV2X5ZkKs25CskFkGh3yiGhK5rUfDl7Xif0pp9MGoWGa cT59a_GvsAFfxHvk4BCnd_E_lbIAHiREb9tdmpDU4sRMSG3QOhUl2kYaQPaaPALTrqtf5NQq8hhU vJEHUb0KTbL8krFa7i9hFoAw5sA85gNavXlh4KjUJt_CTII1PZeHlTBCnO.1IR3RJHoNkkx6Kex1 ThWXfPnDK34Eq_drPuOCLWqOE9xrGfLYw_GoBbSDULX_KDFGUo5zKt8s- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:12 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 26/59] IMA: Clean out lsm_export scaffolding Date: Tue, 9 Apr 2019 12:18:15 -0700 Message-Id: <20190409191848.1380-27-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Clean out the scaffolding used in the lsm_export transition. This requires changing some of the IMA internal interfaces from u32 to struct lsm_export pointers. Signed-off-by: Casey Schaufler --- security/integrity/ima/ima.h | 10 ++++++---- security/integrity/ima/ima_api.c | 9 +++++---- security/integrity/ima/ima_appraise.c | 4 +--- security/integrity/ima/ima_main.c | 25 ++++++++----------------- security/integrity/ima/ima_policy.c | 14 +++++++------- 5 files changed, 27 insertions(+), 35 deletions(-) diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h index d213e835c498..8b109ad0de2e 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h @@ -192,8 +192,9 @@ enum ima_hooks { }; /* LIM API function definitions */ -int ima_get_action(struct inode *inode, const struct cred *cred, u32 secid, - int mask, enum ima_hooks func, int *pcr); +int ima_get_action(struct inode *inode, const struct cred *cred, + struct lsm_export *l, int mask, enum ima_hooks func, + int *pcr); int ima_must_measure(struct inode *inode, int mask, enum ima_hooks func); int ima_collect_measurement(struct integrity_iint_cache *iint, struct file *file, void *buf, loff_t size, @@ -213,8 +214,9 @@ void ima_free_template_entry(struct ima_template_entry *entry); const char *ima_d_path(const struct path *path, char **pathbuf, char *filename); /* IMA policy related functions */ -int ima_match_policy(struct inode *inode, const struct cred *cred, u32 secid, - enum ima_hooks func, int mask, int flags, int *pcr); +int ima_match_policy(struct inode *inode, const struct cred *cred, + struct lsm_export *l, enum ima_hooks func, int mask, + int flags, int *pcr); void ima_init_policy(void); void ima_update_policy(void); void ima_update_policy_flag(void); diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index c7505fb122d4..7e493af96134 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c @@ -159,7 +159,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename, * ima_get_action - appraise & measure decision based on policy. * @inode: pointer to inode to measure * @cred: pointer to credentials structure to validate - * @secid: secid of the task being validated + * @l: LAM data of the task being validated * @mask: contains the permission mask (MAY_READ, MAY_WRITE, MAY_EXEC, * MAY_APPEND) * @func: caller identifier @@ -175,14 +175,15 @@ void ima_add_violation(struct file *file, const unsigned char *filename, * Returns IMA_MEASURE, IMA_APPRAISE mask. * */ -int ima_get_action(struct inode *inode, const struct cred *cred, u32 secid, - int mask, enum ima_hooks func, int *pcr) +int ima_get_action(struct inode *inode, const struct cred *cred, + struct lsm_export *l, int mask, enum ima_hooks func, + int *pcr) { int flags = IMA_MEASURE | IMA_AUDIT | IMA_APPRAISE | IMA_HASH; flags &= ima_policy_flag; - return ima_match_policy(inode, cred, secid, func, mask, flags, pcr); + return ima_match_policy(inode, cred, l, func, mask, flags, pcr); } /* diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c index be714afc9fd2..ba64b0b61383 100644 --- a/security/integrity/ima/ima_appraise.c +++ b/security/integrity/ima/ima_appraise.c @@ -50,15 +50,13 @@ bool is_ima_appraise_enabled(void) */ int ima_must_appraise(struct inode *inode, int mask, enum ima_hooks func) { - u32 secid; struct lsm_export le; if (!ima_appraise) return 0; security_task_getsecid(current, &le); - lsm_export_secid(&le, &secid); - return ima_match_policy(inode, current_cred(), secid, func, mask, + return ima_match_policy(inode, current_cred(), &le, func, mask, IMA_APPRAISE | IMA_HASH, NULL); } diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index f5efa9ef270d..22b973e743fe 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -169,8 +169,8 @@ void ima_file_free(struct file *file) } static int process_measurement(struct file *file, const struct cred *cred, - u32 secid, char *buf, loff_t size, int mask, - enum ima_hooks func) + struct lsm_export *l, char *buf, loff_t size, + int mask, enum ima_hooks func) { struct inode *inode = file_inode(file); struct integrity_iint_cache *iint = NULL; @@ -192,7 +192,7 @@ static int process_measurement(struct file *file, const struct cred *cred, * bitmask based on the appraise/audit/measurement policy. * Included is the appraise submask. */ - action = ima_get_action(inode, cred, secid, mask, func, &pcr); + action = ima_get_action(inode, cred, l, mask, func, &pcr); violation_check = ((func == FILE_CHECK || func == MMAP_CHECK) && (ima_policy_flag & IMA_MEASURE)); if (!action && !violation_check) @@ -335,13 +335,11 @@ static int process_measurement(struct file *file, const struct cred *cred, */ int ima_file_mmap(struct file *file, unsigned long prot) { - u32 secid; struct lsm_export le; if (file && (prot & PROT_EXEC)) { security_task_getsecid(current, &le); - lsm_export_secid(&le, &secid); - return process_measurement(file, current_cred(), secid, NULL, + return process_measurement(file, current_cred(), &le, NULL, 0, MAY_EXEC, MMAP_CHECK); } @@ -364,19 +362,16 @@ int ima_file_mmap(struct file *file, unsigned long prot) int ima_bprm_check(struct linux_binprm *bprm) { int ret; - u32 secid; struct lsm_export le; security_task_getsecid(current, &le); - lsm_export_secid(&le, &secid); - ret = process_measurement(bprm->file, current_cred(), secid, NULL, 0, + ret = process_measurement(bprm->file, current_cred(), &le, NULL, 0, MAY_EXEC, BPRM_CHECK); if (ret) return ret; security_cred_getsecid(bprm->cred, &le); - lsm_export_secid(&le, &secid); - return process_measurement(bprm->file, bprm->cred, secid, NULL, 0, + return process_measurement(bprm->file, bprm->cred, &le, NULL, 0, MAY_EXEC, CREDS_CHECK); } @@ -392,12 +387,10 @@ int ima_bprm_check(struct linux_binprm *bprm) */ int ima_file_check(struct file *file, int mask) { - u32 secid; struct lsm_export le; security_task_getsecid(current, &le); - lsm_export_secid(&le, &secid); - return process_measurement(file, current_cred(), secid, NULL, 0, + return process_measurement(file, current_cred(), &le, NULL, 0, mask & (MAY_READ | MAY_WRITE | MAY_EXEC | MAY_APPEND), FILE_CHECK); } @@ -506,7 +499,6 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size, enum kernel_read_file_id read_id) { enum ima_hooks func; - u32 secid; struct lsm_export le; if (!file && read_id == READING_FIRMWARE) { @@ -530,8 +522,7 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size, func = read_idmap[read_id] ?: FILE_CHECK; security_task_getsecid(current, &le); - lsm_export_secid(&le, &secid); - return process_measurement(file, current_cred(), secid, buf, size, + return process_measurement(file, current_cred(), &le, buf, size, MAY_READ, func); } diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 280f2410e551..fae4718d24f9 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -286,7 +286,7 @@ static void ima_lsm_update_rules(void) * Returns true on rule match, false on failure. */ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, - const struct cred *cred, u32 secid, + const struct cred *cred, struct lsm_export *l, enum ima_hooks func, int mask) { int i; @@ -345,8 +345,7 @@ static bool ima_match_rules(struct ima_rule_entry *rule, struct inode *inode, case LSM_SUBJ_USER: case LSM_SUBJ_ROLE: case LSM_SUBJ_TYPE: - lsm_export_to_all(&le, secid); - rc = security_filter_rule_match(&le, + rc = security_filter_rule_match(l, rule->lsm[i].type, Audit_equal, rule->lsm[i].rule); @@ -394,7 +393,7 @@ static int get_subaction(struct ima_rule_entry *rule, enum ima_hooks func) * @inode: pointer to an inode for which the policy decision is being made * @cred: pointer to a credentials structure for which the policy decision is * being made - * @secid: LSM secid of the task to be validated + * @l: LSM data of the task to be validated * @func: IMA hook identifier * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC) * @pcr: set the pcr to extend @@ -406,8 +405,9 @@ static int get_subaction(struct ima_rule_entry *rule, enum ima_hooks func) * list when walking it. Reads are many orders of magnitude more numerous * than writes so ima_match_policy() is classical RCU candidate. */ -int ima_match_policy(struct inode *inode, const struct cred *cred, u32 secid, - enum ima_hooks func, int mask, int flags, int *pcr) +int ima_match_policy(struct inode *inode, const struct cred *cred, + struct lsm_export *l, enum ima_hooks func, int mask, + int flags, int *pcr) { struct ima_rule_entry *entry; int action = 0, actmask = flags | (flags << 1); @@ -418,7 +418,7 @@ int ima_match_policy(struct inode *inode, const struct cred *cred, u32 secid, if (!(entry->action & actmask)) continue; - if (!ima_match_rules(entry, inode, cred, secid, func, mask)) + if (!ima_match_rules(entry, inode, cred, l, func, mask)) continue; action |= entry->flags & IMA_ACTION_FLAGS; From patchwork Tue Apr 9 19:18:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892067 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6A3E81800 for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 56AB7288B3 for ; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4AC93288EA; Tue, 9 Apr 2019 19:19:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0C1A288B3 for ; Tue, 9 Apr 2019 19:19:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726517AbfDITTR (ORCPT ); Tue, 9 Apr 2019 15:19:17 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:39228 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726836AbfDITTQ (ORCPT ); Tue, 9 Apr 2019 15:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=W6Zq0mDGK6AXoBDD4bxoIumDend/XN6awxL+92CHmPI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=gM/mtTIuOeFpLzbJmm+WZpkZ06F82uBq+NTLPgSzQwuBxNrR/c1omKJwpDVk/75n2HDCEhuk8vkqQLhYS8YvSxm42BGG+k17uBH9EfiIxxOtp8rZr2uNI0ctMcUUz4aJRqRf5syLEx41E7HwHXDnLmwyALabaK4K0Mg6FvTYWMKr8bmtR+88PmQNY4LE3AIQAF8JgVOaR2NcEv1W6O2Xej0rDxjTpi/kT1bVthiO8hrbXny3uoQiidCAxsBgH615T3uDQ4iwyGvXkz14xmqyu9yqoxJ5DrkQ6dRUkDfnDlXYpOo+GGXDn37I+5VLvTIEcVio8lifYmaBU3hki2vHSg== X-YMail-OSG: exD7ILkVM1m8H7F2wZ4k9rDRYy71SuSk5GeV3jDwMMtfF7ef13qiMK1xA3Sh7ZA z39xC3Ekr6NR8QvqYjzRBGMST5gA.DqgNR_8fD28V7P9G6m5gSWJ6z3qbeGqIU2MFx3btvyO4YkG kRd3Kv8mJDJ.r4KVi6hy2aedliuHilpIKskNmeSXRyLVML.phua.MepmgWLcH_2rj.LRNas6gr7Z cWw.vLLDRmRg8clCCJRnZL9CPWQ0yK5H1F_0eowtJ7dRfDGJEeZFSe0axRQUrwXFPGd2WmrQbz.W egXcPtZ_i6fTWWgtnV0hXVeDxJT1p1GM7hF6aO21nYt_yYUsbrhtDC0AlMSMOas_sGUgzH03JbNr W30MmeRA6xB4a74Wt0FBC_4Rn.JOFErmumJ7Bqm6Nb1H20RRJ1O4ThULQlgHHQt6QxxUJLeu1jHN jEQF14JyP1CsDO3XkIzR.3LdCejvhQJ7YQ0hujaTK6J_r2f.8Ftwl19YYLZ04sXNXjx0TA2cxGfI Mtvjz1rCh247msHph13TUJRCY2qewr4dm9ow7UbvM.2_VTz9MTLYogDcohMj8RKS0Z4gsa1hphu6 UaPsBlEXO1iUhzlBZLnV2Xe8zKYlKNoXgZb4W4TjH4ALRvN1v2kPqGnpB6UkpGzpWgYXrLTPu7Nl t.si5YUWQ1hmWLw.NOn.gsxZ0qTPmGvgpzJCqBbsV1.f8INYf5yrLZmGFpgQMflWd84AEraylUBK lvjZkWMcDtuH71rL7y1y7P_L.VHafVGB8WqnUeNO1ocJdL2IQ5jFPXVWwQQ_AJFNaetYVMwDh45m gXaL.g8atrHpY.LX2EJV_vcRC3h2Xt_sR2E1dgyqWcQOJBSzGuQoJWAy3hrGakm26YDcT5AbjQ9u pLzNzxeh2QUk4uogbpVjC5VJIPAD7UD_Zm0ELWQDPF0TAz1JZplZKeg6U10xGeoBe.Rj3F77sbyJ fPKRRtTCINO.ycCZ_UxhOJnnkN5Sy4WYRQVWkHO9SZXiHGfELhhYqAK8r4n84URg2yKJUn8cpiFG tkRgC2EZn12H2mn4TUf8EzYl6cHOcMwE0rlt3kLGJhBt7iiNsHv7dPrz8YzPyBfqA__NgLGLUc0f X0awwizhQCvSYX2U1C_SwPSoBuTdNLsDZ.ODBsKBzj4DcsGe4dmPpIQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:12 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 27/59] NET: Store LSM access information in the socket blob for UDS Date: Tue, 9 Apr 2019 12:18:16 -0700 Message-Id: <20190409191848.1380-28-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP UNIX domain socket connections don't have sufficient space in the socket buffer (skb) secmark for more than one Linux security module (LSM) to pass data. Expanding the secmark has been ruled out as an option. Store the necessary data in the socket security blob pointed to by the skb socket. Signed-off-by: Casey Schaufler --- include/linux/security.h | 20 +++++++++++++++++++- net/unix/af_unix.c | 14 ++++++++------ security/security.c | 17 ++++++++++++++++- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index e76d7a9dbe50..c413dcc1905a 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -71,6 +71,7 @@ struct ctl_table; struct audit_krule; struct user_namespace; struct timezone; +struct sk_buff; enum lsm_event { LSM_POLICY_CHANGE, @@ -100,6 +101,22 @@ static inline bool lsm_export_any(struct lsm_export *l) ((l->flags & LSM_EXPORT_APPARMOR) && l->apparmor)); } +static inline bool lsm_export_equal(struct lsm_export *l, struct lsm_export *m) +{ + if (l->flags != m->flags || l->flags == LSM_EXPORT_NONE) + return false; + if (l->flags & LSM_EXPORT_SELINUX && + (l->selinux != m->selinux || l->selinux == 0)) + return false; + if (l->flags & LSM_EXPORT_SMACK && + (l->smack != m->smack || l->smack == 0)) + return false; + if (l->flags & LSM_EXPORT_APPARMOR && + (l->apparmor != m->apparmor || l->apparmor == 0)) + return false; + return true; +} + /** * lsm_export_secid - pull the useful secid out of a lsm_export * @data: the containing data structure @@ -143,6 +160,8 @@ static inline void lsm_export_to_all(struct lsm_export *data, u32 secid) LSM_EXPORT_APPARMOR; } +extern struct lsm_export *lsm_export_skb(struct sk_buff *skb); + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts); @@ -174,7 +193,6 @@ extern int cap_task_setnice(struct task_struct *p, int nice); extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); struct msghdr; -struct sk_buff; struct sock; struct sockaddr; struct socket; diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 4d4107927ba2..afe9c9f1adeb 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -143,21 +143,23 @@ static struct hlist_head *unix_sockets_unbound(void *addr) #ifdef CONFIG_SECURITY_NETWORK static void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { - lsm_export_secid(&scm->le, &(UNIXCB(skb).secid)); + struct lsm_export *ble = lsm_export_skb(skb); + + *ble = scm->le; } static inline void unix_set_secdata(struct scm_cookie *scm, struct sk_buff *skb) { - lsm_export_to_all(&scm->le, UNIXCB(skb).secid); + struct lsm_export *ble = lsm_export_skb(skb); + + scm->le = *ble; } static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb) { - u32 best_secid; - - lsm_export_secid(&scm->le, &best_secid); - return (best_secid == UNIXCB(skb).secid); + return lsm_export_equal(&scm->le, lsm_export_skb(skb)); } + #else static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) { } diff --git a/security/security.c b/security/security.c index 69983ad68233..015c38c882ba 100644 --- a/security/security.c +++ b/security/security.c @@ -46,7 +46,22 @@ static struct kmem_cache *lsm_file_cache; static struct kmem_cache *lsm_inode_cache; char *lsm_names; -static struct lsm_blob_sizes blob_sizes __lsm_ro_after_init; + +/* Socket blobs include infrastructure managed data */ +static struct lsm_blob_sizes blob_sizes __lsm_ro_after_init = { + .lbs_sock = sizeof(struct lsm_export), +}; + +/** + * lsm_export_skb - pointer to the lsm_export associated with the skb + * @skb: the socket buffer + * + * Returns a pointer to the LSM managed data. + */ +struct lsm_export *lsm_export_skb(struct sk_buff *skb) +{ + return skb->sk->sk_security; +} /* Boot-time LSM user choice */ static __initdata const char *chosen_lsm_order; From patchwork Tue Apr 9 19:18:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892079 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 80E591A2B for ; Tue, 9 Apr 2019 19:19:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6B2D72875F for ; Tue, 9 Apr 2019 19:19:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5F62A28924; Tue, 9 Apr 2019 19:19:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 029832875F for ; Tue, 9 Apr 2019 19:19:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726876AbfDITTT (ORCPT ); Tue, 9 Apr 2019 15:19:19 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:38483 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726851AbfDITTQ (ORCPT ); Tue, 9 Apr 2019 15:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=DXZobVlHba7NLExIjhRRZRkmastZlDIkiPrs42J8njM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=aFMCtvrgQ7lFHQgHXD1XE6F/YJ1R/YJxYwTWVPecLGyBr2+sv19CLwB47N6FHwIRUe/PVurJx6vNULTKpWxZptDxWL9I3UHj9LjTafTWXTifsFfJDOzQlCpfIxeXOPPk68K3kOXtAJ8II1zV9zxVSc96nzZ7TcMVjXfiDtAUdn4nu8TjozRGkX3bd7+RgtJFJbBR6Zf9B7VOdl9J7Aagdjglkd662EGdPl0e5OEWv8g65qVSRUYPR9J3LLV61NKiIykt1EkFxo1ajXOtf/vxrebPbpHTUH2yXvI3ERTcFMy/vsMgzusmUQcckSrUjvVfTkVezBRO59jh10JVKD/7JQ== X-YMail-OSG: sI2ZHkIVM1kH9jJl7ChkR_kxRuR6QvwBtNV9uBQOUwoEw4nvKrrIDB31utbXl7Z ExDQJTbHGKO8q4gchEK0w_4KRiYUw.6bl3kbPFg5YVs8hSSPXyS.01KUrMPE60NID6vs4d_Hm1Zh 4H0dTgJZ9FKq5Jc6m_hXlYJxizeVVjEr0y43b2xC3zUYKPuUeoKQdm5WvHHAw9umTy.JOcWu435C IAzU6rEkfyPXV3B7IdWPtqmlzFSsGpF6g1W0ANMDc1meBi14ztYqZDCbExbKjr1KuU3Db4pZt0Pb 80owm2VPGFHvSJyK_0YpkQHbCRhKLkVSZGfXu7p8trPoKjoYCEWlaUM.AxXoAO3L.Q2ggkVLw7X8 uU3InfN9IdkUFgK3JyM.r_Sk_7rnB84OlG4HnFVCAcYMawhNnFISEriuwsNy58f5_BGhEKg0f_fL u0y35748o5yvIBwGrPe6l.J4kcripaJU4xjNgdOLhxcaYEYP3lBzURhrjhYdp0N2gCTJ80aMvQE2 ka_nTqWfx8TQSEQAIsZpxczaHRQkX4D6M7S4eZAq_LTRV3izgVF90qA_w8.OG6yVVjsRqA7hBsuJ 60vLAQhJCIYq_wCGcttaps7ee2.eIx9zT7lCOEr1MRaesf3FTMStdEuYqncUntdQrjEcezYsL1gs iM_BCwwfWAh7R2usd9k.8qbj6bH6ChCVMPn45ASuG9TbFkx_4NGc56LGOlNarbc.BRSqEhRuDDe6 CnVCte3dly2BNtN5i42sRO.Aux7San49nfrkyyADQpjkPyMicH3OwfV8RjY84CVcgFV6UBZLtht_ Dxno5H9bc.BsPFEplCNMEJotUKTiIg8nPjWW6wTb32qieqC1qQyXps_mnssEcWFHBbK9crE4RDCh bm2B.OyASHFLqs25oF8g_73KHEzR6IyaFYO.xeHZC6TfVU9SnXClAWWmUeZQUOhIW7rnQJEuEP3t S.VKod0shbgXqu9HUASlwa91qH4InxvCN2b5WHQ_vaWaN9rSmPJu0WhoeDi6qys67xkAJQ.8X81r xKE2PWzuhy34RGfHhfgVs32abEDfoqdp9uM1xq8lv0HsPcuzo1emcStJW4l7C5b37.qjW1cWNYmx qvR.Onw1Es4r6wxtL4F1ZYaTzRDavEba37R5CiUSIMpLlX.XkW1p8KxE- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:13 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 28/59] NET: Remove scaffolding on secmarks Date: Tue, 9 Apr 2019 12:18:17 -0700 Message-Id: <20190409191848.1380-29-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Replace the lsm_export scaffolding in xt_SECMARK.c This raises an issue, in that Smack users have been using SECMARK_MODE_SEL, which is suppoed to be exclusively for SELinux. This is worked around in the code, but not fully addressed. Signed-off-by: Casey Schaufler --- net/netfilter/xt_SECMARK.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/netfilter/xt_SECMARK.c b/net/netfilter/xt_SECMARK.c index 2def8d8898e6..9a2a97c200a2 100644 --- a/net/netfilter/xt_SECMARK.c +++ b/net/netfilter/xt_SECMARK.c @@ -55,6 +55,7 @@ static int checkentry_lsm(struct xt_secmark_target_info *info) info->secctx[SECMARK_SECCTX_MAX - 1] = '\0'; info->secid = 0; + lsm_export_init(&le); err = security_secctx_to_secid(info->secctx, strlen(info->secctx), &le); if (err) { if (err == -EINVAL) @@ -63,7 +64,12 @@ static int checkentry_lsm(struct xt_secmark_target_info *info) return err; } - lsm_export_secid(&le, &info->secid); + /* Smack is cheating, using SECMARK_MODE_SEL */ + if (le.selinux) + info->secid = le.selinux; + else + info->secid = le.smack; + if (!info->secid) { pr_info_ratelimited("unable to map security context \'%s\'\n", info->secctx); From patchwork Tue Apr 9 19:18:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892087 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4386A1390 for ; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3675F288B3 for ; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B0CC28938; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D2621288B3 for ; Tue, 9 Apr 2019 19:19:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726828AbfDITTU (ORCPT ); Tue, 9 Apr 2019 15:19:20 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:36503 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726761AbfDITTP (ORCPT ); Tue, 9 Apr 2019 15:19:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837555; bh=n7o8QGFhmUAYfuuVtS2cjj7dSkuQxOxyGbWYP+SBOLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ftgsKBJDlSA7vkxZDHM6QPTCuIIP7eGCHvBnZyul8Hpw6mmYAgYLN/ocvo98DVGGXLz9dD4d+YvbZdgcPMExm/j5qaN3tW+zy1mAefRlIsRAI1eQi7DXISRIJHXVtEi+V3mmN0iIhaH6AqyPejcJewpTAh1SGrRPQXxsw28JCC7aSmBXX4aI7XcO4DrvERq2VvQ6Z66Nn36DRAksNyQAUxBXqgSWz+Wpk19jQRbO4oJdQuDXoir9F4mgH2cw3zvBNg/Z2MBpAD9qIxR5QIlajG6JTFZAti3vFS4U0MGuoBnQAAf0GoTgT6EVgK6tzJDqMxWVqDHpbia3oR5AiyVP8g== X-YMail-OSG: WnHKRRsVM1nHavz8TTySgZ2KOMN3wr85pwvQ9DOn652z34CxPt1kxa5x5KgfqYw _Bl4fMcMCRjJjq9U4DEL_87p0nOKMm4WksoR8ICKlUKgw0WUn_icyeCMAkT_q.3qv45RtqfUNcdt Xx2zS6W9u1CPrgaMLBaELznrS9.DrRpeFzUizoHFdLnVXcc0e_L.VYB6fH4PWd6TnTMRMAgVsTIs j9CsbEXrD.D5aceizsrEsqqfyG07HKoKHS_13XqYt064EmlavAu.lPax6geQ9ZrOS4z67Z1vA.ok qNyCsorLwGXNN4eO40HvlWMOVaa2SIgmpSWc9L3QjaKbxYhBLidb1IAwrsIwn3EccRxmOC91eFqG J8wzuNn232UjxlnfM_VdwzlvWgtYdAaDOEu_lF1M_o9s6BBnVU_MY7Bp38LnHwhbKInncro7GYNf hHfDA0t6qDhHiXt80fjGdRmvRmEGVWOzVs829QPbHSAUFksuUUw4KtkeunLZkCJg5PgbeYp2fFHJ 6bKeuPhhFMyytBRJTtQdyDyD._596MMHOJ29gQkx1x1PJPFWH_P.2Ggef7rCnTiA2dOn3c5W4y1O I.oG4vPUYTCwxCsnbqlko2AphEKFptipdISZ4j91VWcWPSc3GQpdRfsZx68NdgVFeiEXI_EGZBfP 95prCccrl4ugQtis_eg6_g8VSugP7dGIt9aEJy73paSbhUC1VKu17fCA0o2k9uSdeEMOqRCBaJeJ w0s8fcG4pK78fBX8gq1PlCDxKgGilkXxZfPH8XfuB6Qc4UfmBX4c0UbSw9aC2HyouNhfN6DSxNAf ZquF7liWDplF5SnSCcEj7RF403H9aI6u6NcZpvXqsiLG7L1GbD6LIDABsDQDZkQSNm0yChO3.Hfb an7jzkmYmj4IDpZHBVpeSdIWX1Y0DtOnMkA8boPqtlIp7CncdDh9uPhttm9pYRmGtKZi1sETXtmc XKR4wg3YMYe7Jogg6mbbv2NGJGZn2fRESJfT4FBAwYZddXL8W..WzMvIDilKgIJFsGmWqag0BmJW fdZp2Nt4W34d0fS9Kk2BXGmCXTaiISy2S.sbodHibD_En6bSPv.mmaIeBQ39qmnVzLxo8IPe8thZ 5pygf6O2bluXNzg3.GNZgzEG4xOOkStA9Y4ypk4QkuFgc1PtBB2rUMZk- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:15 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp401.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 70e478474b1bad4641d6b335096eeb36; Tue, 09 Apr 2019 19:19:14 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 29/59] NET: Remove scaffolding on new secmarks Date: Tue, 9 Apr 2019 12:18:18 -0700 Message-Id: <20190409191848.1380-30-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Replace the lsm_export scaffolding in nft_meta. Signed-off-by: Casey Schaufler --- net/netfilter/nft_meta.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c index 598bea8e4799..a1d3dab5bc25 100644 --- a/net/netfilter/nft_meta.c +++ b/net/netfilter/nft_meta.c @@ -580,11 +580,17 @@ static int nft_secmark_compute_secid(struct nft_secmark *priv) u32 tmp_secid = 0; int err; + lsm_export_init(&le); err = security_secctx_to_secid(priv->ctx, strlen(priv->ctx), &le); if (err) return err; - lsm_export_secid(&le, &tmp_secid); + /* Use the "best" secid */ + if (le.selinux) + tmp_secid = le.selinux; + else + tmp_secid = le.smack; + if (!tmp_secid) return -ENOENT; From patchwork Tue Apr 9 19:18:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892163 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 745DD1515 for ; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 685C928179 for ; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5B826285B3; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 026D828924 for ; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726814AbfDITTf (ORCPT ); Tue, 9 Apr 2019 15:19:35 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:46575 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726864AbfDITTT (ORCPT ); Tue, 9 Apr 2019 15:19:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837558; bh=KYlupIPcbLYAYHDyLLLdG0LtZrXeMUYE6GpZUguvURc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=p4JyosjeSbLDfODgDfManUkPi3MeCMOsfDIXxAZxkTopYo15bp4OOoTXlvXjDM9DHeQ5MRtJH2vQ+Iorxi4L0AsqESTz96hbCke57t6lDHmUGG2/SH+W9hU4LSRyEAgaUK31dY3sfMo+3LID7wCRoyOePjHiKDOHyEk1Qd8NUPjOTno5dV6w5Q5RaiH7+RWfzkYoZQn3gNAu1ohpVMKDbUipfjPz/vG6nq31YEa32kR1cXkiIQDYuQmKnJx3k13hPuX1mlD0QsCmRwkaVjpHTPA7uD9Wcq9k1kcIviiitiMZvg5ABTlxt+2CpHuIEHHgd0RZ3CQisFBXFGbiTo/QVQ== X-YMail-OSG: XVbOrfoVM1mIl8KF0.he596RFCzFdz1l4q3jr38tFoIE13XWOLSSzg_XUb5uvC4 KrS27y66KTRqwf2KwEH1m2LZlTEN6JzOlCJNfvELHgiWDMNU3AcGudSXMwZOTI9PDAs.Wleiair2 tubH7Fb28GU_RpRzpkY7oVlSg4Qn2tCbwlemNuSi5OBEUGFrzMGalIvaIgTq68eSlyOzsgVXxSbq MmxWnXBOJhZeH9S1rlfuFQdgeny21TRWiU7N2YnYcWdAbhxD3Am7qj097K.SPLZthMoj64yGQ49K 6l9rjylNob5bLHMbGdMfwY3sB1lk84ASFcnfuOFTuNvoQSunjc3U5fNpSd5v3xXJyIOndP1QduXi cnWOjByQr1pZoSAKOv2xsDm6HL_PJ_82N_qmnmhKml1b.Nc2EmccLydK435Z1WQ7w2OCQOHcii6A Yg3YuCJQz_3TB9ZFD71FrHwruXwPtweqiNR53Wc2QhgCE4aUMfhWIeXE0EWjXHiLDJPwsrfqAXqo pm9qs9TbsE8XEJntInnGhBMsYunzsa_TO7FkA3m4zBigEhXP6uA2A4trVlsBhNb9VnmrWIz831yM 9uTLjAy7Yv.VqsVnZRvAyLqNK6bApEn9wADVVN9ICgS.MTDE3jymziTJEjoP5jkmvwwzBNiomPHQ SVIO1JI65BPcvh4W.YWZptiQNG4hXnGfPE6p2Il8UwW_pRSz6h_5QyFxZAzzfvz5SUk8G9XCryU8 3cTVLeCMl9BB254KK1Jw0FuBVVgS3NqOJWbgwrqO2eIoOpIIhzxmPXK3XWoiKhx2OiqEZU4PWjYs tokgT99TrEXN7aycoZ.oPIBWFRGpyHTrwwC2lI8TUmLUed0KAZrIE6rVk3GmHhQ0tXyZPOuQh6HR 3y2720s90INYGQUnkx9bywWQdO6tFj_k3OHSfhJx3kscUvIg31z.c5TYy_5lsQAgvRqdawxgF24K XbhsFoIjPIfXiohPfXMpVjpUTPTZ_liSNdWrRNzIKxk8mnVONUc3B2aH9PwcMvwMOF1_cFIFRO8E xWRjrRMYOlY4EzN8rSoGxnmXLrvQdZ3Rg2UkfPy.2JcBGvMkogbb6ATX1Oh2EBgW0LARgcoeGSN. nwUO4csoIAx.xSMgJbhUaSwttUwC..UHGTgYYELz1F_KVGNWQvxOzZ54- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:18 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:15 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 30/59] NET: Remove netfilter scaffolding for lsm_export Date: Tue, 9 Apr 2019 12:18:19 -0700 Message-Id: <20190409191848.1380-31-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Remove scaffolding functions from the netfilter code. Replace with direct access to lsm_export fields so as to be explicit about how the secmarks are being handled. Signed-off-by: Casey Schaufler --- net/netfilter/nf_conntrack_netlink.c | 12 ++++++++++-- net/netfilter/nf_conntrack_standalone.c | 7 ++++++- net/netfilter/nfnetlink_queue.c | 6 +++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index b069277450c5..d10cc1924e46 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -332,7 +332,11 @@ static int ctnetlink_dump_secctx(struct sk_buff *skb, const struct nf_conn *ct) char *secctx; struct lsm_export le; - lsm_export_to_all(&le, ct->secmark); + lsm_export_init(&le); + le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; + le.selinux = ct->secmark; + le.smack = ct->secmark; + ret = security_secid_to_secctx(&le, &secctx, &len); if (ret) return 0; @@ -619,7 +623,11 @@ static inline int ctnetlink_secctx_size(const struct nf_conn *ct) int len, ret; struct lsm_export le; - lsm_export_to_all(&le, ct->secmark); + lsm_export_init(&le); + le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; + le.selinux = ct->secmark; + le.smack = ct->secmark; + ret = security_secid_to_secctx(&le, NULL, &len); if (ret) return 0; diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 12318026d8d4..d353f3efc5a5 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -177,7 +177,12 @@ static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) char *secctx; struct lsm_export le; - lsm_export_to_all(&le, ct->secmark); + /* Whichever LSM may be using the secmark */ + lsm_export_init(&le); + le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; + le.selinux = ct->secmark; + le.smack = ct->secmark; + ret = security_secid_to_secctx(&le, &secctx, &len); if (ret) return; diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 4c74c383e26b..a0670137477b 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -317,7 +317,11 @@ static u32 nfqnl_get_sk_secctx(struct sk_buff *skb, char **secdata) read_lock_bh(&skb->sk->sk_callback_lock); if (skb->secmark) { - lsm_export_to_all(&le, skb->secmark); + /* Whichever LSM may be using the secmark */ + lsm_export_init(&le); + le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; + le.selinux = skb->secmark; + le.smack = skb->secmark; security_secid_to_secctx(&le, secdata, &seclen); } From patchwork Tue Apr 9 19:18:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892105 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0BFE31390 for ; Tue, 9 Apr 2019 19:19:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DFA9228938 for ; Tue, 9 Apr 2019 19:19:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D33AD2893A; Tue, 9 Apr 2019 19:19:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 89F2F28950 for ; Tue, 9 Apr 2019 19:19:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726661AbfDITTX (ORCPT ); Tue, 9 Apr 2019 15:19:23 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:35798 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726881AbfDITTW (ORCPT ); Tue, 9 Apr 2019 15:19:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837560; bh=ru3IBy79wwcnAZalZt5K4emNkCbgFnwqv7TisHF5r3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=T2YYna4TzSn1NnyiEUe2Lz8EHFFg2ZNjsb8mkmNKFqIDkwTOuZbzVxRfRIdiGbeXtm2b7ZPoVKW2VP/jR+yPSPl0cOkJHCyRD5Nk10DgbAJT3v8MEE+m1LjUocDaBpx/Cq0yZrOeJa6EcVycjU/egyzN9Hxs++5Pr0/HpqGgoPrH+nKm4IdhnWh/T4DyQW/SIgBGOKobsVLUQu9ZulDLuCRgPUNRvs3PFzibx5yOl1Jx2xoigit8fptzQHooJm0BTYqppvE8LoIS6y7I6reG7N/tID6VFbi7xIzp+/BFMZG3gr+BrCIr7/lnNtq4EnYOUAgtA5KeHUm2yq7/aSfeLA== X-YMail-OSG: Y9TxLpIVM1lEqvlZDLn2xx74Ce84oLE60hPsFR_iIR.YXkrSXMqySknuXEPVWU7 Ql180Xa5FK03lCkGN8wi7fN2BI1CLtobbQqkAZ45qJ2ADMQn49eJIpuNU_Gbausuw6gFY6C89HkO tZQiqlpCKkCKQ0_ud52UXGYaRV.GyCC8GTy5rXcatwB2oPueSVp40xeJmLlIKyoVE_d2PtH36JEe kuOjEOUPG.E_ds7MBR.KyD4_0d9MGDemNXzJA1SOyUU2TN7.9Uo_klI.CPuDI4ETYg1n.l8egDEd VoRJNLyIIeHIYatnQK5tsHfo6GS3eDuFks_En9VcVhllVrXo0eqV2eDxcujQoPiq1DR2Qksj0wxH PE.fOrXgUJHuLfhZEvNhtW5KLKRhpeYddqyBQ8NvFj4lzZ_OKcng_fKfLuwCZUE.a8gZj.O28wy4 2tqAcUAgG71xM_4CSu7JsvGhQ_ZnrtULXZDNUT8EqteJ.UBy9EDIHqY3huCeoskejACnxkOOeigV en9o1k_QiSK0lYD1.5yIfenuBx4q1d0Y7SV.aReAgINVdECSDyytelC86UM7pzjepSDWM.VZlP68 P7eH4uv9UF8gB__hLvcGqI7lC8sIHKAm9tGdhU4Ai1osrKRslwQyoGY6e9.nLazDUfNwO5XB6.qW UJ.hudFLzOnQZ05Wvifw.C7XeUdyliEe_W82Q7QWBv64K30fdfTQ6ep_OxbkblXMYO1wnRqqoW0e e4aDihsYDwDKHsKu8SuYeJ8u2Xah_3xgqTFRMZMAyDNHtaAjZuB0oeQC4.PjpY8akW16h8_K7YSD Isb789nGxNlV0h8js2ykkqdUY1GUDuMBSDujQI_GwYELpL_yVDJpU0YpwITuGR7s.CD5Qpt_cDdy BkcIJdYU260YSm5p8KYCXuKOYmb2zh23EyziAe_xOnTtuhRvzSt7.yzzyvzlyrthvW_A3YunMd8j yKoJz7WfjLX2.Hu9Q8v9wg7x1O0BSv67vIf.6w0lbHFU40hF.brWzGhvF1Nw.ovbg.uFZU2Yi..7 kzBab3DwtCwIMn9hTCfBpqhsbyh0nsFSCZUHpP3cf4ui0OBhx3IsPVAcmxJkzUWUP.Iu6P2PCant uzcqIms2oujagelas4TPxoe2.UUdJgovQUkkqF.EVga3F8cNtBBB771xeMasSCQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:20 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:16 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 31/59] Netlabel: Replace secids with lsm_export Date: Tue, 9 Apr 2019 12:18:20 -0700 Message-Id: <20190409191848.1380-32-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert to lsm_export structures instead of u32 secids. Clean out the associated scaffolding. This requires changes to several internal interfaces, but no change in behavior. Change the LOC tag type to pass an lsm_export instead of a single u32. As this tag is only used locally there is no change to externally exposed interfaces. Signed-off-by: Casey Schaufler --- include/net/netlabel.h | 10 ++--- net/ipv4/cipso_ipv4.c | 13 ++++--- net/netlabel/netlabel_kapi.c | 5 +-- net/netlabel/netlabel_unlabeled.c | 65 ++++++++++++------------------- net/netlabel/netlabel_unlabeled.h | 2 +- net/netlabel/netlabel_user.c | 7 ++-- net/netlabel/netlabel_user.h | 5 +-- security/selinux/netlabel.c | 2 +- security/selinux/ss/services.c | 9 +++-- security/smack/smack_lsm.c | 5 ++- security/smack/smackfs.c | 12 ++++-- 11 files changed, 64 insertions(+), 71 deletions(-) diff --git a/include/net/netlabel.h b/include/net/netlabel.h index 72d6435fc16c..546c75f27d05 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h @@ -111,7 +111,7 @@ struct calipso_doi; /* NetLabel audit information */ struct netlbl_audit { - u32 secid; + struct lsm_export le; kuid_t loginuid; unsigned int sessionid; }; @@ -180,7 +180,7 @@ struct netlbl_lsm_catmap { * @attr.mls: MLS sensitivity label * @attr.mls.cat: MLS category bitmap * @attr.mls.lvl: MLS sensitivity level - * @attr.secid: LSM specific secid token + * @attr.le: LSM specific data * * Description: * This structure is used to pass security attributes between NetLabel and the @@ -215,7 +215,7 @@ struct netlbl_lsm_secattr { struct netlbl_lsm_catmap *cat; u32 lvl; } mls; - u32 secid; + struct lsm_export le; } attr; }; @@ -429,7 +429,7 @@ int netlbl_cfg_unlbl_static_add(struct net *net, const void *addr, const void *mask, u16 family, - u32 secid, + struct lsm_export *l, struct netlbl_audit *audit_info); int netlbl_cfg_unlbl_static_del(struct net *net, const char *dev_name, @@ -537,7 +537,7 @@ static inline int netlbl_cfg_unlbl_static_add(struct net *net, const void *addr, const void *mask, u16 family, - u32 secid, + struct lsm_export *l, struct netlbl_audit *audit_info) { return -ENOSYS; diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index f0165c5f376b..1defea2488b3 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c @@ -122,13 +122,16 @@ int cipso_v4_rbm_strictvalid = 1; * * 0 8 16 24 32 * +----------+----------+----------+----------+ - * | 10000000 | 00000110 | 32-bit secid value | + * | 10000000 | 00000110 | SELinux secid | * +----------+----------+----------+----------+ - * | in (host byte order)| + * | Smack secid | AppArmor secid | + * +----------+----------+----------+----------+ + * | LSM export flags | * +----------+----------+ * + * All secid and flag fields are in host byte order. */ -#define CIPSO_V4_TAG_LOC_BLEN 6 +#define CIPSO_V4_TAG_LOC_BLEN (2 + sizeof(struct lsm_export)) /* * Helper Functions @@ -1481,7 +1484,7 @@ static int cipso_v4_gentag_loc(const struct cipso_v4_doi *doi_def, buffer[0] = CIPSO_V4_TAG_LOCAL; buffer[1] = CIPSO_V4_TAG_LOC_BLEN; - *(u32 *)&buffer[2] = secattr->attr.secid; + memcpy(&buffer[2], &secattr->attr.le, sizeof(secattr->attr.le)); return CIPSO_V4_TAG_LOC_BLEN; } @@ -1501,7 +1504,7 @@ static int cipso_v4_parsetag_loc(const struct cipso_v4_doi *doi_def, const unsigned char *tag, struct netlbl_lsm_secattr *secattr) { - secattr->attr.secid = *(u32 *)&tag[2]; + memcpy(&secattr->attr.le, &tag[2], sizeof(secattr->attr.le)); secattr->flags |= NETLBL_SECATTR_SECID; return 0; diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c index ee3e5b6471a6..849064422e0b 100644 --- a/net/netlabel/netlabel_kapi.c +++ b/net/netlabel/netlabel_kapi.c @@ -224,7 +224,7 @@ int netlbl_cfg_unlbl_static_add(struct net *net, const void *addr, const void *mask, u16 family, - u32 secid, + struct lsm_export *l, struct netlbl_audit *audit_info) { u32 addr_len; @@ -243,8 +243,7 @@ int netlbl_cfg_unlbl_static_add(struct net *net, } return netlbl_unlhsh_add(net, - dev_name, addr, mask, addr_len, - secid, audit_info); + dev_name, addr, mask, addr_len, l, audit_info); } /** diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index 7f245d593c8f..f79ab91bf25e 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -80,7 +80,7 @@ struct netlbl_unlhsh_tbl { #define netlbl_unlhsh_addr4_entry(iter) \ container_of(iter, struct netlbl_unlhsh_addr4, list) struct netlbl_unlhsh_addr4 { - u32 secid; + struct lsm_export le; struct netlbl_af4list list; struct rcu_head rcu; @@ -88,7 +88,7 @@ struct netlbl_unlhsh_addr4 { #define netlbl_unlhsh_addr6_entry(iter) \ container_of(iter, struct netlbl_unlhsh_addr6, list) struct netlbl_unlhsh_addr6 { - u32 secid; + struct lsm_export le; struct netlbl_af6list list; struct rcu_head rcu; @@ -244,7 +244,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_search_iface(int ifindex) static int netlbl_unlhsh_add_addr4(struct netlbl_unlhsh_iface *iface, const struct in_addr *addr, const struct in_addr *mask, - u32 secid) + struct lsm_export *l) { int ret_val; struct netlbl_unlhsh_addr4 *entry; @@ -256,7 +256,7 @@ static int netlbl_unlhsh_add_addr4(struct netlbl_unlhsh_iface *iface, entry->list.addr = addr->s_addr & mask->s_addr; entry->list.mask = mask->s_addr; entry->list.valid = 1; - entry->secid = secid; + entry->le = *l; spin_lock(&netlbl_unlhsh_lock); ret_val = netlbl_af4list_add(&entry->list, &iface->addr4_list); @@ -284,7 +284,7 @@ static int netlbl_unlhsh_add_addr4(struct netlbl_unlhsh_iface *iface, static int netlbl_unlhsh_add_addr6(struct netlbl_unlhsh_iface *iface, const struct in6_addr *addr, const struct in6_addr *mask, - u32 secid) + struct lsm_export *l) { int ret_val; struct netlbl_unlhsh_addr6 *entry; @@ -300,7 +300,7 @@ static int netlbl_unlhsh_add_addr6(struct netlbl_unlhsh_iface *iface, entry->list.addr.s6_addr32[3] &= mask->s6_addr32[3]; entry->list.mask = *mask; entry->list.valid = 1; - entry->secid = secid; + entry->le = *l; spin_lock(&netlbl_unlhsh_lock); ret_val = netlbl_af6list_add(&entry->list, &iface->addr6_list); @@ -379,7 +379,7 @@ int netlbl_unlhsh_add(struct net *net, const void *addr, const void *mask, u32 addr_len, - u32 secid, + struct lsm_export *l, struct netlbl_audit *audit_info) { int ret_val; @@ -389,7 +389,6 @@ int netlbl_unlhsh_add(struct net *net, struct audit_buffer *audit_buf = NULL; char *secctx = NULL; u32 secctx_len; - struct lsm_export le; if (addr_len != sizeof(struct in_addr) && addr_len != sizeof(struct in6_addr)) @@ -422,7 +421,7 @@ int netlbl_unlhsh_add(struct net *net, const struct in_addr *addr4 = addr; const struct in_addr *mask4 = mask; - ret_val = netlbl_unlhsh_add_addr4(iface, addr4, mask4, secid); + ret_val = netlbl_unlhsh_add_addr4(iface, addr4, mask4, l); if (audit_buf != NULL) netlbl_af4list_audit_addr(audit_buf, 1, dev_name, @@ -435,7 +434,7 @@ int netlbl_unlhsh_add(struct net *net, const struct in6_addr *addr6 = addr; const struct in6_addr *mask6 = mask; - ret_val = netlbl_unlhsh_add_addr6(iface, addr6, mask6, secid); + ret_val = netlbl_unlhsh_add_addr6(iface, addr6, mask6, l); if (audit_buf != NULL) netlbl_af6list_audit_addr(audit_buf, 1, dev_name, @@ -452,10 +451,7 @@ int netlbl_unlhsh_add(struct net *net, unlhsh_add_return: rcu_read_unlock(); if (audit_buf != NULL) { - lsm_export_to_all(&le, secid); - if (security_secid_to_secctx(&le, - &secctx, - &secctx_len) == 0) { + if (security_secid_to_secctx(l, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); security_release_secctx(secctx, secctx_len); } @@ -490,7 +486,6 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, struct net_device *dev; char *secctx; u32 secctx_len; - struct lsm_export le; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af4list_remove(addr->s_addr, mask->s_addr, @@ -510,10 +505,8 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, addr->s_addr, mask->s_addr); if (dev != NULL) dev_put(dev); - if (entry != NULL) - lsm_export_to_all(&le, entry->secid); if (entry != NULL && - security_secid_to_secctx(&le, + security_secid_to_secctx(&entry->le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); security_release_secctx(secctx, secctx_len); @@ -555,7 +548,6 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, struct net_device *dev; char *secctx; u32 secctx_len; - struct lsm_export le; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af6list_remove(addr, mask, &iface->addr6_list); @@ -574,10 +566,8 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, addr, mask); if (dev != NULL) dev_put(dev); - if (entry != NULL) - lsm_export_to_all(&le, entry->secid); if (entry != NULL && - security_secid_to_secctx(&le, + security_secid_to_secctx(&entry->le, &secctx, &secctx_len) == 0) { audit_log_format(audit_buf, " sec_obj=%s", secctx); security_release_secctx(secctx, secctx_len); @@ -903,7 +893,6 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, void *addr; void *mask; u32 addr_len; - u32 secid; struct lsm_export le; struct netlbl_audit audit_info; @@ -932,9 +921,8 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, if (ret_val != 0) return ret_val; - lsm_export_secid(&le, &secid); return netlbl_unlhsh_add(&init_net, - dev_name, addr, mask, addr_len, secid, + dev_name, addr, mask, addr_len, &le, &audit_info); } @@ -956,7 +944,6 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, void *addr; void *mask; u32 addr_len; - u32 secid; struct lsm_export le; struct netlbl_audit audit_info; @@ -983,10 +970,8 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, if (ret_val != 0) return ret_val; - lsm_export_secid(&le, &secid); return netlbl_unlhsh_add(&init_net, - NULL, addr, mask, addr_len, secid, - &audit_info); + NULL, addr, mask, addr_len, &le, &audit_info); } /** @@ -1097,10 +1082,9 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, struct netlbl_unlhsh_walk_arg *cb_arg = arg; struct net_device *dev; void *data; - u32 secid; char *secctx; u32 secctx_len; - struct lsm_export le; + struct lsm_export *lep; data = genlmsg_put(cb_arg->skb, NETLINK_CB(cb_arg->nl_cb->skb).portid, cb_arg->seq, &netlbl_unlabel_gnl_family, @@ -1138,7 +1122,7 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, if (ret_val != 0) goto list_cb_failure; - secid = addr4->secid; + lep = (struct lsm_export *)&addr4->le; } else { ret_val = nla_put_in6_addr(cb_arg->skb, NLBL_UNLABEL_A_IPV6ADDR, @@ -1152,11 +1136,10 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, if (ret_val != 0) goto list_cb_failure; - secid = addr6->secid; + lep = (struct lsm_export *)&addr6->le; } - lsm_export_to_all(&le, secid); - ret_val = security_secid_to_secctx(&le, &secctx, &secctx_len); + ret_val = security_secid_to_secctx(lep, &secctx, &secctx_len); if (ret_val != 0) goto list_cb_failure; ret_val = nla_put(cb_arg->skb, @@ -1501,26 +1484,30 @@ int netlbl_unlabel_getattr(const struct sk_buff *skb, case PF_INET: { struct iphdr *hdr4; struct netlbl_af4list *addr4; + struct lsm_export *lep; hdr4 = ip_hdr(skb); addr4 = netlbl_af4list_search(hdr4->saddr, &iface->addr4_list); if (addr4 == NULL) goto unlabel_getattr_nolabel; - secattr->attr.secid = netlbl_unlhsh_addr4_entry(addr4)->secid; + lep = &netlbl_unlhsh_addr4_entry(addr4)->le; + secattr->attr.le = *lep; break; } #if IS_ENABLED(CONFIG_IPV6) case PF_INET6: { struct ipv6hdr *hdr6; struct netlbl_af6list *addr6; + struct lsm_export *lep; hdr6 = ipv6_hdr(skb); addr6 = netlbl_af6list_search(&hdr6->saddr, &iface->addr6_list); if (addr6 == NULL) goto unlabel_getattr_nolabel; - secattr->attr.secid = netlbl_unlhsh_addr6_entry(addr6)->secid; + lep = &netlbl_unlhsh_addr6_entry(addr6)->le; + secattr->attr.le = *lep; break; } #endif /* IPv6 */ @@ -1554,13 +1541,11 @@ int __init netlbl_unlabel_defconf(void) int ret_val; struct netlbl_dom_map *entry; struct netlbl_audit audit_info; - struct lsm_export le; /* Only the kernel is allowed to call this function and the only time * it is called is at bootup before the audit subsystem is reporting * messages so don't worry to much about these values. */ - security_task_getsecid(current, &le); - lsm_export_secid(&le, &audit_info.secid); + security_task_getsecid(current, &audit_info.le); audit_info.loginuid = GLOBAL_ROOT_UID; audit_info.sessionid = 0; diff --git a/net/netlabel/netlabel_unlabeled.h b/net/netlabel/netlabel_unlabeled.h index 3a9e5dc9511b..0803f1e6e3c1 100644 --- a/net/netlabel/netlabel_unlabeled.h +++ b/net/netlabel/netlabel_unlabeled.h @@ -225,7 +225,7 @@ int netlbl_unlhsh_add(struct net *net, const void *addr, const void *mask, u32 addr_len, - u32 secid, + struct lsm_export *l, struct netlbl_audit *audit_info); int netlbl_unlhsh_remove(struct net *net, const char *dev_name, diff --git a/net/netlabel/netlabel_user.c b/net/netlabel/netlabel_user.c index 1079cdea872c..2cc96305c841 100644 --- a/net/netlabel/netlabel_user.c +++ b/net/netlabel/netlabel_user.c @@ -100,7 +100,6 @@ struct audit_buffer *netlbl_audit_start_common(int type, struct audit_buffer *audit_buf; char *secctx; u32 secctx_len; - struct lsm_export le; if (audit_enabled == AUDIT_OFF) return NULL; @@ -113,9 +112,9 @@ struct audit_buffer *netlbl_audit_start_common(int type, from_kuid(&init_user_ns, audit_info->loginuid), audit_info->sessionid); - lsm_export_to_all(&le, audit_info->secid); - if (audit_info->secid != 0 && - security_secid_to_secctx(&le, &secctx, &secctx_len) == 0) { + if (lsm_export_any(&audit_info->le) && + security_secid_to_secctx(&audit_info->le, &secctx, + &secctx_len) == 0) { audit_log_format(audit_buf, " subj=%s", secctx); security_release_secctx(secctx, secctx_len); } diff --git a/net/netlabel/netlabel_user.h b/net/netlabel/netlabel_user.h index 2dbc4276bdcc..ee73711e0756 100644 --- a/net/netlabel/netlabel_user.h +++ b/net/netlabel/netlabel_user.h @@ -48,10 +48,7 @@ static inline void netlbl_netlink_auditinfo(struct sk_buff *skb, struct netlbl_audit *audit_info) { - struct lsm_export le; - - security_task_getsecid(current, &le); - lsm_export_secid(&le, &audit_info->secid); + security_task_getsecid(current, &audit_info->le); audit_info->loginuid = audit_get_loginuid(current); audit_info->sessionid = audit_get_sessionid(current); } diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index c40914a157b7..4bbd50237a8a 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c @@ -122,7 +122,7 @@ static struct netlbl_lsm_secattr *selinux_netlbl_sock_getattr( return NULL; if ((secattr->flags & NETLBL_SECATTR_SECID) && - (secattr->attr.secid == sid)) + (secattr->attr.le.selinux == sid)) return secattr; return NULL; diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 626b877363fb..8a197b387056 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -3596,8 +3596,9 @@ int security_netlbl_secattr_to_sid(struct selinux_state *state, if (secattr->flags & NETLBL_SECATTR_CACHE) *sid = *(u32 *)secattr->cache->data; - else if (secattr->flags & NETLBL_SECATTR_SECID) - *sid = secattr->attr.secid; + else if (secattr->flags & NETLBL_SECATTR_SECID && + (secattr->attr.le.flags & LSM_EXPORT_SELINUX)) + *sid = secattr->attr.le.selinux; else if (secattr->flags & NETLBL_SECATTR_MLS_LVL) { rc = -EIDRM; ctx = sidtab_search(sidtab, SECINITSID_NETMSG); @@ -3670,7 +3671,9 @@ int security_netlbl_sid_to_secattr(struct selinux_state *state, if (secattr->domain == NULL) goto out; - secattr->attr.secid = sid; + lsm_export_init(&secattr->attr.le); + secattr->attr.le.flags = LSM_EXPORT_SELINUX; + secattr->attr.le.selinux = sid; secattr->flags |= NETLBL_SECATTR_DOMAIN_CPY | NETLBL_SECATTR_SECID; mls_export_netlbl_lvl(policydb, ctx, secattr); rc = mls_export_netlbl_cat(policydb, ctx, secattr); diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index ecd636e5c75c..38ea48d22547 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -3756,11 +3756,12 @@ static struct smack_known *smack_from_secattr(struct netlbl_lsm_secattr *sap, return &smack_known_web; return &smack_known_star; } - if ((sap->flags & NETLBL_SECATTR_SECID) != 0) + if ((sap->flags & NETLBL_SECATTR_SECID) != 0 && + (sap->attr.le.flags & LSM_EXPORT_SMACK)) /* * Looks like a fallback, which gives us a secid. */ - return smack_from_secid(sap->attr.secid); + return smack_from_secid(sap->attr.le.smack); /* * Without guidance regarding the smack value * for the packet fall back on the network diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index faf2ea3968b3..28c567465f6c 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -197,7 +197,8 @@ static void smk_netlabel_audit_set(struct netlbl_audit *nap) nap->loginuid = audit_get_loginuid(current); nap->sessionid = audit_get_sessionid(current); - nap->secid = skp->smk_secid; + nap->le.flags = LSM_EXPORT_SMACK; + nap->le.smack = skp->smk_secid; } /* @@ -1150,6 +1151,7 @@ static void smk_net4addr_insert(struct smk_net4addr *new) static ssize_t smk_write_net4addr(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { + struct lsm_export le; struct smk_net4addr *snp; struct sockaddr_in newname; char *smack; @@ -1281,10 +1283,14 @@ static ssize_t smk_write_net4addr(struct file *file, const char __user *buf, * this host so that incoming packets get labeled. * but only if we didn't get the special CIPSO option */ - if (rc == 0 && skp != NULL) + if (rc == 0 && skp != NULL) { + lsm_export_init(&le); + le.flags = LSM_EXPORT_SMACK; + le.smack = snp->smk_label->smk_secid; rc = netlbl_cfg_unlbl_static_add(&init_net, NULL, &snp->smk_host, &snp->smk_mask, PF_INET, - snp->smk_label->smk_secid, &audit_info); + &le, &audit_info); + } if (rc == 0) rc = count; From patchwork Tue Apr 9 19:18:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892095 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 317E51390 for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F064288B3 for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 135A5288BD; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B488F288B3 for ; Tue, 9 Apr 2019 19:19:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726827AbfDITTV (ORCPT ); Tue, 9 Apr 2019 15:19:21 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:37091 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726857AbfDITTV (ORCPT ); Tue, 9 Apr 2019 15:19:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837560; bh=fGxfp/CN22PmumS7bLwAFMtRgSd8WhnZOIiNQimjmvQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=FW2Cn/TqkZQDcyr2S/WlPANNrLAS0BmG1R9L5BH68qT2m0lPviF4cCf9d5xoL/xFy6l3IRexLZjtFdntgsfpZICzkn0WWqNETEJkFttNnbrR4aBcqfABvp2XMPEjEc4vq7AjimdLmzfh5GDljmyQBFYUb901ZPdZLLhy6Q4OpPqJyPlYEbi853GFUTClwBoeS6AunA/9dyQnNwE6oIve7j/LsRj32lUoGkS9gQeUpFG/oJfmH1gaKNxMziikWXlgvImE9CYPBgnTEjDVsOCpk2Nr+E30bHkkInoz9k82cIGpost4+1SC4TVMtz+lbWZ2apJwqW81S+dCvs9z9ujzpg== X-YMail-OSG: J5NvMuoVM1lta_3oE8bBR6UjIMWLG30stY8TgLpskyVYvs1PeHKocvsol.XM9vO KOuzhsmJwR42oKRkYCoPDeKXoAcUctFRHQrFXO9xifhX_dI9afS2ZD5kawRkLKRLFBMsYl7EfDHt sKZBAoZywYTXZak95wZGAOMXbznM86mpKrtyXJSrvrliGHgumVsrOudZzm5zx4gUTsdptDA6nJzK 2yZXBWhbsgtfzTyIh8Tl71BuzogKSELIXEJzw80tiWcjhsoDpcWH72j93Pg5fATaSoAqdlG3HHER nSm.LTCAwIrOdUivmw4QgFQakgtkLt3SmMRgpIPbhEsdnPui3SmjzkbrV2b2yswd2b68uoB7fILf Z4wskoxx.N3e6GNBAmQGjj1W.CUhulLC0gYXxqo08qX3FnBtEUPQ0hCe5r_0EyIy9hkfDlD0wWcW DnsLkj5KEiWB3475F6avMA5uXzxavYQyT6QC.L2Ca9XWvQdBSeeXCkXofKfDOLGIq0SRw.gKV9i_ .IzT4B5FDUFWd4kAgiqxf3aW1o6ZUk_GUbaiYfaYztrm5MuuwpHV0lINKVkLWEP26JNyNaGOjBL. JxQzFA_2TJLWy45vOiADgKZcXMpmmSREg.tNOqExLn9PlLdvTs9UZ_cT8v1xutt4h9u3DkPXZVTc ZMhUHnXq_w1MPH08ApGPcaQ_OpXAxXl9652cgOI4za4fZNf0aVZD5RAneFSQmM7j5av9g09a3raJ 5F95uQ.T52Ziv6jwETinvRSRYKmvLdmuj2MZgJIG4mYErLjVx2Vv_ktdtaIpT_R_D8eWWSyBAxDc 6ta07hQy0eRAWayVzEUTjKAx8qvQAiFN_2pRUjmybWLu0oEuKizhXIUeyTK9snPQc2oGb.Z3pMh3 WBAkt0slBFtp643W6ULMxG.nFEhlXw9x5uhlTSgM6fXuVIf2ZXFa9Q.aH1UkfxaEF_Bq4cXwdqr1 GATpJnatw7VoLs4OXrWMeXHR5EnNAwXEeZXeShTEyn.Ms1YIAz5md9DMxHtpyLo8IyfmGLLXAY6T w9ubc6WEJRpRNmioFr342dbnWga2biGGtbue3R_vlAtqtvaIMaA3cQVKA3RYefe.OA8QTfUbJ0yQ FcHhd1b_fH2aFjGyWk3kf8JfmQu2as5EfTYC2J92rji1O3ufzPhStMFc- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:20 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:16 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 32/59] LSM: Remove lsm_export scaffolding functions Date: Tue, 9 Apr 2019 12:18:21 -0700 Message-Id: <20190409191848.1380-33-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The scaffolding functions lsm_export_secid and lsm_export_to_all are no longer required. Remove them. Signed-off-by: Casey Schaufler --- include/linux/security.h | 43 ---------------------------------------- 1 file changed, 43 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index c413dcc1905a..6c44aca19c65 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -117,49 +117,6 @@ static inline bool lsm_export_equal(struct lsm_export *l, struct lsm_export *m) return true; } -/** - * lsm_export_secid - pull the useful secid out of a lsm_export - * @data: the containing data structure - * @secid: where to put the one that matters. - * - * Shim that will disappear when all lsm_export conversions are done. - */ -static inline void lsm_export_secid(struct lsm_export *data, u32 *secid) -{ - switch (data->flags) { - case LSM_EXPORT_NONE: - *secid = 0; - break; - case LSM_EXPORT_SELINUX: - *secid = data->selinux; - break; - case LSM_EXPORT_SMACK: - *secid = data->smack; - break; - case LSM_EXPORT_APPARMOR: - *secid = data->apparmor; - break; - case LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | LSM_EXPORT_APPARMOR: - /* For scaffolding only */ - *secid = data->selinux; - break; - default: - pr_warn("%s flags=0x%u - not a valid set\n", __func__, - data->flags); - *secid = 0; - break; - } -} - -static inline void lsm_export_to_all(struct lsm_export *data, u32 secid) -{ - data->selinux = secid; - data->smack = secid; - data->apparmor = secid; - data->flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | - LSM_EXPORT_APPARMOR; -} - extern struct lsm_export *lsm_export_skb(struct sk_buff *skb); /* These functions are in security/commoncap.c */ From patchwork Tue Apr 9 19:18:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892161 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 522E01805 for ; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 32BCC285AA for ; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2666F28179; Tue, 9 Apr 2019 19:19:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D5CBF28938 for ; Tue, 9 Apr 2019 19:19:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726862AbfDITTe (ORCPT ); Tue, 9 Apr 2019 15:19:34 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:43951 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726814AbfDITTT (ORCPT ); Tue, 9 Apr 2019 15:19:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837558; bh=cOt9caKD/749IXNAg082OZdZ8wyzsShJ6Dne6L26IXA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=XUFR2zBRFVjKOsbioIUVJJ0SZCyjZzqLJNLynhWoUkqF5fEJDcQ+2O5EFbpAMVDD4Ln8kY2e2jo1gQa7kOxVmIbGQ3YQeq+l5DMORWDRxOGBywy687UeIwGooG9PHG4Weji0ZKN96eXJSWJnkD9VJRnwZFhnGmSOMPPlNf2nmIJiRmnBFJi6tyWTctGAqMbDDCA+WaxR/whflBo/dUydqYYpVR5YbUTjn5PIqkXx7oXpCtCr7qsAUkOin1jGLY03nOy516sLoY6qIlkqvaqJ7UJtyMmGIH+RHX3FN1Rv84lhQNccl6e8FwgZd2hc+WyJZhMpd3jP3tJ4rlz5rop91g== X-YMail-OSG: UOMOIo4VM1nZcyFAkQE_2Fnfr4mcmQrlvBhAjo77xm6ZSnfqPYbJJU3O5VDP8rh CM9sq0k25hM1Dhb8PcPKaM098ELWb5.cMsYuTECAcRglQ86DWu2SXawBST6nD2j.8SfbnxNRZzaP 4wNrxWfZhMulDUJGznJAZu0rysKw1Wkgr8Ar06545BYlgHKiOyUDkna8jQKDzei5RMu0aQ9EDOcI nJFQv4B3NhSWZ7BMz0Iz5AmH4m.Y.R4uFIvNduMUf0kUsoIYZsHz8XJGWb99dNSg7V9lfD6T.xtn M1HjaLoGOmkAD6PZZSnN.uiOKV8egTPUpWtzV9ud7k_zGW9kchshxX5WMah717IFjioSMeonaUyc WdzQJCuJbQgbAF9KAD4_4gR7BECneIALHb0YGWkoJfuA2J3ZJpMA4dWQ2KZuzFi650Qps3HpLmVU CZTXM_a9MnDic4rVJpWcXzeok9ROGsxoChQxq7SGkUFh4TPiLIjL2ENxtafwKl1EBun4Pj..Wvl3 1vvSrcu4HaRchsD5ZIIW_ioc1BUYk9C7.lVlkzt3mp1C_0MrOrtLHk4FfUE85n2zgew2Emu5H7DJ bAhwVcZtapuEnd.nhRXitZEvDoop_iCryWU24HYBOb1qn841UvAVdjEfsk2n7RyzxGtPU_dpUBij QCsj6dn3mEJvEpKy61tFHiApInPWd2CpKOubmbfWiWFS_Y1pcPbyDKHK8Bdj4lWyNdkpyHB7ggie 5jW5myUoulk0uTzsPrzjQHjky2NYx038qKkxfWwA.uWtyRRn.TjE0CCB5Fk7hruj5djSHUo_GkVj fVk25KK9zkZEJA.9cgKV91CSWu9VtIxouSGyrZyHxJUL.FSbtMzHM1i._hYQCsApiOWQnKkgo3OF _bp0RpdHG4S7hZPPYis3wjvLOUyf2SqyANoxuMMopHziJzatvmI9QXZZVV799UKC8xcwso8v8iHm wzgTzf1lbGeh0RZdauXmBZohZ8XIvb7qO68v7HzsWP_T1vayrIuZd1i2YEbsaKlWmQh5K9vk.GHW sUbOMbAkhfetQ7fC5bh93NUb.WvC7jIED3Weqkp7jV.4ewswsqiNkiH8Q259sgd7vaPExjDNlbbd 0wKBOk0EHkrQ0F4UbLljHeEJKonEgbNPgCy5xDDzajm8UXKXc41Thjwc- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:18 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:17 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 33/59] IMA: FIXUP prototype using lsm_export Date: Tue, 9 Apr 2019 12:18:22 -0700 Message-Id: <20190409191848.1380-34-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Fix the prototype on a function stub Signed-off-by: Casey Schaufler --- security/integrity/ima/ima.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h index 8b109ad0de2e..7ae41218eb07 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h @@ -309,8 +309,8 @@ static inline int security_filter_rule_init(u32 field, u32 op, char *rulestr, return -EINVAL; } -static inline int security_filter_rule_match(u32 secid, u32 field, u32 op, - void *lsmrule) +static inline int security_filter_rule_match(struct lsm_export *l, u32 field, + u32 op, void *lsmrule) { return -EINVAL; } From patchwork Tue Apr 9 19:18:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892139 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BFCCC1800 for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AF18D288BD for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A2E6B28917; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 555D228924 for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726879AbfDITTb (ORCPT ); Tue, 9 Apr 2019 15:19:31 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:45231 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726513AbfDITTT (ORCPT ); Tue, 9 Apr 2019 15:19:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837558; bh=XFEQORQN/Rrt9xNIMHTY8NF01S7CWObpcTiWCO3b0pw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=t/1htg9GjqaGxX3LifEoFua35/jrnOvNpCUwPr2dgtIsVEcZ4Km+AWNAx+LEivJhbqGwxr0JjbIvUemY0mADYzkr7WJHynyQAfZuPxsRIm6RxuWKU53zisj0M62Hlryxn8WU3T61979lHeoZpdLyBbloF/vg8za3vtmkxcctbLrr9DhrkDhKXvVWVMd6w1UdG3Mh6vS8XZa7s9Kzjuuy/lucqSqixDEHTAu3xb4OjlyosdWLAeS7kjMTMC5PUG4L/jmTd+ty6bNtPCELF9NbRXlY54dI4X5eQ7OoXKR1/pHtC8BKu4X9sFvR80x7PxZEujSa+dok89ww7QoM22ysiA== X-YMail-OSG: mfsvLo8VM1mNwsefW588PagtZWrbxeDRrFx_BKKyAROm4IGBOqA7OVngJxQi2qE mGRcrD4LluNvvGi7ncwnXGcJyanAaCnnSTlEuw3dfWodPF611mYUxlSW0n_qnRmtERx9RNoh7OE. R9.OTlDBoVcdptnejGSlYHDPUmnsriqNc8qZsBC4lFQnsgepyhfIr_jezRcMDppHKuOCEih6LwD9 ERhFGQtAz7_NodT3Kkg55O.47Fgb0Ou4AeyEs369akV0PQgJJ_ibnXom0rZtsqJkcQ068lK5Hfv1 x2Jp2bXi.cpXQ_62EuDPcWIUQ3S5vwnZkM6M7Jp.dGyTUMdnd.3LAAQbDK90aMtGiTlt1PFjLwWS O4o.9efhxpVn.v92c4wKN0TiDuxMv4t9HB_BiXnzEDnRc5Q7G86UDNkgiooR4PltBFDdg7PYxMHP j2_X_VjCPxHSxFrbUlTa37afGtG6cAWazCEcinf0Syah_XbbG9aCm2Cumx3eoY9OZqCouSibEsC7 delJzLlU2RYCjYZ40z5E2f0_gIMl5r.5_ByxwmPTAfcQysNN1fzOUbFLrQUvmF9tavV.x8ATJgtA pxkQE08JiCvlZLdXkxnsQILng5XJmsNYB4R_CHK.hgxBrWCDYGTEomIIi952IuyW0r6nxDDRsN6R HfeL8IRARs7qD8o3TezhKZLgJMCtGvSkZsink9dF2CtdRlaQYrpTBiQVzau6G7N9yXsbKlVwKdR_ JT9DlQkdHebFkbzKliRb76KGpYcGxYv0kow2DUwz88k1l2mSfdlNzRwj7dkl8vcyVrPVxBFJDimw LkX5YdHI_RJx9wxPF77RR8l6Bk3bCFE0cOslzhToGR2jwtF08DlY4mlQj.paTJ0qoqI36k_R3Q6O apuhDq3NzAr3lmHGxTaEFZUN06KNGcyUOrkk4zAOekZ0qkHcdSNLcqDEpW4L_qNj.8Bfssoq57Sl KoQKl_KENjdGSCXJHFiEQOTYr55y5nhWDpsm3JSVOo944fQ6PUjKtVId4dJ0oVuQLw6S7MHM03n5 80HqlZZIrLS7qDTO.UdNK0NP3VMHZ7hxIQsMwaOnOKAmebwk9YFC8S2knHFCzQQ0PHePAP5.PCo0 mUz9Uc_uP8g6eLw8mM72zdnw1D_3IFmQR74xswJhAuvCuMyeM4D.rKWg- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:18 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:17 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 34/59] Smack: Restore the release_secctx hook Date: Tue, 9 Apr 2019 12:18:23 -0700 Message-Id: <20190409191848.1380-35-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The secid_to_secctx() hook has to be balanced with a release_secctx hook for stacking. This hook does nothing. Signed-off-by: Casey Schaufler --- security/smack/smack_lsm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 38ea48d22547..a837af153ed9 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4470,10 +4470,11 @@ static int smack_secctx_to_secid(const char *secdata, u32 seclen, } /* - * There used to be a smack_release_secctx hook - * that did nothing back when hooks were in a vector. - * Now that there's a list such a hook adds cost. + * There smack_release_secctx hook does nothing */ +static void smack_release_secctx(char *secdata, u32 seclen) +{ +} static int smack_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) { @@ -4713,6 +4714,7 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(ismaclabel, smack_ismaclabel), LSM_HOOK_INIT(secid_to_secctx, smack_secid_to_secctx), LSM_HOOK_INIT(secctx_to_secid, smack_secctx_to_secid), + LSM_HOOK_INIT(release_secctx, smack_release_secctx), LSM_HOOK_INIT(inode_notifysecctx, smack_inode_notifysecctx), LSM_HOOK_INIT(inode_setsecctx, smack_inode_setsecctx), LSM_HOOK_INIT(inode_getsecctx, smack_inode_getsecctx), From patchwork Tue Apr 9 19:18:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892129 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7E8A11922 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6C53128924 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 60D0728948; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 08B712893A for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726599AbfDITTY (ORCPT ); Tue, 9 Apr 2019 15:19:24 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:35418 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726881AbfDITTY (ORCPT ); Tue, 9 Apr 2019 15:19:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837563; bh=VEDYIM3R1NMqedNbn6scDMcxUUfpt0y9Ccbwl5mHx6o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=rtasWKThaB+GJuHhd2Et4xlpkGfiGvbqMTWO6V/NKpydOA5IuuguIbB/UddAZdkzWOB01nIYRrbsg/kA6l2vn9cRCykRDWqUdCyDLVQmxCNT2NSAeSY/hfBRgKOw82MkklacWt+7weBvb89eTTBI++zsf2mjl3eThFnM9ES8M7JSVHnveo56QiHxA0eO62w45FWh+AZrMIf0SjiOuAHRNuQyAMpPhuvWPucdDel3FEOrJYj/gc9s0hn6171ZxKdQXLLQZFcAHnpXRiIxEktYchysPPdv1Jxgl+8rpoVrFfH0lfHcIwu5qrnLhSGuA3ae+If7Ljrv2WwejV2UILrWEA== X-YMail-OSG: gYAbMCoVM1n1QB1g5wAfdrhOLwuAxrlGTVmFXiQ5LDosZA8N_mKxI.adn3hn.X8 7NFaZ1ml5Kq6iwFWIn5FyPlzGtU3vl334MxGRIlXeBNm_WVFzDkCxVwYPGrC5JR4I51AsKtQb93i NFyQZLyCfdF5tGap2EbIzJ9tjmvGp.0kWfhrorEFRNlu67.rEq9SYawT_7QCaXGx7rbHvHn3fE_w _pUghuq9yJz0SkMEm0xyTJzLpDRVBR4cNq7RIAzY99NkJRIcZu01cp2TizWAqZ8PdElqCuF03S1. RM.yQCFxSTCWDJSmFVRfQJH_lIjM.SPBGWElqykRs1Cgf_7UcCBfmfPohqjvRpEqsaphUDfsGxFc f.XIvWjXeaAgQWGsgEYDVD9EU12Wugl8.FM2JQiKriYvYGrM5oRUVDfJFxPy2bnILpP.21LVZ04C KgG7UvzMnfdTM8ukbkgpCrrAMM5bU.suSMx1kokhpOe1hY1wuS7TdCXrJxVnlgRZHj9C5ffsp46r K1u0md3XlmHlyVbWEsiB.MJGWvjIUttzK8S1gbizT.CYJu92V4oP2BQ3BY4eo78nXvlvxm541OyF Wmq8dqqmjKAjl8jpPjJMNS5WnjkmM24BnqOJX4RhsAUaFWuJ6TEiU5MsaaTkB.1LF20CJ.40Lmw1 wT6ca.Vngg5g61RtK7tAV6S3bWooDxOF2M0NikJPCWjLMnFnA7RurLprkNTf7oKlThW4h25LGXBP ortjk.BEyM2adK55EBZ4f47RVhUah029pFkoQ3_nu.7yfC5MtkTDcWjpqNtDQZu05GhVoUpXWzw1 mgLGx.2uwfiXZRIeHf3HE5aCzjEZL6LXYOQWWnNVKOnb2Ntzng41QbMgkwNGPrymi20ipkTcSc.S L5_VkmyivX8g_e85A9IIEtvRmLguGyquxYCtfozwZtacyuZcsKRvggWeo.06xbvdgdjhexT4b7Gb 7Sccxng1_xXnwi0zzMd0GXyDJOjB8bZzxoFl21EHB0hgjO_5dvvAbu7YKLfq_nsGhxfXxnfuEk0u T0RN9cEJDO42s5XjrwpfzMsiaMBPsFqjPRzEt9.eR3MmP914.vX7.63EcLYlaftIUCbjfYa3NKNe PWll2B26CYv9s.d8ifQGw4gelGJHKfzn4mC_vgGy0Mg_A5RVCXgIOUg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:23 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:18 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 35/59] AppArmor: Remove unnecessary hook stub Date: Tue, 9 Apr 2019 12:18:24 -0700 Message-Id: <20190409191848.1380-36-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Remove the getpeersec_dgram hook stub. It's unnecessary and disrupts stacking. Signed-off-by: Casey Schaufler --- security/apparmor/lsm.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 24b638bd4305..76c409737370 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -1094,15 +1094,9 @@ static int apparmor_socket_getpeersec_stream(struct socket *sock, * @secid: pointer to where to put the secid of the packet * * Sets the netlabel socket state on sk from parent + * + * The TODO stub interfered with stacking and was removed - Casey */ -static int apparmor_socket_getpeersec_dgram(struct socket *sock, - struct sk_buff *skb, - struct lsm_export *l) - -{ - /* TODO: requires secid support */ - return -ENOPROTOOPT; -} /** * apparmor_sock_graft - Initialize newly created socket @@ -1202,8 +1196,6 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = { #endif LSM_HOOK_INIT(socket_getpeersec_stream, apparmor_socket_getpeersec_stream), - LSM_HOOK_INIT(socket_getpeersec_dgram, - apparmor_socket_getpeersec_dgram), LSM_HOOK_INIT(sock_graft, apparmor_sock_graft), #ifdef CONFIG_NETWORK_SECMARK LSM_HOOK_INIT(inet_conn_request, apparmor_inet_conn_request), From patchwork Tue Apr 9 19:18:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892099 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D791C1390 for ; Tue, 9 Apr 2019 19:19:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC00F288B3 for ; Tue, 9 Apr 2019 19:19:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C0CB328956; Tue, 9 Apr 2019 19:19:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F2EFF288B3 for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726857AbfDITTW (ORCPT ); Tue, 9 Apr 2019 15:19:22 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:44775 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbfDITTV (ORCPT ); Tue, 9 Apr 2019 15:19:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837560; bh=qAJ+Rda21nKW+P9EyOWFlXVarN/YAKnXHrX4pZPXalg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Qkozs887KGB1Cuc1ABph6kaKuhXY2pdpwfMpYwbOcPoDtR+PasqqakMZT5Ytxae86Aiwk9UBNHHd7F/APvvwWRWnFfGCiuYTiD06ZOA3Lq3LTj8or+ZI3EpfbVcupkRVi6M3pkXvXlKIOzagsrkt/9xs+ZiLhJp647uHHE1vFbogNXy/BZScHEpdr9kVYcIgiq4VZLwuyPUItPUypSxXZ88OPHVvU3OzUaJCf5R96vVvQyoAMKmQJAtWtt07NN972z3I3TbMrVmNHLDgwSOsJuHY6qa61OWxF8L5xKWQGJBUBX3UhZl1SCw7H7xyeMhmL9+kfC9KypKRQfY2v//Smg== X-YMail-OSG: Z8X48R0VM1kAX6hfv5ZUz2wpZYQSmRp2u6ngxow4yd9y2GRAVNnIgBUil0uPZj0 Ce8L1dcV_ZHwSyCjEgzTS9nQVcxnQ5FC_vVjpGzWOxcH0r87Q78V90zgLdCy2v.S14LzrIQYXadE FGn9o_5YBbFzOTnOwiHRTMVAyGG8XOXbqnksHrO2Y_kDA0BtlCj.fdNJfcVt8CGc6fY1AlwXRsnv jeHS2Joktz9YiWir5UMjjBu7RYqXPmnjBemAfVJK5dOqMr.JisQwEnmRkpvYZkg5760BuHTNtZkK 8uvPsljUTZl9__Ce529eLtsojBLoofdUR6B2cHJfzdEzGri_L.4J8WWe8iw2haQ.gBE.7gIzn_L0 Gx2duRKtvM137Ux1KL0kXNadL6SudMfkjB6XuN7NOVtI8LvREF5qeYTT4d8VUebRRBJhE9lvJrMH I167zAuXGMAF0nMYOmKgaGDelKgijrlbd5kixQ_ygZ56AXKzB8fboqfgbws4mQuEGs84e3Lsh6YP xyGUawwSE3x_WL9iSwEVo.FNIq6qsk9O80s6sXgd4aYfVzpWqgF_siyyaw0f4rmgz7_oa399qOTz pWcqBZKN7.QQ_7VzTBcuT4naKFVeuzgT7kc2w.pU0UtWN28IeeBz8JarWlZYJLCKhMutaedo1jXc fxWSOSJvIB65JikQWmL_nmyTDMtkYYDWgwgkFTrLKhkMAj7tFnMVof_NXwEnSyUcz.g9V2N1k4c8 E8Z7yhzHtiSoagmiHlOTP4qIXHDp3Wm7giRg9j1Opr3ds45_s6iLdUpgqNnULJZfdYzXWFO18zk_ frt96QSNqCFEm9DFGf8P_3a.sqjCFCGKU1CcS.5dlusUq1k_68qYJpkPVApinmstYPqIIOd25lkc oHakMZU2y1QZZgX0RKe9M7A75CjlfqTl35D2LrpOeu6.QvUlXUzWU88b0ed9.DCcjyQEG1o.ppR6 HDF0IMS0VV_qJWS01.iacQT7CBQNNW7CByAOJeIVkf8fLCuu9K_SWU.gAnapyclkv22JanYJLNAZ Ie7T7Gmq8VdyOH3KJyjrH_P.jr_oSCr8ejjO5JxJBPn8JU7hbwmyeKdt0zcG3_pra4PDcPUPITR9 SA_ib5nYR2WInGz.mZWb4yjNHiHatWHbi1OPFOy7uxXfh94ctzoChYueJ Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:20 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:19 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 36/59] LSM: Limit calls to certain module hooks Date: Tue, 9 Apr 2019 12:18:25 -0700 Message-Id: <20190409191848.1380-37-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP LSM hooks dealing with security context strings should only be called for one security module. Add call macros that invoke a single module hook and us in for those cases. Signed-off-by: Casey Schaufler --- security/security.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/security/security.c b/security/security.c index 015c38c882ba..7bf16c547010 100644 --- a/security/security.c +++ b/security/security.c @@ -713,6 +713,16 @@ int lsm_superblock_alloc(struct super_block *sb) P->hook.FUNC(__VA_ARGS__); \ } while (0) +#define call_one_void_hook(FUNC, ...) \ + do { \ + struct security_hook_list *P; \ + \ + hlist_for_each_entry(P, &security_hook_heads.FUNC, list) { \ + P->hook.FUNC(__VA_ARGS__); \ + break; \ + } \ + } while (0) + #define call_int_hook(FUNC, IRC, ...) ({ \ int RC = IRC; \ do { \ @@ -727,6 +737,19 @@ int lsm_superblock_alloc(struct super_block *sb) RC; \ }) +#define call_one_int_hook(FUNC, IRC, ...) ({ \ + int RC = IRC; \ + do { \ + struct security_hook_list *P; \ + \ + hlist_for_each_entry(P, &security_hook_heads.FUNC, list) { \ + RC = P->hook.FUNC(__VA_ARGS__); \ + break; \ + } \ + } while (0); \ + RC; \ +}) + /* Security operations */ int security_binder_set_context_mgr(struct task_struct *mgr) @@ -1966,7 +1989,8 @@ EXPORT_SYMBOL(security_ismaclabel); int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) { - return call_int_hook(secid_to_secctx, -EOPNOTSUPP, l, secdata, seclen); + return call_one_int_hook(secid_to_secctx, -EOPNOTSUPP, l, secdata, + seclen); } EXPORT_SYMBOL(security_secid_to_secctx); @@ -1974,13 +1998,13 @@ int security_secctx_to_secid(const char *secdata, u32 seclen, struct lsm_export *l) { lsm_export_init(l); - return call_int_hook(secctx_to_secid, 0, secdata, seclen, l); + return call_one_int_hook(secctx_to_secid, 0, secdata, seclen, l); } EXPORT_SYMBOL(security_secctx_to_secid); void security_release_secctx(char *secdata, u32 seclen) { - call_void_hook(release_secctx, secdata, seclen); + call_one_void_hook(release_secctx, secdata, seclen); } EXPORT_SYMBOL(security_release_secctx); @@ -2105,7 +2129,7 @@ EXPORT_SYMBOL(security_sock_rcv_skb); int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, int __user *optlen, unsigned len) { - return call_int_hook(socket_getpeersec_stream, -ENOPROTOOPT, sock, + return call_one_int_hook(socket_getpeersec_stream, -ENOPROTOOPT, sock, optval, optlen, len); } From patchwork Tue Apr 9 19:18:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892097 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 93ABE1515 for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 81E792875F for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 766AC288BD; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1EF132875F for ; Tue, 9 Apr 2019 19:19:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726865AbfDITTW (ORCPT ); Tue, 9 Apr 2019 15:19:22 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:38571 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726878AbfDITTV (ORCPT ); Tue, 9 Apr 2019 15:19:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837560; bh=vbPmsKchcYujFbsoTOZdCYFpnfZ1qp/ZBXWOn5HufTo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ZJUuOcVnj+GWxVxAKcJfykYBCMJRdtfI6dnR3DyCFAgefQS6V5u1Qu+SjbLe2wLk9Drr82hSqce9OxcOjYcGAgo80hKSLfek8ik7SabFO2w+HssvNVkdyMkKDwdibf+GfMolCeDpGlEJ04IUFOqCAk27FPCE5zA5/6m/UAd3a+r0AjP7wq7bE10sFWP5nFBzkpyk2OZgdp2EHdKAE6OSdu1n5j0nyeBDDA0tqcwnrB6GlgagwbGA4krhqMDhe510DJRnpPky8g4Zc69SVNghdfLDWbZGcCE0nStYLyXNgUJouJ++078VGKqt2olCV0VRbI8buAkp/dJfFixV+ZHjew== X-YMail-OSG: C44HdawVM1kD1wqnZjpE1CEnupGsKN6v3T.Y4IIHYY3hNoN8jYFLs3pAJ9jCcJG gPIdjHcxC9sYpnC48a56XQfsseT4gAVDw_0a4GWpz28RsPuJn9Bs0cP7ll8Mdm7ZNCgCghUisAzT 0jk_VrJU0Nkbq59O5.feqOnhAfCKJhABsXBR2LSuYIOlyUCfamPNDdIfkXk1bVOSddEeirUg9FYV gXPX2.pbiOgoTEs8KwWda9xnhpx5J7j0ohy5l3gK8cYxXuz.XVfbP__ychxWb2ONA9T7nSumhGRA _uiESYAevuBDUL3qWfLF_JP.mJLFFii4g1TvKEnqY_mAW28M3N850v9P5QxM09JBKF2acGVl6KUZ pobZ8Xk7Tb1OhZYEAfFRwfNyNQdFruch9vlqGlxCBNJdFvKs5rydHyHY4FSZrAbwfpV7by.Oxagr aMvOmQSPkt01gV5ewZBRQftoT6FDqv705eNrRuL7xYskqry7IP4.Q9j6mW2zVJW_3U3kw8zaCKpC fvzTG3DCCH80cHrNBs2ahxzg5ZBriESGGtRNS9JHuRqi157tEiE1MD6zEja74Rb7yzP9YRgJ5Crp ZZt9rX02jWvem0o7wjEmLfF3FaN6JUUe6TC_EU1VpCz5c.e_9dVImf4KUDvrV069j8SvwMzkO.QG 71ZToFvMzvjUXEci2cXYu5VozIU1bijiTBEtu8UqclzH61ViYxsWTkewqBC.vcSgCyaUEqY2_zEA f8PR7rQaMfeYiVUqntGOHhCtNd.qBXQ3I32nXEHWoDd.0PNI6KkkEGmt0aDCv1h97FRTZk25zb.z RqA_xrzbTocvip6bWc9ttKAZghnvSneU1vDiWBA9WUqNA0lU8Ar1QcMDcFICKbKvq88xtWCXmyV4 O1ua5x1M3e8myPDRrcHjAEVOlYksbd2iPZ7MvW3dxSG8sOve_s7I3HGyci75JzJ72dH1TCoK2OfO evGJzMWvD0YzkaKDqirF_SYtjhx9k86LchOJufujIrdJFFBHDAjUt9Qj4itndfjsW2wzfoo47DQ. LLq5VeokbfL6hQy.b9Dwoy3geyj_Fc.KGr.pVZtn1Ic.b9qtWZWpiYp1UVwLcKvY4jeEwjaXTQzc x__RHGxFS4lu2jnUfzlIz513hCCQidoKp.3f1i_5FxREjhyYJcxmm1p8f Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:20 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:19 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 37/59] LSM: Create a data structure for a security context Date: Tue, 9 Apr 2019 12:18:26 -0700 Message-Id: <20190409191848.1380-38-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP A "security context" is the text representation of the information used by LSMs. This provides a structure so that the use can be made consistant. Signed-off-by: Casey Schaufler --- include/linux/security.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/linux/security.h b/include/linux/security.h index 6c44aca19c65..8dd21133ede8 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -119,6 +119,17 @@ static inline bool lsm_export_equal(struct lsm_export *l, struct lsm_export *m) extern struct lsm_export *lsm_export_skb(struct sk_buff *skb); +/* Text representation of LSM specific security information - a "context" */ +struct lsm_context { + char *context; + u32 len; +}; + +static inline void lsm_context_init(struct lsm_context *cp) +{ + memset(cp, 0, sizeof(*cp)); +} + /* These functions are in security/commoncap.c */ extern int cap_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts); From patchwork Tue Apr 9 19:18:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892111 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4B3B91390 for ; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 39F2828938 for ; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2DC322893B; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9376D2893A for ; Tue, 9 Apr 2019 19:19:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726890AbfDITTZ (ORCPT ); Tue, 9 Apr 2019 15:19:25 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:44159 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726892AbfDITTY (ORCPT ); Tue, 9 Apr 2019 15:19:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837563; bh=7gPoCWetxgh6OIRNGIIxTECY/QFBwCB1nRYgDUU/GGw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=b53+YALOutjx8gi220EBfqI2aO9PHO1t0UaWRMIiZos5R5Qag3q6Ey0pjiAWbUQ6GIENGlHdhAdwWKZrl5mM6qKq0IQGFJYCLF82CtfVP0lc6snjMxRTKMTuWqUpbmUSbpLLZyo2jKm4x9qECSUU+FR8YF40yWYmb3A63DKh6xXE9XrqgzMF9BuCV2TzDnmrecHoBLzJpEM6o79sOZjccbp9gxlJscgJyckIk1M/wVDqQPpuZJp+UYZnQEJWvkY9ZKdAqepb9b1Tn4vLhSp7deTQgQURR53NfZMboEZ8jTb6XnBHQQhaCBXGBcaI4h6ijcT14qqWT2D98rmlq1BmeQ== X-YMail-OSG: fSo7JpgVM1n1JJSauni1vnUxOHbZdmZCWGm_gl.vTpUI3itnhj3UtP7vedoMr53 1RZYdvXaKgbm.JXZKhnje5UeOYLVZU5ZNSOIcDx0imgbf9CYjEKk9jPPZyK5pibzj8Tw.O8hIine mTVUITh4trngk18kxCpJAgIRqhZtpmHm4idioe7CxKz0wI_.n0Ef6AKO8ZRyovL67hoQrQB.LAe1 4P5UQJj.G4xtjSL390jIQTpqiAMO9GEAA6XRYGa8alvFHuvmRiyTVaW5Kp862PEEXJMolg2TQoMH KAIjCNZyT5NZpS6I1slIWfFyZb4kE5GEjblxfstKFb90D3s601AXuCLLjCheLfEsDsGC6mzPwwgg LRsd.2eqOwW66ypA9JRCcjcxEYKoFTOfMXZud0udqR13nfYYtxms9AGoUvvg5AMmurvTfE1feq0B igaRBUxt8Tvej41JowHDtgNBMDXNUpC.0RW3zHvM0V.oZ.8__psO.7FZMsDFWPi1XvETrUA38dz6 Wh1kNWpLZkvR1t3_c2dZJunOTuXLxgA0_4LbW9PUIkFOoNo3eedRk.g75SDJWIFOVYS_2W8dve4V m5CwbsaLB6niSgWRE6FNHJ3U.LMed6aLb6Bv41aziN9kDTop_P6uv1T0IDs7nTBeoLSbkVQKkU2E ynHsj55U7W32u00n_dUERH2JGvPXKiVLwge0hhxrxvDOpCEvKwQ6OlpOBh3l068r8p5eOHXYal.D yJpOc4oMPdgUL93jhPn._Ft877F6xKtjnnxWbin5U_E0u4QezMLkKQioyc5AhQ_snhAVisDkEPMq _nyYrFHmbdxMrEWTTHrSEmoYSufAusztl2IZ6FRdGd3QaOOVM8mKnHzZ0U01DVhwCGCnsoYtb4U1 RH1olyXMLMY8IvlYxwpJZJo2HBD38EyPrkBj3EuSaoc2yPTTUZDprKi5zusyL5wrPR10ZT2d0ZSw .5VzWhPOLX07PFXpOsNlN02AThTEBLb.gWwI0nvZcRc1ixBY9n6M3tOdY9C1IW0sc7Zqf6LS0FCb dbjimAC2Y9hlNUPF.ldhCGTqXLub11NjzXUPlMrxo4S4HSNKOAVvBrVz0mLyKa_22ffrm1vONyob 8Rp_Og2n3g_a_O8O9Ts3kWsxZToBfK9QpXKLHqi8niwU6UhCqaL.bwp9.3PM- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:23 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:20 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 38/59] LSM: Use lsm_context in secid_to_secctx hooks Date: Tue, 9 Apr 2019 12:18:27 -0700 Message-Id: <20190409191848.1380-39-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert SELinux, Smack and AppArmor to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 6 ++---- security/apparmor/include/secid.h | 2 +- security/apparmor/secid.c | 11 +++++------ security/security.c | 12 ++++++++++-- security/selinux/hooks.c | 5 ++--- security/smack/smack_lsm.c | 8 +++----- 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index af0bcdf8fcfe..566714aa0caf 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1323,9 +1323,8 @@ * length and the next call which actually allocates and returns the * secdata. * @l points to the security information. - * @secdata contains the pointer that stores the converted security + * @cp contains the pointer that stores the converted security * context. - * @seclen pointer which contains the length of the data * @secctx_to_secid: * Convert security context to exported lsm data. * @l contains the pointer to the generated security data. @@ -1672,8 +1671,7 @@ union security_list_options { int (*getprocattr)(struct task_struct *p, char *name, char **value); int (*setprocattr)(const char *name, void *value, size_t size); int (*ismaclabel)(const char *name); - int (*secid_to_secctx)(struct lsm_export *l, char **secdata, - u32 *seclen); + int (*secid_to_secctx)(struct lsm_export *l, struct lsm_context *cp); int (*secctx_to_secid)(const char *secdata, u32 seclen, struct lsm_export *l); void (*release_secctx)(char *secdata, u32 seclen); diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index 5381eff03d4f..964d3dc92635 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -26,7 +26,7 @@ struct aa_label; #define AA_SECID_WILDCARD 1 struct aa_label *aa_secid_to_label(struct lsm_export *l); -int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen); +int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp); int apparmor_secctx_to_secid(const char *secdata, u32 seclen, struct lsm_export *l); void apparmor_release_secctx(char *secdata, u32 seclen); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 69d98a89db75..4e11434605d6 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -81,7 +81,7 @@ static inline void aa_export_secid(struct lsm_export *l, u32 secid) l->apparmor = secid; } -int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) +int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) { /* TODO: cache secctx and ref count so we don't have to recreate */ struct aa_label *label; @@ -89,13 +89,12 @@ int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) label = aa_secid_to_label(l); - AA_BUG(!seclen); - if (!label) return -EINVAL; - if (secdata) - len = aa_label_asxprint(secdata, root_ns, label, + /* scaffolding check - Casey */ + if (cp) + len = aa_label_asxprint(&cp->context, root_ns, label, FLAG_SHOW_MODE | FLAG_VIEW_SUBNS | FLAG_HIDDEN_UNCONFINED | FLAG_ABS_ROOT, GFP_ATOMIC); @@ -106,7 +105,7 @@ int apparmor_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) if (len < 0) return -ENOMEM; - *seclen = len; + cp->len = len; return 0; } diff --git a/security/security.c b/security/security.c index 7bf16c547010..7cf8e268a45c 100644 --- a/security/security.c +++ b/security/security.c @@ -1989,8 +1989,16 @@ EXPORT_SYMBOL(security_ismaclabel); int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) { - return call_one_int_hook(secid_to_secctx, -EOPNOTSUPP, l, secdata, - seclen); + struct lsm_context lc = { .context = NULL, .len = 0, }; + int rc; + + rc = call_one_int_hook(secid_to_secctx, -EOPNOTSUPP, l, &lc); + if (secdata) + *secdata = lc.context; + else + security_release_secctx(lc.context, lc.len); + *seclen = lc.len; + return rc; } EXPORT_SYMBOL(security_secid_to_secctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 7dd333f133db..6a2a82dcd948 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6301,14 +6301,13 @@ static int selinux_ismaclabel(const char *name) return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0); } -static int selinux_secid_to_secctx(struct lsm_export *l, char **secdata, - u32 *seclen) +static int selinux_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) { u32 secid; selinux_import_secid(l, &secid); return security_sid_to_context(&selinux_state, secid, - secdata, seclen); + &cp->context, &cp->len); } static int selinux_secctx_to_secid(const char *secdata, u32 seclen, diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index a837af153ed9..10d6c6a1a001 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4434,8 +4434,7 @@ static int smack_ismaclabel(const char *name) * * Exists for networking code. */ -static int smack_secid_to_secctx(struct lsm_export *l, char **secdata, - u32 *seclen) +static int smack_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) { struct smack_known *skp; u32 secid; @@ -4443,9 +4442,8 @@ static int smack_secid_to_secctx(struct lsm_export *l, char **secdata, smack_import_secid(l, &secid); skp = smack_from_secid(secid); - if (secdata) - *secdata = skp->smk_known; - *seclen = strlen(skp->smk_known); + cp->context = skp->smk_known; + cp->len = strlen(skp->smk_known); return 0; } From patchwork Tue Apr 9 19:18:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892119 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A75B61800 for ; Tue, 9 Apr 2019 19:19:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9BCBC28924 for ; Tue, 9 Apr 2019 19:19:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 907EA2893A; Tue, 9 Apr 2019 19:19:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26AAF28924 for ; Tue, 9 Apr 2019 19:19:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726602AbfDITT1 (ORCPT ); Tue, 9 Apr 2019 15:19:27 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:46856 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726895AbfDITT0 (ORCPT ); Tue, 9 Apr 2019 15:19:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837565; bh=oZw+jxmu0klx8qKKkocY1UUY4fu46NlBbhyji1WzJ7A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=GMDA93vUiPVqr83w5m310mw67CyTRB4EzCO7nu56arv8aG49d8+Rd4tq19F0bVgg376r9KCoOhMLNu6dIJKhzWB5FiQmN++DcoY9eTmYbf1iTvPjCYhPy9xvvjuD5As/5F+b+JU7kbbn9FMZHbvrpWLTwc/8CuEE3+kucVcydXRVRiKPtrWLbLOUJ64KwyGCSTNEVnLLnpd80Gff8hTRkV2bpTL4PcTxKCus3NPMYVPBZnFS42U6o6A+kZWk9QfW91IlW6gIeseCdp/ztmBm0RTph+BV2qM+iRvQhuk3IHdF4W0jSsYRkiJZDfoSWy6QMSehgk58WVlnYleG7du1iw== X-YMail-OSG: 0Tas8dwVM1lv0Fl6Ke7B18SMKR2YumzScCnNTZWo_8lkxex9h6Yr._hJYlqkC0i P1fRkvA.YONCc51FWLQkdF0qg_ap6oBD6tXBfpW5f9rNj5tIm2EwyzVQLRv7IzOcSjmHDyRfvip8 iBral8AXXo0ey8017vc1raLVLyz8bYRS40679Rwrgoqe_zeC_hKHaD_R8AZSaIrRmmJhyJQWZqfv JLbzUo_1fs4Jpru.gOnNCzraOWB3fPuw93dhR8CBRDllY0rdUgVtVaNK4xrk0CHGZW86bqtwhMDX 1_7fLmG6EIibL1vOUAA0dWYjjCfSNC7gh6Jog5hcSMGUUMm66T0MXT9jdcp_cQp1I1ath3rxlQTd g71FF4vGVPWCT0iWo3U1A.C1LwzGeovlBgRAP1VvHrXmJyym6.Fn1EecPD0fIDxgzrqH2Kl82Qfs MBqAjPAjuVeepeYYrKfVFCmBdUB4ibXcU0qBq2ZM38zpQXPCsOqFc_tBvTMmP5vEBaD21b451bD3 eR1iBIf0FiNlxrTHZxC2UZWyG62uUJc4xaYYhZfhMoYS487FvZCyVlNCe9TIqcwzvca32q.H_jcc hDVTX009rC4lwAode3MBH0fp_f5VGL4HMXTEf89nmSjemMj6._BUMhJVg44r8f176svT2DyRDR8a rw_gkZbuAHlwHEtMnMfa3yDgumq7idYkFUKiDtN.Jx9Km2qFme6tUsJDJeamKOA2CFtVwNZgQtTf NlI.tGTGPOVJ2PORbJ.KxAFihvspBsgEuOKLL26tLmhi10fm.sV1QWPjIIYW.duabnfTjAWHoLq9 CfjBsHKa9aYESr6O1uxxiPrIKY1OJasFeEMgzTW.6bpI6bVJANbODN1RP3rWRjs3avZxv5oEw62z JxSYrT1w7R1S1f0tTw99PCV1GL7z1Cc2UXmCuNRs7toK8ckZBxrbUfUIIO6rmhQZxVFwom_Hf_cF qPchx4HtMgSOtzGGfDpNRo0lMgphzDnSNF86M3v7FkApyVvVLlFcHRj9nPW8oMPg5QxZuH17YrnE gm2dNfVKW7BHn7u2FfL8SWsfigOYgwwejic6vFmY33fOOf29f6A.URcCqFL8GOB3dtpk1.5Qek31 CFFDWLMI8Ku3I2QqSZcJaL3h7_87TMRe80MHO8M0jLfdCcj9y6X8HoQ8mRgY- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:25 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp420.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 564a224fa9abd9f41816cac9472f1914; Tue, 09 Apr 2019 19:19:20 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 39/59] LSM: Use lsm_context in secctx_to_secid hooks Date: Tue, 9 Apr 2019 12:18:28 -0700 Message-Id: <20190409191848.1380-40-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert SELinux, Smack and AppArmor to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 4 ++-- security/apparmor/include/secid.h | 2 +- security/apparmor/secid.c | 7 +++---- security/security.c | 6 +++++- security/selinux/hooks.c | 4 ++-- security/smack/smack_lsm.c | 4 ++-- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 566714aa0caf..8b842fd13fb4 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1327,8 +1327,8 @@ * context. * @secctx_to_secid: * Convert security context to exported lsm data. + * @cp contains the security context. * @l contains the pointer to the generated security data. - * @secdata contains the security context. * * @release_secctx: * Release the security context. @@ -1672,7 +1672,7 @@ union security_list_options { int (*setprocattr)(const char *name, void *value, size_t size); int (*ismaclabel)(const char *name); int (*secid_to_secctx)(struct lsm_export *l, struct lsm_context *cp); - int (*secctx_to_secid)(const char *secdata, u32 seclen, + int (*secctx_to_secid)(const struct lsm_context *cp, struct lsm_export *l); void (*release_secctx)(char *secdata, u32 seclen); diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index 964d3dc92635..acfcf99bff0e 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -27,7 +27,7 @@ struct aa_label; struct aa_label *aa_secid_to_label(struct lsm_export *l); int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp); -int apparmor_secctx_to_secid(const char *secdata, u32 seclen, +int apparmor_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l); void apparmor_release_secctx(char *secdata, u32 seclen); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 4e11434605d6..35df38592b6e 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -110,13 +110,12 @@ int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) return 0; } -int apparmor_secctx_to_secid(const char *secdata, u32 seclen, - struct lsm_export *l) +int apparmor_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l) { struct aa_label *label; - label = aa_label_strn_parse(&root_ns->unconfined->label, secdata, - seclen, GFP_KERNEL, false, false); + label = aa_label_strn_parse(&root_ns->unconfined->label, cp->context, + cp->len, GFP_KERNEL, false, false); if (IS_ERR(label)) return PTR_ERR(label); aa_export_secid(l, label->secid); diff --git a/security/security.c b/security/security.c index 7cf8e268a45c..f3788840019a 100644 --- a/security/security.c +++ b/security/security.c @@ -2005,8 +2005,12 @@ EXPORT_SYMBOL(security_secid_to_secctx); int security_secctx_to_secid(const char *secdata, u32 seclen, struct lsm_export *l) { + struct lsm_context lc; + + lc.context = secdata; + lc.len = seclen; lsm_export_init(l); - return call_one_int_hook(secctx_to_secid, 0, secdata, seclen, l); + return call_one_int_hook(secctx_to_secid, 0, &lc, l); } EXPORT_SYMBOL(security_secctx_to_secid); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 6a2a82dcd948..a2257ccaee5c 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6310,13 +6310,13 @@ static int selinux_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) &cp->context, &cp->len); } -static int selinux_secctx_to_secid(const char *secdata, u32 seclen, +static int selinux_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l) { u32 secid; int rc; - rc = security_context_to_sid(&selinux_state, secdata, seclen, + rc = security_context_to_sid(&selinux_state, cp->context, cp->len, &secid, GFP_KERNEL); selinux_export_secid(l, secid); return rc; diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 10d6c6a1a001..78c01ef707eb 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4455,10 +4455,10 @@ static int smack_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) * * Exists for audit and networking code. */ -static int smack_secctx_to_secid(const char *secdata, u32 seclen, +static int smack_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l) { - struct smack_known *skp = smk_find_entry(secdata); + struct smack_known *skp = smk_find_entry(cp->context); if (skp) smack_export_secid(l, skp->smk_secid); From patchwork Tue Apr 9 19:18:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892115 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 870EA1805 for ; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 793F32893B for ; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D6692893A; Tue, 9 Apr 2019 19:19:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F1ED8288BD for ; Tue, 9 Apr 2019 19:19:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726588AbfDITTZ (ORCPT ); Tue, 9 Apr 2019 15:19:25 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:39376 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726882AbfDITTY (ORCPT ); Tue, 9 Apr 2019 15:19:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837563; bh=ZMFPRX5fTeMRBlSYOW6teWpgOAJGelAiTDnV//rgRYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=IZAtHKmJCR211IURSWJTftmNB+Z3/wqP94pNzC8F9KyXB13Q6vSWxfRjluCI17CD8Lcd51ZblFscyt7uZF5TKoYoOCGEEDYcxsrl/Ed/JWnKurTASLcvQ42rrXq+wEStPBRw+3Qeli6eFG+MNF3mfYKKIUBLGn+I/OUEqWPQBLqzZEnsH9wwsVbH/mJoztqOae79GoQiux5p8Sv4mu8WQuKgQ6EYCg9iiMc2FnN8wl2RuWvPgqo1Q+9+uXulzE0u5FpKQ+5SYVj9WAWVAs48J4QaHnS3TcMUkgsDxCUhImzxv7idvhcAqH9qJ+CBqmTjgOPtaZcEKDhVPttn/c15Pg== X-YMail-OSG: eDJoUtQVM1kjlf9AQg0s6N07G_jfJ9g_xXHayqwvU4aURdTpPxiF25QXuo48ETZ G.a8QScezoUuq1adZaJaka7jjpFaVSSNgKjZGA8QZ6jby6py.B.w8tPkGbvFcfTgYG3WaAPPtRaV dx3RbGwEP8EzxBAe2GSWzsq4wIVLjKNssWSpvnQ5vxcpgFVZ_e3PKLPhsZs_BmAkcMFz8EN.aI3n EIxGv5AD9jyDjr2.wSGd4Q9kLf2CHNmsiBA_Ouoc8WpWjEL4HHlkwv8BUiizxApCpMwccM_xAMZO eW8p5NCyILE0imRB_0.IDxVvNfvGHmdJWyNDIW0wxrfoUQJd62kjWc3ketnk5sIYQIaJX5FARhbg lP89W22nTI003EHTLEwxS2YJEAhnray44xRdbR55NmKP0agTjmDnAUDkNbgtn_htp_rgHjTMwRZ6 m1OttXEYuZ5vVGhNE28ULXbFu.fCEi._6isef5nl9T5vWeDCRbv3C09_tcrlDSM12Q4XQdThkmBK NUhKGctdJiZUcPcMuaOTCXlsWn7PlayVQBhZdhkF6YSO01b4nEjGv8E156ayuyGHjdPtTQg5kyGg .11YL1gDTB0TEZFbz8h3wZe6vkkDjy3ME0JeJa7YsNBBwUTNA7X9Hoa9F3F5q2wuZe5irskY5mim qu4WqcFlKrkuw_VOPi2iNXzZnJt51pE9M4m0aKNMN3FLliWZyzN6HwQFEZFS8Cm5dlpw9fC.AUtH ajEf78MLBTqZDB7cvOtFUm7rNCQ95BxTebectSwcRYegSCYSjhoWuHjrhlN6QyjWxbzFaRjHLwEo XRQHkjEkHcnpUgLnZYknYzBFiKdeKPa48qQKKN7CMeyw8kgkfNZMBIxRXnvh51_mbEZmGzYLQ3G_ Xi64b.A82BA4tKY9v.NvWplatZECPXCej4qyGQ5XTpni6WBnZz9HmW1b7uOsIvK99FDe0.2Lui1_ sbrtP56YUvvikXss_u4DOcmHmND8C1vmS2GuWnPu4balaSw3MueCr16pvErq1alLtRS6iR1Js0zZ e3dGw4VpTC2cvXfz3yDugm.OGQL0yDVdjZLomDm_7kEhY3mLM.FO3zz_MfVvK1Bd5CePyWHxPfeL 2s.Bpn6N8hZQS4Kkf_I3K5lXJFPxoPfIDdmaJpZaWFhUAguxy0stSW3zys7rD Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:23 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:22 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 40/59] LSM: Use lsm_context in inode_getsecctx hooks Date: Tue, 9 Apr 2019 12:18:29 -0700 Message-Id: <20190409191848.1380-41-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert SELinux and Smack to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 7 +++---- security/security.c | 9 ++++++++- security/selinux/hooks.c | 6 +++--- security/smack/smack_lsm.c | 6 +++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 8b842fd13fb4..34ed56be82b8 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1401,12 +1401,11 @@ * @ctxlen contains the length of @ctx. * * @inode_getsecctx: - * On success, returns 0 and fills out @ctx and @ctxlen with the security + * On success, returns 0 and fills out @cp with the security * context for the given @inode. * * @inode we wish to get the security context of. - * @ctx is a pointer in which to place the allocated security context. - * @ctxlen points to the place to put the length of @ctx. + * @cp is a pointer in which to place the allocated security context. * * Security hooks for using the eBPF maps and programs functionalities through * eBPF syscalls. @@ -1679,7 +1678,7 @@ union security_list_options { void (*inode_invalidate_secctx)(struct inode *inode); int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen); int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen); - int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen); + int (*inode_getsecctx)(struct inode *inode, struct lsm_context *cp); #ifdef CONFIG_SECURITY_NETWORK int (*unix_stream_connect)(struct sock *sock, struct sock *other, diff --git a/security/security.c b/security/security.c index f3788840019a..4625a9b00d1d 100644 --- a/security/security.c +++ b/security/security.c @@ -2040,7 +2040,14 @@ EXPORT_SYMBOL(security_inode_setsecctx); int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) { - return call_int_hook(inode_getsecctx, -EOPNOTSUPP, inode, ctx, ctxlen); + struct lsm_context lc = { .context = NULL, .len = 0, }; + int rc; + + rc = call_int_hook(inode_getsecctx, -EOPNOTSUPP, inode, &lc); + + *ctx = (void *)lc.context; + *ctxlen = lc.len; + return rc; } EXPORT_SYMBOL(security_inode_getsecctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index a2257ccaee5c..e881f42d3ff8 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6355,14 +6355,14 @@ static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) return __vfs_setxattr_noperm(dentry, XATTR_NAME_SELINUX, ctx, ctxlen, 0); } -static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) +static int selinux_inode_getsecctx(struct inode *inode, struct lsm_context *cp) { int len = 0; len = selinux_inode_getsecurity(inode, XATTR_SELINUX_SUFFIX, - ctx, true); + (void **)&cp->context, true); if (len < 0) return len; - *ctxlen = len; + cp->len = len; return 0; } #ifdef CONFIG_KEYS diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 78c01ef707eb..46eead699e1d 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4484,12 +4484,12 @@ static int smack_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) return __vfs_setxattr_noperm(dentry, XATTR_NAME_SMACK, ctx, ctxlen, 0); } -static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) +static int smack_inode_getsecctx(struct inode *inode, struct lsm_context *cp) { struct smack_known *skp = smk_of_inode(inode); - *ctx = skp->smk_known; - *ctxlen = strlen(skp->smk_known); + cp->context = skp->smk_known; + cp->len = strlen(skp->smk_known); return 0; } From patchwork Tue Apr 9 19:18:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892125 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8092D1A2B for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7473D288B3 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6822B28956; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 51C7828938 for ; Tue, 9 Apr 2019 19:19:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726895AbfDITT1 (ORCPT ); Tue, 9 Apr 2019 15:19:27 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:38913 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726905AbfDITT0 (ORCPT ); Tue, 9 Apr 2019 15:19:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837565; bh=QBEwHL43ut+mDxdXHm9kJRs4xn/suS1Ne3uAL6B3bPo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=LY+2oQCEx+L2SaZZWXxCYpQZKm4ojVSWqtzsQ3T1iEy7TQbmik3sJ5/YNnPhKrZcvlTSrMMy/CqBS43NRuGBAE5DrbatLlKYauDSrGg7+AFmNCyMD87CBvundmpxX5u4ot6r0FeOl9dRXt1hSKkUl29L7c1ZjpxRBkUvkAmRGVlVW3Du8z5u6JzSayq1aj8KQVBK2PSwgDox05aX3L6SdXJRD4TLDW3+ryqV3/laPug7X7HQ5ySwqxI9WdZW4rOqCPop7nTtyyf42NxIEVRANtwKCfBlkPFykc+6RzxmXoezkvRRg4LAGV5WTGCuaSs4dPMkILLrjYBmXUfmVGxMdA== X-YMail-OSG: hNDJJycVM1lnR_SgnrLkEnT2JXd2tZy0Dvpva3TUN9N7f13j9sfjhC0oaMwBTO2 nby0sRLERnSzpUtcImPp9mfkP.2hZS8OkuNwcdemQUM7rMi5crDJ7gpAQxx1gdCuAwwp_t1aqplX 2dyzdROYB2A_sLBn52itxyZtH1QczyKSFCf3HUHZGgRKqdEvx6ENei0EjV8l8gssyZaEEL0Gxc81 DJgX9lZObgCcciDeEYk2sswG.HXAu6.Xs.o8ChVxDkAD45rtTQF.I2.YPshEkxPMayExTqQoV9fz 8miJUcr9W6TMvmGxekxLkQKJ2ghQVXPnZR_Mx14xRubD7Bh893o.ZeFVUGI5ylIczmmwyWg0iN.L Rz2dctgisvK7ytJvUaWuCk0NR1D633i3CTvZJUZZ2yZztFSAn6lOud3iEVSeQ9af5BV23naMxHIB cBBLjMCtZFa6KX47hDyy7rbkQSuCocuEMhJfgnPpojoY2rB9xlenXi_ole33Wf5Op5fdm70TvCX5 xEsnsUWUZuMRTRWgEtI6NxKnd6mWX.f_hDnYU0YS8K2clHlC4izhN6WmK3BO6qAVhR7fXTjk7Vkc HLFSjEkXvF_oByw6jiuP4RKMaAags2rGa7O5332W1KcV03HmeKAq0dTll.ieflzGjlSgmhOKMga8 lBwLxKbHjshigvEyRoESsJYWqITDhEFzhBO7JoU_6fILstlLOSPFyh5uV325Qk0MFvMCKgWpWgOi gPKuXKMcHLt4qkr5lycizXB1S2yILF6_3aBv3CeNWhTpRQk4VbAOXyyScwP2C6lLh8ic9bQC2B5A NgpIPa9du4MZj2GA5SxD43F9zY9AbVc4rbrZYtyQDwKZxjilSNOkUXS1aRRO.zLxggDRRSk4GBm4 Ui4_AJP3mWZyn6U4Ro30xLwRcf7LwdZ0Xot8xQf7xJg3cFGjVujUgSrFJLsF19XxKdWCHTCixN3S XboMZv.uI8pq3xWuy4xrI7xpODrEFoc__WLjkOg0IFts585COvk5ECoDirg5hS.elVWu_l7G7V2S ULEcoRG3jkyIHv6814U5LeKr7HImv7_xVsFBONUogunQL8C6dYevBA5tmOZdEvKg7r8gU0nFFE6M YrFf2TxowK9kqTyZsekKTQDGO8o6jt98UH2Gn.L30TVznU98bBV1fMPEF7.s- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:25 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:23 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 41/59] LSM: Use lsm_context in inode_notifysecctx hooks Date: Tue, 9 Apr 2019 12:18:30 -0700 Message-Id: <20190409191848.1380-42-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert SELinux and Smack to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 5 ++--- security/security.c | 6 +++++- security/selinux/hooks.c | 5 +++-- security/smack/smack_lsm.c | 5 +++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 34ed56be82b8..3344d18ba9d0 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1382,8 +1382,7 @@ * Must be called with inode->i_mutex locked. * * @inode we wish to set the security context of. - * @ctx contains the string which we wish to set in the inode. - * @ctxlen contains the length of @ctx. + * @cp contains the string which we wish to set in the inode. * * @inode_setsecctx: * Change the security context of an inode. Updates the @@ -1676,7 +1675,7 @@ union security_list_options { void (*release_secctx)(char *secdata, u32 seclen); void (*inode_invalidate_secctx)(struct inode *inode); - int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen); + int (*inode_notifysecctx)(struct inode *inode, struct lsm_context *cp); int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen); int (*inode_getsecctx)(struct inode *inode, struct lsm_context *cp); diff --git a/security/security.c b/security/security.c index 4625a9b00d1d..ecaabc820d87 100644 --- a/security/security.c +++ b/security/security.c @@ -2028,7 +2028,11 @@ EXPORT_SYMBOL(security_inode_invalidate_secctx); int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) { - return call_int_hook(inode_notifysecctx, 0, inode, ctx, ctxlen); + struct lsm_context lc; + + lc.context = ctx; + lc.len = ctxlen; + return call_int_hook(inode_notifysecctx, 0, inode, &lc); } EXPORT_SYMBOL(security_inode_notifysecctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index e881f42d3ff8..633d62b97e90 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6339,10 +6339,11 @@ static void selinux_inode_invalidate_secctx(struct inode *inode) /* * called with inode->i_mutex locked */ -static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) +static int selinux_inode_notifysecctx(struct inode *inode, + struct lsm_context *cp) { int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, - ctx, ctxlen, 0); + cp->context, cp->len, 0); /* Do not return error when suppressing label (SBLABEL_MNT not set). */ return rc == -EOPNOTSUPP ? 0 : rc; } diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 46eead699e1d..3d24503029e5 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4474,9 +4474,10 @@ static void smack_release_secctx(char *secdata, u32 seclen) { } -static int smack_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) +static int smack_inode_notifysecctx(struct inode *inode, struct lsm_context *cp) { - return smack_inode_setsecurity(inode, XATTR_SMACK_SUFFIX, ctx, ctxlen, 0); + return smack_inode_setsecurity(inode, XATTR_SMACK_SUFFIX, cp->context, + cp->len, 0); } static int smack_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) From patchwork Tue Apr 9 19:18:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892121 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 35F3B1515 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2AE79288B3 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1F36E28942; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 48813288B3 for ; Tue, 9 Apr 2019 19:19:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726892AbfDITT1 (ORCPT ); Tue, 9 Apr 2019 15:19:27 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:35993 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726906AbfDITT0 (ORCPT ); Tue, 9 Apr 2019 15:19:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837565; bh=C4pqK0cCjqPg2OjmA/YdWF8k0OBv4qNwJVjWV8L6d5Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=m2IXsNf2mSNaYs7BNQYtP4Vrt96zZ8VB/FLvck8FOMlk9Yf7ijF3UNhY37CvAXG193ClRX13yBeghXERrrmMHTCzzgFgzdC6OQYII1G6+DWeFtDxzQr1TrQCYkE4TtFSj8B+mFL0t4Yi9s0LJOzDp0RlUI4TlDpfQHnZclSIHcOCYi/riAuWMZeM3KVLLfC0vwZ/Z6PZMaLMqMSdi3F0NEeF8aRoXg9In+eudhItJEwFYdvV6G0Yv4E/ftQaxSoyqsRB2JYcawyPwQ5XnPzqNdcjJzwp/K9ksQ7Wjdux3+/g8iX7Q4EOlj1JwQilm5c+L4BB5tUCLVKOiaJkFqSU2Q== X-YMail-OSG: 7KO6wxIVM1kx6RwX752JdzRAYMoQpghNX5skGRffYenkRt3BkCY4_c809plkB5J XFb9ZTx7JE9uT7Jn9sjvWAtQ8UWxGWqP4ZJe4LVzAnZ_rhyDfpqmvqbBgQwgL6.v2WmuGn4Wwe3N 57bmqi9DcErZRqD1UtLqftSRtBc3h9iZ3LipgvwYev2XZeUpsoqLVTY4w7EDU9r6Xaf2PkSTdIyM gRl5k3U0I0HW1ilw8Y_j3Ab_BehtzV2vwo4vHFK0o42svisntF01dTfVWS3Nf645ur9dJs818soq BmD5PLLCpPh7.7dV191cj6Hq9n7zQEYZVY6tgv8dklx8s0M4gKEzTwUAK8pMY6pI7R8svmy204le RIBVouIDKs_ahrg7pn8DssM_3HOsi6pfVKwverqFg4S7XWanqwyrLQPeYMty1jCiM6vrICgCTGFr AkEtvxq0xA5okkfL.80j4vHM8T_8U5wy0r0uBDiBMhsF5JVaY09Xn21.rRh0Rfaq_cUYOQ8R9zJQ ZVmm7XJaFIL5ceIgCWt14OexVV1XeMDmTuiJ.LPs7490.jJmvRZ_f0Q.irX8dLsl1NGcEliz8.rS tnJ506RGJ.NT5iWbOnIMxV0J42ed856J6qJ.vjc5dNsDZ9Vct4BPrT1JrLpMr1QGZ60KKM6elBMS OonczCWOsj7lJW6Exdli3ZfoISuA3Q0NqJ1AIESteIChxvhqZYBwc1o4VOq7tTQTRBl3X4blNZ5x xUxUP6BqKkkZ3IaTnAe31xCoCsiTGzs9w6SuRJToZhBrsWgl3wm_B5rlzLsmd8WY3U6xvagk3s6I 4nsaWlAMqHz0lBsQfJ5IaDpBCxDVXH6cI1rd1N0hcas3R2wuz8q_DbPsubKe5vqBWlN26eJPAo9. gDBZyCubh1_xiTQzAiCO3J4UioJoch_Kmoxxu4kFal3XXq522_Hl9MBSJWbcZFVRhG.Vj9uypUy5 EdovcEPUEmonZSpsGnAxSVaQ0ympFZJqwYd.M3GiWgXagspOvtYsqta8SUUV2ufGco3YgRGSj7Eu Qum9kMYHgN2dfiPYBgm0nPoFzal4sKgZugLwCcleS.lb.8MyifVhBEzoUtYh3sg3bKFk0ocIpo1h Eq4Z__LfOfYaISxsQCakQC8lFIZxnHQ_U4jSaqwYVYxi0KszhFsSKf2bRg6ZF Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:25 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:23 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 42/59] LSM: Use lsm_context in dentry_init_security hooks Date: Tue, 9 Apr 2019 12:18:31 -0700 Message-Id: <20190409191848.1380-43-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Casey Schaufler Convert SELinux to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 7 +++---- security/security.c | 10 ++++++++-- security/selinux/hooks.c | 8 ++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 3344d18ba9d0..f60ec98596c8 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -166,8 +166,7 @@ * @dentry dentry to use in calculating the context. * @mode mode used to determine resource type. * @name name of the last path component used to create file - * @ctx pointer to place the pointer to the resulting context in. - * @ctxlen point to place the length of the resulting context. + * @cp pointer to place the pointer to the resulting context in. * @dentry_create_files_as: * Compute a context for a dentry as the inode is not yet available * and set that context in passed in creds so that new files are @@ -1500,8 +1499,8 @@ union security_list_options { int (*sb_add_mnt_opt)(const char *option, const char *val, int len, void **mnt_opts); int (*dentry_init_security)(struct dentry *dentry, int mode, - const struct qstr *name, void **ctx, - u32 *ctxlen); + const struct qstr *name, + struct lsm_context *cp); int (*dentry_create_files_as)(struct dentry *dentry, int mode, struct qstr *name, const struct cred *old, diff --git a/security/security.c b/security/security.c index ecaabc820d87..5e35adb43d65 100644 --- a/security/security.c +++ b/security/security.c @@ -1032,8 +1032,14 @@ int security_dentry_init_security(struct dentry *dentry, int mode, const struct qstr *name, void **ctx, u32 *ctxlen) { - return call_int_hook(dentry_init_security, -EOPNOTSUPP, dentry, mode, - name, ctx, ctxlen); + struct lsm_context lc = { .context = NULL, .len = 0, }; + int rc; + + rc = call_int_hook(dentry_init_security, -EOPNOTSUPP, dentry, mode, + name, &lc); + *ctx = (void *)lc.context; + *ctxlen = lc.len; + return rc; } EXPORT_SYMBOL(security_dentry_init_security); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 633d62b97e90..fe09905d013c 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2813,8 +2813,8 @@ static void selinux_inode_free_security(struct inode *inode) } static int selinux_dentry_init_security(struct dentry *dentry, int mode, - const struct qstr *name, void **ctx, - u32 *ctxlen) + const struct qstr *name, + struct lsm_context *cp) { u32 newsid; int rc; @@ -2826,8 +2826,8 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode, if (rc) return rc; - return security_sid_to_context(&selinux_state, newsid, (char **)ctx, - ctxlen); + return security_sid_to_context(&selinux_state, newsid, &cp->context, + &cp->len); } static int selinux_dentry_create_files_as(struct dentry *dentry, int mode, From patchwork Tue Apr 9 19:18:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892133 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1B7CF4A09 for ; Tue, 9 Apr 2019 19:19:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0F692288B3 for ; Tue, 9 Apr 2019 19:19:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 036942893A; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9FEAD288B3 for ; Tue, 9 Apr 2019 19:19:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726668AbfDITT3 (ORCPT ); Tue, 9 Apr 2019 15:19:29 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:43873 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726917AbfDITT3 (ORCPT ); Tue, 9 Apr 2019 15:19:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837568; bh=74rPh+sCnMpg6mZ/XiPS4qZefks1l7WGjfPbmrUu5zs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=TRpaDN6AFg6boZD+p/7VRiT7KvI20QbyboOUnFaqWeHgiCvBYZ+xVbt902TiQsJYCAcegO/5zqoLY+amKZycNg2AvmSKHkeObK0jJbB8k1y8oJC1AxOfsPhVknmxH5xBhL+UwjflGNgUXp0z6j84jogQoI867DeLD2nQmgGK8iqiRsEkTLgXFQsgE5E3wGJgA69/Yh1oAa0+Z7aPQECeSg3NYUUSkj4XDTwUc43/zbmspW2Z/ph1rzkHEwpVDleqqIDNZIKcEbyytRm4ZuETnDmFjzSNkXjOZBRuxBM32c2oW59PqgTCZVEEJvdk+tfxG+UNTFNrJVrNaN+Ki67Krg== X-YMail-OSG: Oz2xM3MVM1nngxHDRS_ks2DDnU7bfE9I9O29m69tIRM3Rv1OLmNf.dj36xe3vQE k5kK8_ntSYFXz0.TYG12QtTz_qQS0DAUQRbgkNYyzYLGGRPLGDKNsynN3B34lvtJZPfcVFvawlRm KxOFMANnj9oFJFmgB2Gk_u.Ri8gNJ6v8H16mEtnd.G.r9gEMHTdu2TTdU088PstTV8jgdLzQMh1o vyZwfFh7XzcAxqTSjR6ap.USBvia1inGwqNHSs07xpwJcKq9lq3XevTTNkIWqFLa1R4qTfiPrkVm PtMWfC00zFsCJTQnI.z0PBIwIIFLaGs53RzNKmPNu5Pby3oz7iK74D_imNo.BImbEhLP_zRUxJSn Ke87jDXh_SeeeWG.lNc8AmPaW5nAk2pV7WFp_0BxzAj7wiXakYR.EJqL2GJzoiOzyhbrVTe.Xh96 9E6dG7kkPfL3dKSL9H2Z.o0qCCeImoBMuXv7vdK8nPCJIX8ChYrUTbeabQCc64BVNSkb8ml605PX 4SdFtnBc8lld9eGOb1dzkCHhKB5aiNIeJL_51oRwenyohC8_5ct6mGKTEzH6FTw.rpbThSf6eF.i Z1V..Lci_h0lhGSqfO5j8VO1xCP1Qte00jlhGXDFpTPf0O_tKYeZ23hBC5x4wirXjMRJ9Gih4MfF 92n2QS2bZ9UQ5mjxe7YTm9ZXPtw29nmRMczrgMosN27wjV70qDGGBODEUnpoVBR_s.y0ZQcz2170 BBjht.99FCG41Njv.1bTOxbXloNE.i1dnf7U4CL6wcwxkoByBwyMwbj8hz564c3xjyLXna5iiiqI t6RAaiBQMpbDh1p10e7Dy16TrxCBA9Q8A3._vGWQPCxaUdlSjQqo17UNOxzOTB8nlvyjk0Xr3XX4 UVkFbjyOlcn9N43est0xb7ij7SWGAjFd.HHjQVh8Y9tlGquqq9n.eMHCbuIh2GEzwizUU_ifdmhU NYUKNT16bDSPxCcgaLzITpbrhBnk9k7beu0djK1DvVVi5N0KwOiCSa0OcR4lI9gfZx0MUQYvUg7n KbN8myOSgQ8ZdwKwESUyT6c42uuhSf1heaQM74zhoXmMNPtKsFZTGZ2vSCdTG4za4UieZq.GhSkd AAfq6BvdvGypBjN_5.sLEOURc1meMFHQ5HeFx6LoKFvrUF4dvIENkZ98LA4Y- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:28 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:24 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 43/59] LSM: Use lsm_context in security_dentry_init_security Date: Tue, 9 Apr 2019 12:18:32 -0700 Message-Id: <20190409191848.1380-44-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Casey Schaufler Convert security_dentry_init_security to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- fs/nfs/nfs4proc.c | 5 ++++- include/linux/security.h | 7 +++---- security/security.c | 14 ++++---------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 4dbb0ee23432..de000649f9f3 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -113,6 +113,7 @@ static inline struct nfs4_label * nfs4_label_init_security(struct inode *dir, struct dentry *dentry, struct iattr *sattr, struct nfs4_label *label) { + struct lsm_context lc; /* Scaffolding -Casey */ int err; if (label == NULL) @@ -122,7 +123,9 @@ nfs4_label_init_security(struct inode *dir, struct dentry *dentry, return NULL; err = security_dentry_init_security(dentry, sattr->ia_mode, - &dentry->d_name, (void **)&label->label, &label->len); + &dentry->d_name, &lc); + label->label = lc.context; + label->len = lc.len; if (err == 0) return label; diff --git a/include/linux/security.h b/include/linux/security.h index 8dd21133ede8..ba9bcdbfaebe 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -304,8 +304,8 @@ int security_sb_clone_mnt_opts(const struct super_block *oldsb, int security_add_mnt_opt(const char *option, const char *val, int len, void **mnt_opts); int security_dentry_init_security(struct dentry *dentry, int mode, - const struct qstr *name, void **ctx, - u32 *ctxlen); + const struct qstr *name, + struct lsm_context *cp); int security_dentry_create_files_as(struct dentry *dentry, int mode, struct qstr *name, const struct cred *old, @@ -676,8 +676,7 @@ static inline void security_inode_free(struct inode *inode) static inline int security_dentry_init_security(struct dentry *dentry, int mode, const struct qstr *name, - void **ctx, - u32 *ctxlen) + struct lsm_context *cp) { return -EOPNOTSUPP; } diff --git a/security/security.c b/security/security.c index 5e35adb43d65..7069ff857f58 100644 --- a/security/security.c +++ b/security/security.c @@ -1029,17 +1029,11 @@ void security_inode_free(struct inode *inode) } int security_dentry_init_security(struct dentry *dentry, int mode, - const struct qstr *name, void **ctx, - u32 *ctxlen) + const struct qstr *name, + struct lsm_context *cp) { - struct lsm_context lc = { .context = NULL, .len = 0, }; - int rc; - - rc = call_int_hook(dentry_init_security, -EOPNOTSUPP, dentry, mode, - name, &lc); - *ctx = (void *)lc.context; - *ctxlen = lc.len; - return rc; + return call_int_hook(dentry_init_security, -EOPNOTSUPP, dentry, mode, + name, cp); } EXPORT_SYMBOL(security_dentry_init_security); From patchwork Tue Apr 9 19:18:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892149 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 926E91800 for ; Tue, 9 Apr 2019 19:19:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 86421288BD for ; Tue, 9 Apr 2019 19:19:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7A6ED2893B; Tue, 9 Apr 2019 19:19:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1BFFD288BD for ; Tue, 9 Apr 2019 19:19:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726914AbfDITTc (ORCPT ); Tue, 9 Apr 2019 15:19:32 -0400 Received: from sonic313-26.consmr.mail.gq1.yahoo.com ([98.137.65.89]:40890 "EHLO sonic313-26.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726913AbfDITTb (ORCPT ); Tue, 9 Apr 2019 15:19:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837570; bh=BkiVgWxV8LugM7dQFM0z6uB/OZ9M/gQ3t5pE0/A8yGY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=VNZzf7duptRaa7JcvpilXuiXsGDbs8wUmoHmmEfgr6DSUKKlnDz4En+46LguosW0FxgCigcYK2/UEUx1gEuRkBBKQfknQ1bysUFt/H2Eb4de+n7aqlS09BL8v90ZyJuaCjqoOkBqJ3UG0xwgHtad4Jo8TyT8kM1fJo0WInrsO2VeWGR6wY4EkbW0Bmr+xEw2u895fuJTLBwS+ltm1Fld4rcH7cjbenHHeVqlhhcnkQg8v0fBJ0ZaqOTysUUrLmy2rZxRbxwYgVnHHddc7mYx69s5Jjc1WK/L8d+LdjoZEIJgvNdnltK9HDtAaInWKfGWI7cROdEfvjDbooOs/vEK+w== X-YMail-OSG: wSnXHm4VM1mHR_R8BZfO4mfhQ9Dh6SiasFIuKBTOYSQnoVbKDWDd2IYcTgTdpRR UX8of67bWMJmAiAcIEMgvmf78Lpug7BgskoXeX4Aqf7vv4vwuiGUPKcwKtOvtry5o7J2xzd6oXJ_ ZKRR1HhxO9toBLg5Uc8SbGj0LFC6z_OO3O4HxyZ0V4Cpm1elvQOl3yCMtntyNiuvCOTloj8mfj6t aVtEzavzkeSYAopVY3mVbv_15b3crvut9JJiEra9nxcTAT3tK1NAwd7SzMqt64v5xUTzouZSpjXk alCn7pOSx4n4dsZoF2NxN4XR.cLlxZmNsaDSNKQxcT9QjBFWoXa2KRxvUSnTtghZDV8OsAD6ipFg h4TZ3vtMByliQ4uBAqzB7ikhigukiNAAiAWPLXJt4MrcOLuleM.kvSVxJWUCsaD2pRibi6L0dV45 68hDJjELesFuPCeRSwzZNLPhuwJASIFAnVPhOL04wsLKROXQtN7rat23pQ8569SxWlzx3ICwwPwi foS9qqQAiJD6dd50b9wQ40zQKUPf30sNs.RjsIdzgg_ADodo8vgyY.zT8JcFTbWMjgXjc9bkLi9G NetZwc3cJmLr3NIDgQvcIZAkxl7TPN_I2qXCeWRR4jAhS9XalylKBrUmAwHBNF6_uI_Wmek35TFV 9FwZbI4Nq_9WtqslJSn8Z14rIzaBjDrlFlgxHhlKHbUejbRC5T_m5_JXaAPOtXOkFaidXnKIjd5c 4iEQXYFhJ5HyDj5SHuWlGN3WRmH2g..QVDDlQD5MqAd1rE0W9CGmwiRouZuJBKzpGjjHlgDp61ge Eid9TVU4gshKZ_IN1rPHqUyixYKCEUSWpEWjLOcLFjvssHlFV19FBOtsTLM6uW0wqNb4juJWV6kS j_z7rJwYzL611spMTLH_ZnxXWhawLdFAXCEPoExQyg2nKo1RB23nCcYYr3iAkFo.XRoyrldEBbHk sLA7FrJw.EG4ITVmmMM4gosmbZIAh5bM.._FgYIxVJgI5EO5iIavWu4OqHQidA_JsTnBzI_UCNHO 8rup0ugqUrtWccK6jjd186FMaWyQwbMq6sy2psHDvN4gzvHmaf.nF4K1vTnfN.QEn7aeFaGuOCaK n8zOqI0jr1R_raqnS9gZ5XLbZaKoEb.tV.quL3F3_o0Ba9_GJKqyY_dVDBA4- Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:30 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:25 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 44/59] LSM: Use lsm_context in security_inode_notifysecctx Date: Tue, 9 Apr 2019 12:18:33 -0700 Message-Id: <20190409191848.1380-45-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_inode_notifysecctx to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- fs/kernfs/inode.c | 6 ++++-- fs/nfs/inode.c | 6 ++++-- include/linux/security.h | 5 +++-- security/security.c | 8 ++------ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 0c1fd945ce42..460e611b1938 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -184,6 +184,7 @@ static inline void set_inode_attr(struct inode *inode, struct iattr *iattr) static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) { struct kernfs_iattrs *attrs = kn->iattr; + struct lsm_context lc; /* Scaffolding -Casey */ inode->i_mode = kn->mode; if (attrs) { @@ -192,8 +193,9 @@ static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) * persistent copy in kernfs_node. */ set_inode_attr(inode, &attrs->ia_iattr); - security_inode_notifysecctx(inode, attrs->ia_secdata, - attrs->ia_secdata_len); + lc.context = attrs->ia_secdata; + lc.len = attrs->ia_secdata_len; + security_inode_notifysecctx(inode, &lc); } if (kernfs_type(kn) == KERNFS_DIR) diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 414a90d48493..8d0be9767b14 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -340,14 +340,16 @@ static void nfs_clear_label_invalid(struct inode *inode) void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr, struct nfs4_label *label) { + struct lsm_context lc; /* Scaffolding -Casey */ int error; if (label == NULL) return; if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) { - error = security_inode_notifysecctx(inode, label->label, - label->len); + lc.context = label->label; + lc.len = label->len; + error = security_inode_notifysecctx(inode, &lc); if (error) printk(KERN_ERR "%s() %s %d " "security_inode_notifysecctx() %d\n", diff --git a/include/linux/security.h b/include/linux/security.h index ba9bcdbfaebe..2abbaf72779e 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -439,7 +439,7 @@ int security_secctx_to_secid(const char *secdata, u32 seclen, void security_release_secctx(char *secdata, u32 seclen); void security_inode_invalidate_secctx(struct inode *inode); -int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); +int security_inode_notifysecctx(struct inode *inode, struct lsm_context *cp); int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); #else /* CONFIG_SECURITY */ @@ -1234,7 +1234,8 @@ static inline void security_inode_invalidate_secctx(struct inode *inode) { } -static inline int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) +static inline int security_inode_notifysecctx(struct inode *inode, + struct lsm_context *cp); { return -EOPNOTSUPP; } diff --git a/security/security.c b/security/security.c index 7069ff857f58..f5e332bfcdbe 100644 --- a/security/security.c +++ b/security/security.c @@ -2026,13 +2026,9 @@ void security_inode_invalidate_secctx(struct inode *inode) } EXPORT_SYMBOL(security_inode_invalidate_secctx); -int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) +int security_inode_notifysecctx(struct inode *inode, struct lsm_context *cp) { - struct lsm_context lc; - - lc.context = ctx; - lc.len = ctxlen; - return call_int_hook(inode_notifysecctx, 0, inode, &lc); + return call_int_hook(inode_notifysecctx, 0, inode, cp); } EXPORT_SYMBOL(security_inode_notifysecctx); From patchwork Tue Apr 9 19:18:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892137 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5B0771390 for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4E70A288B3 for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 425C928917; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8522288B3 for ; Tue, 9 Apr 2019 19:19:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726898AbfDITTb (ORCPT ); Tue, 9 Apr 2019 15:19:31 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:36017 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726906AbfDITT3 (ORCPT ); Tue, 9 Apr 2019 15:19:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837568; bh=zegT0UV/a0mEisN0gB9wl+y3EnZt90kYI1JdG3iO73s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=mxBMZdEg+7Y+PpGnvQ4reYphkiXQETjt/pR9APP6fYKWqmL8c26UYJAkGS9DtG/Q+1qwwi3Rv7U4h6Ypsny+exoOorulF5y4ToSF8PWbmAzs6fp7VYRmd+IfAof8LuK0ypaKv7plcemm+563n4UEHzg/nKUVlg3Ipjxgi2YB+PDsNX2dN/Mr2J1HRSKnm1U6tl3kgN261zKf+WT4LR8tlBVujvhs2HdcjoHOdTAfCk+2ocDI8Q0NLtja3Agkfu9dgLcHwZiqyjyPLadb2qenYXrHdUCR8VffZc4iZUAzlxNgVfhBt1lNJNan3rGJWyCBlRyDq6guoHYFDRxz81FZ4g== X-YMail-OSG: 9pd_l5kVM1mmSpdjFnlFTOwiCfkG56q2be6n_ttXAFO19Ecj1gtCxd.WiPAq_Fy RIV.0c5RQH3r3OxUGR0wAD_HTUDIB.pzF_haYq4SkOiZUHR_fjEF7b54UCbRFlMXCdc0cJl6moPr QMMscrwmz06j4cirbJMrfIn0MOgIT3PhXhM2fcQkxCREx6KnQcKiasRlO742c54ZAF30vM9jVQ6L VwZTIsfmgMafFRP6tlsgExqaDpYRDY.i3XfC9_FxN0tH1AgM2UWikjMsOTw57_Q_uhpKsUEUJenW bLuIl6vy_2lXTUZNKv5DqojkFV5WORpzuWd08nUcVqye9fFolV2qw2SVvlcAUUrHnQmXFqwxYyaV S26Sz3RDIr_ev99pAB.77tn1rS0hb1Vo_TuEcm_lWYpvpJN_nZEZLoAW260daWpMQ9iy5y34sEl2 ct1zh0UWLfrvadtaQWn.4QrhLF.o8LE1AJ7VFu2OQE5O3iM0X.547GBW3XWe_Fd.hQ_rkFuyZbRn cFB3uE1hLeQmpd247DaOOhOq2g8Ks0.ZC9fwsLR_bmaRvayki.pfihZXj56T2luacJe7l9jqKqOg RxF7ISZqkLinGnmncB3u43qMVss1qYMb8clmKrsu0XnDS.aIwvUz1hxO.fJcIYY04uOWd65v5q2R oJXsnM5PG3seASIWvl7ttlrWxVW5RCp9SHgR4k8vC90tzcgmzBIlqtbF22T1rWpXcKfLvjLkH0QM XK1nP3DwX_ldcgbHSXPz0CfX8vFjJKJ5maeIY5F_APEP3fYFXl2VBksmOXD9yXONVj5RZ69alTKr EMFhH2AX5G9oa.mkU8_01EQ_sGJkgtegVUUuSLaaLR5MOjDhnnm6zb_RaYAfEJ7ZR3SBVnWneoG4 Je83QlL0eNx7dsMCpCH3cbjYglmaGNToxzLDRbJzAUmK9QzDa0mw2wurpUwGFAY6I1NMhY8Iq82Q 0psIxkhWiNXTRHHFjU0yGIqM3E_ptn.c75DPV6oVOfM4_Le3TloUPI0GcDn3TmrxXX9.kxdJpDnK iEeOQ7T.FYePobRnr9DpLf6bLXfsuWjnEG6MnoBRYV0zjbOsW6MT42Mkjuj3ykGabCjbPU0yWvrN s4XokpR5rMDVNf3cefW4E1k6mBVKVGcgnYgG2ICagOe9IR_qZJ2eXPlpbthGz Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:28 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:25 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 45/59] LSM: Use lsm_context in security_inode_getsecctx Date: Tue, 9 Apr 2019 12:18:34 -0700 Message-Id: <20190409191848.1380-46-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Casey Schaufler Convert security_inode_getsecctx to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- fs/kernfs/inode.c | 11 +++++------ fs/nfsd/nfs4xdr.c | 14 ++++++-------- include/linux/security.h | 5 +++-- security/security.c | 11 ++--------- 4 files changed, 16 insertions(+), 25 deletions(-) diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 460e611b1938..41c5afc698fc 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -351,8 +351,7 @@ static int kernfs_security_xattr_set(const struct xattr_handler *handler, { struct kernfs_node *kn = inode->i_private; struct kernfs_iattrs *attrs; - void *secdata; - u32 secdata_len = 0; + struct lsm_context lc = { .context = NULL, .len = 0, }; int error; attrs = kernfs_iattrs(kn); @@ -362,16 +361,16 @@ static int kernfs_security_xattr_set(const struct xattr_handler *handler, error = security_inode_setsecurity(inode, suffix, value, size, flags); if (error) return error; - error = security_inode_getsecctx(inode, &secdata, &secdata_len); + error = security_inode_getsecctx(inode, &lc); if (error) return error; mutex_lock(&kernfs_mutex); - error = kernfs_node_setsecdata(attrs, &secdata, &secdata_len); + error = kernfs_node_setsecdata(attrs, (void **)&lc.context, &lc.len); mutex_unlock(&kernfs_mutex); - if (secdata) - security_release_secctx(secdata, secdata_len); + if (lc.context) + security_release_secctx(lc.context, lc.len); return error; } diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 3de42a729093..1bf34730d054 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2420,8 +2420,7 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, __be32 status; int err; struct nfs4_acl *acl = NULL; - void *context = NULL; - int contextlen; + struct lsm_context lc = { .context = NULL, .len = 0, }; bool contextsupport = false; struct nfsd4_compoundres *resp = rqstp->rq_resp; u32 minorversion = resp->cstate.minorversion; @@ -2477,8 +2476,7 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, if ((bmval2 & FATTR4_WORD2_SECURITY_LABEL) || bmval0 & FATTR4_WORD0_SUPPORTED_ATTRS) { if (exp->ex_flags & NFSEXP_SECURITY_LABEL) - err = security_inode_getsecctx(d_inode(dentry), - &context, &contextlen); + err = security_inode_getsecctx(d_inode(dentry), &lc); else err = -EOPNOTSUPP; contextsupport = (err == 0); @@ -2907,8 +2905,8 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, } if (bmval2 & FATTR4_WORD2_SECURITY_LABEL) { - status = nfsd4_encode_security_label(xdr, rqstp, context, - contextlen); + status = nfsd4_encode_security_label(xdr, rqstp, lc.context, + lc.len); if (status) goto out; } @@ -2919,8 +2917,8 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, out: #ifdef CONFIG_NFSD_V4_SECURITY_LABEL - if (context) - security_release_secctx(context, contextlen); + if (lc.context) + security_release_secctx(lc.context, lc.len); #endif /* CONFIG_NFSD_V4_SECURITY_LABEL */ kfree(acl); if (tempfh) { diff --git a/include/linux/security.h b/include/linux/security.h index 2abbaf72779e..b9f824952748 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -441,7 +441,7 @@ void security_release_secctx(char *secdata, u32 seclen); void security_inode_invalidate_secctx(struct inode *inode); int security_inode_notifysecctx(struct inode *inode, struct lsm_context *cp); int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); -int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); +int security_inode_getsecctx(struct inode *inode, struct lsm_context *cp); #else /* CONFIG_SECURITY */ static inline int call_lsm_notifier(enum lsm_event event, void *data) @@ -1243,7 +1243,8 @@ static inline int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 { return -EOPNOTSUPP; } -static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) +static inline int security_inode_getsecctx(struct inode *inode, + struct lsm_context *cp); { return -EOPNOTSUPP; } diff --git a/security/security.c b/security/security.c index f5e332bfcdbe..b7e15cbd4021 100644 --- a/security/security.c +++ b/security/security.c @@ -2038,16 +2038,9 @@ int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) } EXPORT_SYMBOL(security_inode_setsecctx); -int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) +int security_inode_getsecctx(struct inode *inode, struct lsm_context *cp) { - struct lsm_context lc = { .context = NULL, .len = 0, }; - int rc; - - rc = call_int_hook(inode_getsecctx, -EOPNOTSUPP, inode, &lc); - - *ctx = (void *)lc.context; - *ctxlen = lc.len; - return rc; + return call_int_hook(inode_getsecctx, -EOPNOTSUPP, inode, cp); } EXPORT_SYMBOL(security_inode_getsecctx); From patchwork Tue Apr 9 19:18:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892153 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5012B1800 for ; Tue, 9 Apr 2019 19:19:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 377E7288B3 for ; Tue, 9 Apr 2019 19:19:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2970C28924; Tue, 9 Apr 2019 19:19:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 90CBF28917 for ; Tue, 9 Apr 2019 19:19:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726913AbfDITTd (ORCPT ); Tue, 9 Apr 2019 15:19:33 -0400 Received: from sonic309-27.consmr.mail.gq1.yahoo.com ([98.137.65.153]:38298 "EHLO sonic309-27.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726921AbfDITTb (ORCPT ); Tue, 9 Apr 2019 15:19:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837570; bh=Bz4Myh+vsbujN22ch93KZc6mzSg5aPOU0wuPwMKBSrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ezt/nsCFWWx/UACsnLzkde6Czv0oHoQp7glzx6EbTxbq+hcTubVcam6cfCuv38kN4brJIJBJc8fFRy5ut9h1O99TCBLcIS9TyykGaMhrwxhoChNt8nbjqwc8LManNwBW738Mvt7qhxK4nS7koWo2HHjysIzLr/OicqALEs4buUJ7WDvQ7zSp67AELTV/UVQva53FiOiOVobqQ/MZyMxbmB4IaJoUozloKFU4QhKGTqA5vHqSzN96pEg5pXoAqh4SZ1QUqyU2xgaDwA6ayYKMBitR6znYwfSciwNoY4rPxNhen0ZI0C23+6DdvROsbwaEMMfdjjmM5FiTwVCXh7+jtQ== X-YMail-OSG: bPNdFA0VM1nRi3lugPh40VqglWicZHYGudFOA8_YCRXRkCtqQ3MeyLfMqB3o.5S 2z0zjmqk9atNd8VZzBW6P.3bz3Ppgz6NaOhlbZWdxGqAOeDq6NEq.qfg.OsoB2cwVfX3GZaLIOwn BV0pdn.QR0V9LOPMEAqFwDK4WWn6fK4JgAHdRlwTkfgChwSXWj48qzwNwM_BEG7uuHVsBydWssDZ CnbR2cjr_sJipwtHSK2xPa18O_dKqvc1Z9EuUiDI3kE3fxFsXTllgKs_N4nYwBCDCYyx_CIWjA6S _Rrr0csfAkCuKXRHzSr40VawEhXsGIHUDrGrvHeZl2dsMazdESQO3HkaF7CSahTkvS68edgZYSwI _cLWpTUGE_j_yVdVHAhcfdY6VULyiAdpnkOvVH9k9yNd82R8z_Xx.Vcy_YtJvcHo6eGhhkEnMlEv UFiy39hIMfrKzLePvVuEXmvYURCUyPq8AN3WehWrDqHY23E88aODmoaXdC.P_mH7Z.DJGFUz3PCp _9zY5Hm54bI9ivBTr61fKulCWZujrwKFnu_fiYHelA9J39lWK1SuVLXXDD3.g0p6whDGImJ62wYv 8TbiQaNnhWYOG4cgk7l95LPvBG01XmvNff1ffsd37GLTGkbwlMHTIGWq6V3Xnd6RTXf.dNtK9Kuy MduT4USERhzBPnwYPiSojcvnBJfdABsCXqPnhkXzSbj.MbFqnGf9jlPUuWoHFCfxesxBwKuulL6c 9RVzZPCAnSAMvgbhjJpWPVhjhb74LXLTS1ogAnuEyiJWKS8mcLQX36lM3nMFJnswkc_F69vVbS3M gKY55VphNpDdrFXMBb5FYU3xKh0s2APDmE4J0AZbqadETwxnI22LFStLUpBmsH6mz9jirnGYkhdW sOMLShq.gY5sIzEvETkPAVwt9dTtqS6vTAl4BunMGVqVPgwE6Wssc.v0Mx1gvY9IJxDBp.96ZzrA 1R7jwjLYyTfqrGs3Wo.yyrDXMA14sSduCg6lIpxNckcf7QPrHk11tH8eCCM.lDjy8iWGnTK4QuRi 6XJgaweibuk2VAyT9r39QJJOMx.xuB38Xe1qkEB7JXy0xtFFlNpQliLIHg1iB9KndrhCW8ghk.I2 pRQ5S0Gmwt2i6NAhQHNjDzNfS_jyB9Q75vXF3HTpoj5VDmXYop_O_q5M13Qc- Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:30 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:26 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 46/59] LSM: Use lsm_context in security_secctx_to_secid Date: Tue, 9 Apr 2019 12:18:35 -0700 Message-Id: <20190409191848.1380-47-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert security_secctx_to_secid to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/security.h | 6 ++---- kernel/cred.c | 5 ++++- net/netfilter/nft_meta.c | 5 ++++- net/netfilter/xt_SECMARK.c | 5 ++++- net/netlabel/netlabel_unlabeled.c | 16 ++++++++-------- security/security.c | 8 ++------ 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index b9f824952748..9a842a20b4b7 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -434,8 +434,7 @@ int security_setprocattr(const char *lsm, const char *name, void *value, int security_netlink_send(struct sock *sk, struct sk_buff *skb); int security_ismaclabel(const char *name); int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen); -int security_secctx_to_secid(const char *secdata, u32 seclen, - struct lsm_export *l); +int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l); void security_release_secctx(char *secdata, u32 seclen); void security_inode_invalidate_secctx(struct inode *inode); @@ -1219,8 +1218,7 @@ static inline int security_secid_to_secctx(struct lsm_export *l, return -EOPNOTSUPP; } -static inline int security_secctx_to_secid(const char *secdata, - u32 seclen, +static inline int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l) { return -EOPNOTSUPP; diff --git a/kernel/cred.c b/kernel/cred.c index 7792538b1ca6..ebae67fdd4d0 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -724,10 +724,13 @@ EXPORT_SYMBOL(set_security_override); */ int set_security_override_from_ctx(struct cred *new, const char *secctx) { + struct lsm_context lc; struct lsm_export le; int ret; - ret = security_secctx_to_secid(secctx, strlen(secctx), &le); + lc.context = secctx; + lc.len = strlen(secctx); + ret = security_secctx_to_secid(&lc, &le); if (ret < 0) return ret; diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c index a1d3dab5bc25..f25b26318d72 100644 --- a/net/netfilter/nft_meta.c +++ b/net/netfilter/nft_meta.c @@ -577,11 +577,14 @@ static const struct nla_policy nft_secmark_policy[NFTA_SECMARK_MAX + 1] = { static int nft_secmark_compute_secid(struct nft_secmark *priv) { struct lsm_export le; + struct lsm_context lc; u32 tmp_secid = 0; int err; lsm_export_init(&le); - err = security_secctx_to_secid(priv->ctx, strlen(priv->ctx), &le); + lc.context = priv->ctx; + lc.len = strlen(priv->ctx); + err = security_secctx_to_secid(&lc, &le); if (err) return err; diff --git a/net/netfilter/xt_SECMARK.c b/net/netfilter/xt_SECMARK.c index 9a2a97c200a2..a06e50535194 100644 --- a/net/netfilter/xt_SECMARK.c +++ b/net/netfilter/xt_SECMARK.c @@ -50,13 +50,16 @@ secmark_tg(struct sk_buff *skb, const struct xt_action_param *par) static int checkentry_lsm(struct xt_secmark_target_info *info) { struct lsm_export le; + struct lsm_context lc; int err; info->secctx[SECMARK_SECCTX_MAX - 1] = '\0'; info->secid = 0; lsm_export_init(&le); - err = security_secctx_to_secid(info->secctx, strlen(info->secctx), &le); + lc.context = info->secctx; + lc.len = strlen(info->secctx); + err = security_secctx_to_secid(&lc, &le); if (err) { if (err == -EINVAL) pr_info_ratelimited("invalid security context \'%s\'\n", diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index f79ab91bf25e..707ea5a364b0 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -894,6 +894,7 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, void *mask; u32 addr_len; struct lsm_export le; + struct lsm_context lc; struct netlbl_audit audit_info; /* Don't allow users to add both IPv4 and IPv6 addresses for a @@ -914,10 +915,9 @@ static int netlbl_unlabel_staticadd(struct sk_buff *skb, if (ret_val != 0) return ret_val; dev_name = nla_data(info->attrs[NLBL_UNLABEL_A_IFACE]); - ret_val = security_secctx_to_secid( - nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]), - nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]), - &le); + lc.context = nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]); + lc.len = nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]); + ret_val = security_secctx_to_secid(&lc, &le); if (ret_val != 0) return ret_val; @@ -945,6 +945,7 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, void *mask; u32 addr_len; struct lsm_export le; + struct lsm_context lc; struct netlbl_audit audit_info; /* Don't allow users to add both IPv4 and IPv6 addresses for a @@ -963,10 +964,9 @@ static int netlbl_unlabel_staticadddef(struct sk_buff *skb, ret_val = netlbl_unlabel_addrinfo_get(info, &addr, &mask, &addr_len); if (ret_val != 0) return ret_val; - ret_val = security_secctx_to_secid( - nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]), - nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]), - &le); + lc.context = nla_data(info->attrs[NLBL_UNLABEL_A_SECCTX]); + lc.len = nla_len(info->attrs[NLBL_UNLABEL_A_SECCTX]); + ret_val = security_secctx_to_secid(&lc, &le); if (ret_val != 0) return ret_val; diff --git a/security/security.c b/security/security.c index b7e15cbd4021..f51ea4a134ae 100644 --- a/security/security.c +++ b/security/security.c @@ -2002,15 +2002,11 @@ int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) } EXPORT_SYMBOL(security_secid_to_secctx); -int security_secctx_to_secid(const char *secdata, u32 seclen, - struct lsm_export *l) +int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l) { - struct lsm_context lc; - lc.context = secdata; - lc.len = seclen; lsm_export_init(l); - return call_one_int_hook(secctx_to_secid, 0, &lc, l); + return call_one_int_hook(secctx_to_secid, 0, cp, l); } EXPORT_SYMBOL(security_secctx_to_secid); From patchwork Tue Apr 9 19:18:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10892145 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7C3BD1922 for ; Tue, 9 Apr 2019 19:19:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6C299288B3 for ; Tue, 9 Apr 2019 19:19:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6076D28924; Tue, 9 Apr 2019 19:19:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E012628917 for ; Tue, 9 Apr 2019 19:19:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726906AbfDITTb (ORCPT ); Tue, 9 Apr 2019 15:19:31 -0400 Received: from sonic302-28.consmr.mail.gq1.yahoo.com ([98.137.68.154]:35791 "EHLO sonic302-28.consmr.mail.gq1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726914AbfDITT3 (ORCPT ); Tue, 9 Apr 2019 15:19:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1554837568; bh=0HvNAEM5ldRD+uctL0wTIJl/wIYr3ZZyu0EQxH10SGs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=p+aom6pjC1JzX6JiVZfl0TQzgfWBBrpeEQ60N2n+rKjQUgnyS13ZZpefXKWIV1GEy7suAUMWTT0G82mYzTYuZFb4HAPjCQqqZJZ8KX9eSrQcQ/GhQnmwPTkTSssJa3IS6dJI1ZCrtRe8E1jjTU3Pk6QJcE90ajR8PR/3IyrNprcH0oNSFGHFiZvhpPlepM77qar/D47iZ/lziNgtF9jFaacycr+Xf+leT4hoQk7OP83NpeitcMZuz7fWLCv+bdBUXoZdiqFhHQzfUaNLH1BFc9RXFiJfTYQQ2eyME2MJGLQCabpnYk2YuIL6P3NDLrdDp5N96EPTBwVZQfjCaf0shw== X-YMail-OSG: Gic.WfUVM1kEn1A6fjoE3k8y3p2cGjSvzYArcm2vp8skCFMlWuMJ0m5pW29EoHX ixjrmcCwHfJTP2ejO5JeupUXkdx5aC6qvseeIIb7wcGspin7.3PGYkscRwaGe5QhpbGbLzZWSLnB f8ov8vqWZcjkcRU7IkpdItyw5Mj7U7rza2waKTAO3u74ooU6_6auCccXINinC37hd4G3JB3vmIFz WqHHPbSirJhELofzX1DirStFdUyO6CD5RcdB2axYiDXapfGaX6nAc.t5NwOMhpyMMmeN7Y5xq0Au LRRhYzEoOvUnno1JhXIBSye2xDQ6zpTODCOtat_TctBoinaMjUjByM9UVLXmeG3kdS2JQv.EZ35G y0M.uRVQ4Xt5cNAgyLDOcZ8tMaSx3dVqdOrvjlqay17cHdfV3CdhK9pPdVeSjteL_Dh.coSsJC4S nu3apRJKUPn4SohemnmDQ0OCZXJUpSVY2bMfwqAKo6Qs5g9GYts6AuNvGYmCcOdJ0MOP2yIVVGH3 .G0Q_PuAVfQkq_gQkHKdkmp4prFfDAMoR6B1lcBzxlAFw0NSVMaEZWGsd2zLww0G2gJmKR91CjBV jT0LYZtnB9ZXF1Y7vMuO5ZIpzjjjor1FkYH6ie86LfO7P9ogBZouQo0Y3wZ4qtHXHBbrOeQUkEdZ lIe2xlf7PcgRaIHltwl9Q_FJ79uOnhEGm322s4oAlaHcsAhLY2RxPe8kGxQSBntgBHs.lyNgU6xF VU_VnWANUcRtQD36gXMz5gVy_en5QOH9etPcfa89fOOoPD6YHR8WULDbGq5vU9TITeggkJndV682 VCB6DiTvXIYqRWnuM5dvdz_tRvkow7QBWu5e0fQFsZ6__MB1VpxeFbm0znd2uxH8yiZ4tmCsAQem K1Qya9VoB3UwwZ9TdKbhgUU5dIrz3zYUgGycSOLwE.qTuJpkueGY1qnwrc0DWfaU9Jp5BmZdZ5yX Qj_wF7WXF4Vdh.W9Irye.4fu_izqIkoTGwQQnwA2qTdSUdjYx2YXylDVO7O8thDQPVf9Rn6SDjhw gM1h.coPmq_AYnxIZjHm6Xdb1vl9DZ.b2nbzcivOA8cKVPQnJ55X33zc55sOCf4JSDf1v5lAmF.o jC0hwyrX6voJcTmadLq85oRD56rPXIlWWzwI938wpGXQisJnZ1c29x.gsCY37 Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.gq1.yahoo.com with HTTP; Tue, 9 Apr 2019 19:19:28 +0000 Received: from c-67-169-65-224.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([67.169.65.224]) by smtp406.mail.gq1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92df6dee4d3144b341710b3f28d23ef8; Tue, 09 Apr 2019 19:19:26 +0000 (UTC) From: Casey Schaufler To: jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, casey.schaufler@intel.com Cc: keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 47/59] LSM: Use lsm_context in release_secctx hooks Date: Tue, 9 Apr 2019 12:18:36 -0700 Message-Id: <20190409191848.1380-48-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190409191848.1380-1-casey@schaufler-ca.com> References: <20190409191848.1380-1-casey@schaufler-ca.com> Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Convert SELinux, Smack and AppAror to use the lsm_context structure instead of a context/secid pair. There is some scaffolding involved that will be removed when the related data is updated. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 3 +-- security/apparmor/include/secid.h | 2 +- security/apparmor/secid.c | 4 ++-- security/security.c | 7 +++++-- security/selinux/hooks.c | 4 ++-- security/smack/smack_lsm.c | 4 ++-- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index f60ec98596c8..11bfa0a4f188 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1332,7 +1332,6 @@ * @release_secctx: * Release the security context. * @secdata contains the security context. - * @seclen contains the length of the security context. * * Security hooks for Audit * @@ -1671,7 +1670,7 @@ union security_list_options { int (*secid_to_secctx)(struct lsm_export *l, struct lsm_context *cp); int (*secctx_to_secid)(const struct lsm_context *cp, struct lsm_export *l); - void (*release_secctx)(char *secdata, u32 seclen); + void (*release_secctx)(struct lsm_context *cp); void (*inode_invalidate_secctx)(struct inode *inode); int (*inode_notifysecctx)(struct inode *inode, struct lsm_context *cp); diff --git a/security/apparmor/include/secid.h b/security/apparmor/include/secid.h index acfcf99bff0e..a780e56d4f5b 100644 --- a/security/apparmor/include/secid.h +++ b/security/apparmor/include/secid.h @@ -29,7 +29,7 @@ struct aa_label *aa_secid_to_label(struct lsm_export *l); int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp); int apparmor_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l); -void apparmor_release_secctx(char *secdata, u32 seclen); +void apparmor_release_secctx(struct lsm_context *cp); int aa_alloc_secid(struct aa_label *label, gfp_t gfp); diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 35df38592b6e..46c8b9a67ac7 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -123,9 +123,9 @@ int apparmor_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l) return 0; } -void apparmor_release_secctx(char *secdata, u32 seclen) +void apparmor_release_secctx(struct lsm_context *cp) { - kfree(secdata); + kfree(cp->context); } /** diff --git a/security/security.c b/security/security.c index f51ea4a134ae..149cceb5e366 100644 --- a/security/security.c +++ b/security/security.c @@ -2004,7 +2004,6 @@ EXPORT_SYMBOL(security_secid_to_secctx); int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l) { - lsm_export_init(l); return call_one_int_hook(secctx_to_secid, 0, cp, l); } @@ -2012,7 +2011,11 @@ EXPORT_SYMBOL(security_secctx_to_secid); void security_release_secctx(char *secdata, u32 seclen) { - call_one_void_hook(release_secctx, secdata, seclen); + struct lsm_context lc; + + lc.context = secdata; + lc.len = seclen; + call_one_void_hook(release_secctx, &lc); } EXPORT_SYMBOL(security_release_secctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index fe09905d013c..332296f69f76 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6322,9 +6322,9 @@ static int selinux_secctx_to_secid(const struct lsm_context *cp, return rc; } -static void selinux_release_secctx(char *secdata, u32 seclen) +static void selinux_release_secctx(struct lsm_context *cp) { - kfree(secdata); + kfree(cp->context); } static void selinux_inode_invalidate_secctx(struct inode *inode) diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 3d24503029e5..cf27905ccaa5 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4468,9 +4468,9 @@ static int smack_secctx_to_secid(const struct lsm_context *cp, } /* - * There smack_release_secctx hook does nothing + * The smack_release_secctx hook does nothing */ -static void smack_release_secctx(char *secdata, u32 seclen) +static void smack_release_secctx(struct lsm_context *cp) { }