From patchwork Fri May 31 23:09: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: 10970783 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 29C5613AD for ; Fri, 31 May 2019 23:10:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A27728B55 for ; Fri, 31 May 2019 23:10:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E2E628B59; Fri, 31 May 2019 23:10: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 2D7CC28B7A for ; Fri, 31 May 2019 23:10:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726483AbfEaXKc (ORCPT ); Fri, 31 May 2019 19:10:32 -0400 Received: from sonic303-28.consmr.mail.ne1.yahoo.com ([66.163.188.154]:42764 "EHLO sonic303-28.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXKc (ORCPT ); Fri, 31 May 2019 19:10:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344227; bh=Il1LofQJbqDTPd0nbutoh9rZauAEn/qc57mVVqdyysM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Tvh2iFT5ofsjXOn6CSUoYa5nWRfzT2q6YARpkBPyAnZo3mJDnsdJz7hpneaBh5tPUGdPbpe1K77SHMure0U9HnKGFXt6m5be9AuXXLQMxqnNY67lh5ErN23q4zd5yAuVZrxuAsM+h3Z7xYbsFgCybiTTxNuK0jeOe9exJrV4l7dJLNQ3yz7syyfrRjc+aznUoEspbPUauhWeQ+c4XTiNLuQ+dS/jmrujIuIUeEDCWTARZZjchGfnjuFFQaJlrNkjamtP/Ul9I9E/2eEQoXNTifXVTmM4el8eh6n3sucFpFPuyfCFMisqGYB5C9e02i1k9HypAfK35o4AYWYCso2k7w== X-YMail-OSG: bj47JPMVM1mtOTAwWysyvIwyIRIDQ.Rn_lT6WnGsVvcARaD.weZ3RiBIobKk269 lNGmVs67yWwDeGZfKb2.gbLIX_23BC4Ou3k52_dxUZUU7wxE8WNArbjZxllJeT4gCHrFs5a_erOS 2CFA3ztmAe_kZQ3ywDfWq6sCmEhS5UKifT7m.h_400ORbaN.fGqDXplPbq1aqRCuCHbl3QchytVl FqNiEFh0UoAbLBFCOdmRLLPOdV8eZmYdQkvhzBL4DSRPfLeegbpg2L9yRfNUbXQMqUWMDIJIj9Vg KK5wljB4z1njIYFvBqbFuAQKZ5iUYbANDlOqOxiyzCvHqkwdE4Lq_kLgSVUJPHfvvnoWggKbgm4p ZMjyMlm.IC_PsRzgigK66vXNqG3ctiOoaqbqlTyXJLy7_1fRxmxGI801.99NwQC3OPporLumVkFy wXPPnATMhvZZMiWzGFJLESyvL2EUTCiLN3A.VgrnO.sobzZGHFOjksojWMhAk.BSmVDc9Mszvk1D aOBX6gVZXCoJtdW.G5qOh9CJYcat4O7Idn1aZIEHgcw0tmsZU1F6txlg0.lhzy2.yI93sTGjO4Cu VknO.10G8hRSY7Yvz6MC9PS7jxrPqA3xTaxhTl8NEwAwzZY5GQ_EeWiNsiCg0FHHzcZ6VwXbUghA 433a_GzAI2Nuim6baWKsVdUnpAoDM9M8T_C1VXl92rUI6g5Wsb_jwLFNnKqg3905jvwSI3E7h2pv CRNzCQrkf44reEdZaAwCmPa.xih02T1PIDaof80dJZPxtDZ7bchRHDO0hc0g7ia8Pdr7I3MxqPoc 9drNtQIxOwQADOCfb8Rgsh71sTdQ6J5artGvRBYYPtTZd2vZLyhEJ13fuIHBYDcc0PdmJlnJBcHE Z1QYzTLr1fwtgGIXAIIDeq3lvbGTaZBASTm_9WZE_PGDj3Qsxeld5pUmrkwGLkAmRqdptZ2GxmYC FqmpttAtaa6YLFUp5avIgHGnL.wVpy8Y5UADWywOAGuvxE0w6y_v.KLZwyWHYzivIntOCov4GN18 nwYBcBnB8ijoC71CWBJgZtM8_uliLDnrOr1COK..AyHnHZaZQdJTpgyIe8kyWCt0WkqpXW_KwXVi tRjoDajMdNiZwy_LsdZkEp8taVm_nFuMzx3mvQ.J.WKGEz45CsjiV_pPtRVg1rH1uHr14VNRHcag XcWOvxOUQLdYkRJmiKYISPoi5.u0rfpcEzZyv3qdsPmLJdF91nMeEbyit.s4Y.z8d49CBGCyKTd4 W_lAll_74P3kesA99cT3s9SmCX6IHiTVp8Dl9soDf.KBkQsIAuFnkNE6eJKQ- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:10:27 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp402.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID af9421ba70442785cc6539d958422e31; Fri, 31 May 2019 23:10:26 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Infrastructure management of the superblock Date: Fri, 31 May 2019 16:09:23 -0700 Message-Id: <20190531231020.628-2-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Reviewed-by: Kees Cook --- 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 a240a3fc5fc4..f9222a04968d 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2047,6 +2047,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 Fri May 31 23:09: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: 10970841 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 664756C5 for ; Fri, 31 May 2019 23:12:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 52CC328D91 for ; Fri, 31 May 2019 23:12:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4669B28D92; Fri, 31 May 2019 23:12:45 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 3C49F28D94 for ; Fri, 31 May 2019 23:12:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726658AbfEaXMm (ORCPT ); Fri, 31 May 2019 19:12:42 -0400 Received: from sonic317-16.consmr.mail.ne1.yahoo.com ([66.163.184.235]:33626 "EHLO sonic317-16.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726635AbfEaXMl (ORCPT ); Fri, 31 May 2019 19:12:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344360; bh=2X36VmaAWfYHV1ONv3rUfK/va4ULO7J09FbNzHopExQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=imtoQ/uTdeZ+gc+IvmOcDbuM2ERNWhJAfY5JVl50OvArbDQj2kZI7PCfDTLzSisJHlWg3R2DPWSmY08Vgz674otaC4GeHbUiwOVGig6voayHB/FkN58gAdncOYpnQrL73jjKGHvsJjTbsX/gDz2RN9DuEMHI2fzCwVdIpK3qk3d8w1KVDEl0DK0/nL3HSMMQXxNeIEHXacXrsC7tbU1DzOo8lS1w+BxZfR3k6olDXD8bu0EaOrxOuqKGpgY2yfXcWLQLiw+GldNME7g3jZQGq8vdV8/FqBIW4541tp9rlXJyQT5uiMhpZ4iab3b0r0R+ItsqLmfXKQzJD3TbNAhPCA== X-YMail-OSG: wDBEc6IVM1lqJooalMv134VBHHeKQgDVLFd97q9K3n7ditPHQjuHkYw3pXXIexL aAzbY.i3Dp4CCdBom6dHxD4bYTgVzGMdDZFH4P8ywW1BZIO76LdeCJcwiUL7ikxlBsgRsDAolWSz mDxfMMhxT4B0E0Ye8ZOdiSGXfx.83mgRuA9qWlHhNkiKPhEcLfLHX_CDsJoLREB1pppQhRSWlXSk VO4pjRyR8HvBJMtvd2ufQECpjxzSdrhEmYvR3EZQdoWlB7mMJxCf8AweddHQxB0a.YsNK8re4Y3h oiuLHbI3Bw90ryHHcwVdFfgfEWfGSLYoV5izU0bvzNdZtrkCsGsjpJnApHHM2uxtrA.Y.KtqeGGL QEy0FojxvljIh1D_SbudSYafb.RZpV4xhkX_x.cL6rQXWVKoNbN5BKLg4jGerzotgfn0bvoVshvG 0FRWBeyuabTdSOn8heA8xBI2PR6Gp1Da4.YyiAVgZTafy8pYJYibt0PMwy8mWJ2IicR4nmbRyaF3 0HLzGuaCH6Z_48LnELHxXik5m.f7EG9kX7DZGAVbs1ilUx2E6mJ0KY2NNFaNSJts7JZgwLf8T20I 1pkVxCquhxjnPbY7Qh613YES9n_o0RFvsCw9I52Poz5MjqlkhEGOLTayBjLULAn90WId8cILVswD 5UsLqe28wZSl8BanWQ7wITmcC_a4cgAs3V5CuelVyL6HUHIXXzEf2cSBzDII7jb0PWfzpa3P.IAM YgiSKYzeL2Ug9wMYxKDtbP1sk9.WTV0k_jqOHboq0VgojmeD3S5Oj2wpSEcx7RIYeUFpuB2IRlMr k95VPjG4URrkvjhIbzbZSYspiOT2JIQrWRgSvlGLoqvWB4gHYHd6irM.L2EhFCX0azdM9oao37rg o9rPeo8n27pVCRsmvKUp3XVaRfUhsHUN6mP9gUbpJ7GljvEVcms8p_QdNUbVX6QYZaFyHWcLVDCm MGqi6DgoAQqVdAHLZG3z1HhcXG0PNsjUHZm.xaCSUQld98HsBTSlTE7owJ3MKLGi2ZKYzVuJ.FpJ aDLo.aPWBA4zxYVxJlfg17a2pQnUn7k6dd0QqUmJpOX26pDVh0Wfdu0Ns3mtVHboUoMpZMhuC8bj VcFMcjtI8KUdnpipeirrRPe1GFXHSOxbNEsiWGhWeKa4K7XZ5wGufkTwu.FEQtMD5xX14P8EYJzh BvtXnTgk9kifZ2nSqQ.7voxjzI91XafCx.gt9ZmbqBeSGzPQ6enBTsBdyzpej2PRIZcSfAU2SXEp ZGengo3X1pMcNhlUEeAqFQINGzgJQWmxtsZ2lf_8paq2lVJliZnaBRhY- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:12:40 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID e18ad03131c77865f48d69039ea1a237; Fri, 31 May 2019 23:10:39 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Infrastructure management of the sock security Date: Fri, 31 May 2019 16:09:24 -0700 Message-Id: <20190531231020.628-3-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Reviewed-by: Kees Cook --- 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 f9222a04968d..b353482ea348 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2047,6 +2047,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 Fri May 31 23:09: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: 10970785 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 28A5C13AD for ; Fri, 31 May 2019 23:10:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1581428D91 for ; Fri, 31 May 2019 23:10:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 08DB928D95; Fri, 31 May 2019 23:10:48 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 366C528D91 for ; Fri, 31 May 2019 23:10:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726520AbfEaXKr (ORCPT ); Fri, 31 May 2019 19:10:47 -0400 Received: from sonic317-39.consmr.mail.ne1.yahoo.com ([66.163.184.50]:44812 "EHLO sonic317-39.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXKq (ORCPT ); Fri, 31 May 2019 19:10:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344244; bh=VQcY1jMogEANGokqkFaahvbp5o1kvY60QgKEtZZcIo8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ZHD6XsNnKhOnNjNzTIVtc1ejxFwSYGFO0KvrqjtZ+uHERuZLee5PYT9jMjUvKj1ql0LqKZRVt9RYyU0T56pBvzoYJO6bgDNH4Ik4Zz5TqZAbsO1hCrl5mMZmiqCOjIevQ3v0uTjvgqiDc0PObG/mbUjjrKHWkKiNoyoiBcPWWzbXNxIV23I1nuRT+e6JOfKzH98Dv/oI7s/CpIhpHZxlV7YIHZIm5FTU0Aw6najEicD7E+Y1bJxS++50qn+yc9cdu/3+2YKHB4RpjYADbAFJRnPBb+52vIbsEMOR6N3yNKeZu7w8o0y+A0r3wCqa+342cLrdDVCboMMji7C2OW7EmQ== X-YMail-OSG: ty11TR8VM1k26SPlp9653rlu82f4KcIelFa83q5DhO_1GHJgCgBqqNacAxblrfi KErHUvdmkHSbOamsIFrMux_QBW7Y7HHFE03aOfUb.P6O9O1NbHAE4S8UXJCuGacBb_6yMjlUjN3Q 8BpU8Jvk5MSceJCMzbQ9zyyJ1QSOzdQJjfPEnb2BXHpH.cK4rAa1kHIjBUyj6U_BVMbwyoJDQSbi YXpWnRCWPIS_GfCfr_9CutyDaOz.DJ5agggYgMSvzpxQ_38Hv59f842iqcLiO6R6TuptgZEzvm6C jpxOEtJNwgumHUyFBl_mPVEyGh4YBWyEhmgGOc2bjX3hG.zLR3dRXHt3uO_a8CzF0FDeoyioVXtG OW8xjgsv0lmOMAhhpy5nmVduZN5DiM_OYAPevkBFRV8fNtCXlmqCLid7FQtposWOnmC32rA6Up8p Sysu8S_7jDC9KuVrJ2V4UkRww7Zj6GWGedPeeUM2E3VtQgoZ.ES6Zvw4YIhGQB_4UN1rNPlMI6Sk JI3au6Kft2Ju7K3sbeifBRGn2RWGrwscATl5HnbpzRbdi3O7GnFKRV.6RB5yoTHhg4tB7EomJ1qx BsMEox.mLkIz6SbCAgh0wdcrQlat4DMI9FJ9x3JcBYKDHsgglnhv6e4IWuZEZd_8khGWOC0WpM.H g0uwg3_qpRAdqgdb_lleQaYtgJutzwv4bBeZ6MWDbCTBujoKbfy2QggZWvj3N7XAZUsOE7rH52Ra sx_EoQiVoT8MZB_L5bV1sprCy1rzMsfL3jg_QqMdd1gjjbv7m3Zj2jhpZCRshxUelaui5ZaJ4rYp UyNk.fxqaOKJeWgkyIrXBZb4wx22J6_i5yZlQcQ8x7Y4nieo.dohqfi828UdsU0HxCYRdrYYRDhn EKOO4wP3_fqdnyW8LvqjcAmt8fXIzfOXUFrvzcUKShbNO2unRHMtRvIVK7S300Lb3.ZobCT_9Z2q cscHQ4ZDOYDxEQbOIkcFJUA1TQZRbJmsui9BmfRThRikkI5JUcnU1KLOLtCtA2IO_594Dton8F8R PGhatnpixZncL1_zVf.nY..Q6Kth0xKh6MU5UUeTN_oK.Vz23s3yR5NHMITG8DfxMljVrG6.XB3s erCW8MVSOZmXIYyCv.q9a4uEfkZyRRUISkLo7Dn4PrIHQ0c2aCl5b1LY5.soprDw5LrVeI9.HDoV fYTx21qKSKSsoYZn3o283PSfSi3piPmCecmRLP7uRnbBvFp1hVH86LLuHa7MDGmDVkk78ueHYXY8 y8SVklZUE4nKOUdSTuI.pLcIthHAhm5kSzvHKj_NjKTUtlW9aSjGqVA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:10:44 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID e18ad03131c77865f48d69039ea1a237; Fri, 31 May 2019 23:10:41 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Infrastructure management of the key security blob Date: Fri, 31 May 2019 16:09:25 -0700 Message-Id: <20190531231020.628-4-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Reviewed-by: Kees Cook --- 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 b353482ea348..3fe39abccc8f 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -2050,6 +2050,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 Fri May 31 23:09: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: 10970789 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 4A56B13AD for ; Fri, 31 May 2019 23:11:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36BD828D91 for ; Fri, 31 May 2019 23:11:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 273DA28D95; Fri, 31 May 2019 23:11: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 CC33E28D91 for ; Fri, 31 May 2019 23:11:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726617AbfEaXLK (ORCPT ); Fri, 31 May 2019 19:11:10 -0400 Received: from sonic317-39.consmr.mail.ne1.yahoo.com ([66.163.184.50]:35060 "EHLO sonic317-39.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726559AbfEaXLK (ORCPT ); Fri, 31 May 2019 19:11:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344269; bh=is2u5Y0DRwzBY1W00Se6/XMCwBAVUpvFG8LStFYaqTs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=mrpHv9+PbGUv0MBY66jS014njGItz7RK0fvUnkRCuJOfEBl91kgsG4vZhAkyiFYb8RXAP67KE3GCfS4FrYg/7Ek4r1DlyHzI0mbDVZMP+oDRlMwSba8lZg9f3+QmailOHanVA9AN/2Ej5M4xR4wpcd9dX4Qr4ogUAuWlhOlgy6X5MNmCpC9h8gXULlTNbSt4jnym7WTS8fTkzUdFxIKnaQo66eQJRfyTMfRStcFH6afngDYWzR2e4e6ryHX7RmTCiMsqMRG1CldqdUl5jyfDFi7KWDszKPnUn+1KWUyfY0OAgIz/MppwNbFQ2J02rGfR1txLz4JtheWr2Dj9TNSfRA== X-YMail-OSG: AsJGGhsVM1mJAScsqoZKMMu.BEa4V5DNovtBL0Q9BStOzG6ai_B9kWibN7qSrGu VNgPt9kBtrPyd7BAwxanDimgAhXBVYvxb4wJG8hkGMN47L1EQa6R44BOyGKRN2QMwG5BayVLILu8 R72srpoOvFPT7LM0lzMQTUKXejkWdsMejzHY8iGPB4spq23ON71gElDp7q1bKAsJk2MFNoqInm6m b0occqrhS1nc_dxVkvVL7ofK0XRYnfrkyNI1SwUb3FO_h65yhkT7yiS1FSgUUs3Lb.cT0EP3s8BE DCKd7tsDVkFap7fanqpDrrmcJJ.6kqm7vJnCS9HIRenmw_xlSWmBxKpc9ZFSw9r3_zvg3R7zULlH osma9KR0Dzfa832chP8w0ve3W7aPgrAwThDpgG43H0cSMyOBHDEdbL6kVq9iby1V6arF3WY2LpDr p5.3gLpSEcv9I_FOROvfep2jxtAkhSi9XOYUAYq2qj55WIspwTMCoHpQX0xazNWaGtbzmHeSuDyR .m78vpjH2VNQVMe3pVpi1K66Utut8ef79t9.amvjG.uE0wAznJyH_cykBvPhV16XRx4bVO05x3Fv 1VhN3tX9mRnBUiMBbnjwFoZsOZGwEyJovk3dv23ge4kV5s4Jd6HBvDy3.LvWeutujW_hgOa53flr uW4CirUePrdYnZy_EN8FnhEDL6mA7qMN9gIua2keGwN6Y2T1NmCz3rPbky.edx7f6JKHENTA0VPp yc_TxGfTpeXYvJ20xegbQr4J_j7oOqcIFMLqO4S_Y.Lt24Gl_qek6c7wCysl_HBW8.816wg2B1aF dYXHArGf7W5hft8nKNsAxVxu6fy126broI2TxVqjztHQ9blmyUEnI7NHgMYOZvlp.M2LYnqpiKfD nil4Koq7fwzn1kT3S9kJSf.6TByISFnbxoAboXVSbsvJh..zGRIBTio2gbe0NLrFTUi1Pk3rXJcn oFNvTBgVOT3JSPa5ySqUdOeGjnCk_i4IDJgGaDrgdBtj8k4Mhk6gTn6d2IkpzSiKG49EzaFhCf58 T3ZiKT4p5t7vRmhGCddZl_4JW2EGk6eRBHKuUFbI68.OASRRHiNVEWeGZucaDp8zAMJhengvc0A6 xqOM7M9ZuwLb.frMmtzQDav2J_h91cXlX6IbSCaXIu.Y9UkmvEJhyrkzhaDPJCwlrZFFZMdw850_ B.ZWY6qa_hUyUt98TOtj_TDAEaVFP8G779G3xa19DMiByq5CjMGsSuf8HG6OWikRiSW8iU66lyac pL78CFJTpxs4FRJbUQkT2mw7zqPxUu3RBDaXG3w2MOhwrHq6ADO2t3A-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:09 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp417.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 05c923e95feac0af6c979bf599e1c80d; Fri, 31 May 2019 23:11:07 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Create an lsm_export data structure. Date: Fri, 31 May 2019 16:09:26 -0700 Message-Id: <20190531231020.628-5-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Reviewed-by: Kees Cook --- 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 Fri May 31 23:09: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: 10970793 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 317376C5 for ; Fri, 31 May 2019 23:11:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F05428D91 for ; Fri, 31 May 2019 23:11:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1388A28D95; Fri, 31 May 2019 23:11:12 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 72C9F28D91 for ; Fri, 31 May 2019 23:11:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726559AbfEaXLK (ORCPT ); Fri, 31 May 2019 19:11:10 -0400 Received: from sonic317-39.consmr.mail.ne1.yahoo.com ([66.163.184.50]:35527 "EHLO sonic317-39.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726589AbfEaXLK (ORCPT ); Fri, 31 May 2019 19:11:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344269; bh=ULSoD1nkXTL2vFKNMUIKbyfgweGG6c5B3nCQi8z/MPE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=MxnRULlan8CQMpkKkS3tXEuzno/G3lkoNaGIdABEAMH5I3sF4Qe1Z9vR+oT9AUBWZM69IYzT2YvZdfEKHsHTnCTns309v0BmLHH29j+CthfPToyR2LcHhKnQV/JksREQ1zouqQPr3J2u74PNVuVmDe73CwZ67dhQhNju1scmGrqaFAIsaoObbxHJZm1ZR+gpliwC7J5zC7vW+mOS0rB1gjsU1BCM61IM8XobeGn/geNQchLPSKhM1Jw1cCCmlpweimHsAEHW42m4ayelskavbm/X7XwxPByuO5ZtLUfuEDQrCtB20snD1CE5LM9ZxmakTDKHOrtjPxeCzxlBUyHIrg== X-YMail-OSG: Cz3DC30VM1lsjuPUeP8T6_CCbhBGifOUi35wBT0oK2p.QWtDH4utJWEfSzKzQBc UxCziig4MwSkegImG4eLjrUOkBEOaLeU8W00_3zIS4WoyjjGitQAIjFULJkazfQCxyM29dscEUb2 d8BQvJpomCXsB8gdjTohBOIvVSBBGxSSoGZy7bi09mio5F503amw4zIgUnzPXJbhZhMrj0OTHuNb NGEug1BM4Qm7bypIfEFdJd1ZQTwrWH9unsV_2ZnBZBB.SO0L03h._8VTWsiNLdnvrkOBgtWmS.OS JxlqqRPY0WjgThO5Ce_0oMoGmcdeuSgdJcezDkV7hB3BF3yYYbW3Rab24ceM2D6guU45R8EOh0E8 6NC4SNdw4z15ZM4wyjPdQqnccb7h2OkGqB60mhRGnOQTTwbAEMdwHpJpI4AbGsPd7OEwpWUoUNTP IRdnKDQmzbQdr1hslb3XWbBwIKyrkFjygp9lt0p6YYOVD6yLGZVaxn74nRBYdMLI3qBXPjkEIV6e dG4OVRVyDctWcMC6c9SbYkffAKJNeZvQ.ABtgHsW3_HXZdqK.gz4uOE2bxGRsj5.WYeWAMxycTiz CRaZfNNt6qR0kHTCXlcEcF_O51eEWSwkPzSt8E3t5kCZKrSY9tiKXtVAxxbAADPX_6XJwsBOzKVk QxCB8.Dj_8N1CXxDmYY.zVLjzGjUiSM5Mcl09PLdpgmZjcH.NZGx9CZ_N5UJhHJEVOF9uTuSrOtn 52b.7v5vNKv4ZnAkEqiu_9jPeLSZfkGfL8CDA0149sxqSYhaTNyeUGWWUU20OoqMDc7JFdSui.bg W3Cr20_XWEzJEbfZRD6rvKa7IlYaVXgC4L8.4ans1iuVUUjWWamfZzUgtgTRZ2PXv4BJGe55EZ9O rs9PsJAMFg1LuhBHksuYx_wOAB84MSMx8Wb__9DEJgR8E_t0nZY80vCnHD5Yhj2VpjIjEywALB_p KOQtnBjen5FM7Q7_3TUZb74w8dMMga5wu2SCRwkLrikCPECq2R.hz7idXz52g_sq.CucGQ4kDYbZ AT1U9p9lWR2U3A02HhvWQJqsKP3EjsW0bzGzIB6d_aF9Jq60RLDPIKSMM_3H8CtfP09UQ30_Tput Ud_tAPNP7SVXn7Oe7I3WfuKxIVw9kWX4OJ3b7XKs9vjL5EuBnfnpXp8h8llVm8ybfWXA.eyoJ70p VZMwp_wLYR4gAc0Mc49sXOKdmm19C_Xn8xS4da2GYQ1jLqm_NOOsKOSj61Qe1WRLTfgzR047RqVn XM0cdGg2w9ke2ouTbAUrXPesA9wyLci5pw5YQKsZ4Dj97iDspBUfnZQ-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:09 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp417.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 05c923e95feac0af6c979bf599e1c80d; Fri, 31 May 2019 23:11:07 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the inode_getsecid hooks Date: Fri, 31 May 2019 16:09:27 -0700 Message-Id: <20190531231020.628-6-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 3fe39abccc8f..09573c55e535 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 @@ -1566,7 +1566,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 Fri May 31 23:09: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: 10970801 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 567636C5 for ; Fri, 31 May 2019 23:11:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4656928D91 for ; Fri, 31 May 2019 23:11:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3A89528D94; Fri, 31 May 2019 23:11: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 C901328D91 for ; Fri, 31 May 2019 23:11:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726601AbfEaXL1 (ORCPT ); Fri, 31 May 2019 19:11:27 -0400 Received: from sonic310-31.consmr.mail.ne1.yahoo.com ([66.163.186.212]:45467 "EHLO sonic310-31.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXL1 (ORCPT ); Fri, 31 May 2019 19:11:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344286; bh=dwbKmDfRWBch8TA3RWmr5v6f3rBIx/+49c84tS3OSyo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=VIjX0lo9WPpa2HtM1EwRPh8HrbaDO5kiT7cygD0PeAwUC8mVptYjoGDzbYuCq/EpyIT8adS7/1AoKjL8KyM1Dynt9ZplypPXxHxsp641TYYsyYh7K+u3gx2aEi3CWQPQWZSsp7bW9E1rdepUNwrUJ6NdZMyIGoQuSbKHTgAGyEYHqUkuHQHC/ihGds3jAgDOfZTzswAQLMtOVegiS+SHnpXWl95xsm7PnWI5vN3xVenClpz0C+B9pvmAJJBUslnE5XiYGJEzVDsOIVpQmHrmRUny9BE/vwDBQzfHuoA0g6zbtDaLbmsq/2S9hNw+n/SnAOyJsPJy0cGF7c2G9rXCRg== X-YMail-OSG: Nf.qSi0VM1nsloG9iNdrJdw6H0kk5pR5HzMfMrmtWiBXTeEFusODgKh0.BHl1XW tYLxabsNHLkWmebEOgFajM.asHxQ8vyvmsjnc2AZVTN8NnifE4w7AgnEHiKHWA5W1kq4e0.zyXMH R9owG8QW.m7ZJaSpol5_rlGF9QzsvMpoCwGw8uBVe6i2xyeNLWDBKVyS.wOK_0Lv57zYf.5XfXsn xpS5UJsma_LcZ3emfMagbtkSbkVfwaMtK6m2742MmchlhqbONoBnFkrfY7JkVraSaBiRgHRf12AE QzblS9cQEe8frcB5NjCRaVKCNY1J8iMnDu4MjsbfgBwJcrbw9FBhOMkSjLjPnvVOEV2ciX9JSZCA 0.yKRieIrR6t6VCS8nofME5uy.P3H0jXzzOfruksCjXPM6L.kTW1nqdbID7eD88wLUWtgUsKZHpI 2DuHbqdZAiaqpESj9GCouqVOibQBp_Y770tA_lvayQYyHHaQvWyCpdbomwUpdiw70ifs2IVrDUZw SDmKFt5zrRpjUJH9pGW3MGjFY_EIJxu8AmM7DIJIcAaBkJvYeBkvdAc244cD96LPG_32eUJODD5E C5eC8YpzEWf8DL8V0_5sXQ9dujEXBxFfwy_QUBZcwJ09mLaZZv2MCC9pfFCbjyzRDg4ZO83Xss_N MHdjRPDelwyo8_P6MPx4Z.adC2xe.CO9ed9CIPjbwmINm5IPOnejeK_8h3cUS7H5fEzarFHmyw9b OK3OtazFZDZpoiVxJ2G7Qo4uqfaoLA3h_iEhng20pRIe7WMSpfqsWuUvMm57CX9e327oVepitmZH OoCYx5_TzfRj.YO7RWBgE_OsyL_gHSQKvJCkNVrvBd42MJ.xy3wrrXtCRnQWqsfo5KkJb9hwvohB UbptNOpgshNt6.q1JzZlNPoflELkoLwy7nJ2RjHDSSuHsUfLtleeoTDsjPU5OtJaMbEV0Eoka7pt JSpTj6IBU7MbHrTdqXXU_YKWHS0xQxrICyFBJHPJ7WQzvghZAJXZryxU1_S62INBQVUntnD8q4pU z7Njs8jVYnusDNPeQY2oguZwbdb6NytfuhYq0gMDcqYzu_PMqrGm7vQ6rjRD.5UTD4z6iwKjsZKe cdZj6MeV1FSIf4ZLWalDZF1Z9bFNXAbYyl9WOjBVtx006NY1hlIcaqZP7aJbYamhDgZ8kla.YF7U s7evs4HEE4N_yLqyU9XEV6ycRcwzzz.htgzwte5wfGjVkhMTzIU7q08lqDiXm8p590IDvvMbjV9p Em2gdXnvcDShHb_YInSuI3CcO5aFYbVQ6PnQ_uuVHMQIUtTPZLE1IRg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic310.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp414.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9f21a7219dc461799002936560934de0; Fri, 31 May 2019 23:11:21 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the cred_getsecid hooks Date: Fri, 31 May 2019 16:09:28 -0700 Message-Id: <20190531231020.628-7-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 09573c55e535..0f9d4174bb6e 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). @@ -1596,7 +1597,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 Fri May 31 23:09: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: 10970799 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 CF77418A6 for ; Fri, 31 May 2019 23:11:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C11DD28D91 for ; Fri, 31 May 2019 23:11:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B58EB28D97; Fri, 31 May 2019 23:11: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 38CF828D92 for ; Fri, 31 May 2019 23:11:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726559AbfEaXLY (ORCPT ); Fri, 31 May 2019 19:11:24 -0400 Received: from sonic303-28.consmr.mail.ne1.yahoo.com ([66.163.188.154]:39646 "EHLO sonic303-28.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXLY (ORCPT ); Fri, 31 May 2019 19:11:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344282; bh=cb378cxqvPaulkSS7n2iQ2M2+2lKAprXYeun9wbD1fs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Jj5sNSNNnriGJl9x79+M9JkEk/iM5EOo7+AR3L9QUpK0n7tE1ssaEe5taTowQtlkcgCBUkzzdV5eDicOznF1Zu609gJQzKXbTSGfNmxbVzAuLue7VrLPJ7TjzXPtIPEU5qZnXnsLQpGrvpZ6KBkWGEMocR9lSALAgRdppi0+1f7V13dlrnxhGaFsHqYSbKiA21bscKF2kfKcN1p0Tfik/ZqC7vpRBep3mfp0uN4iRd2fIiKJqFb4sOu66Bg2gEQyQ6CLzBbNgPYLX5tpbVrghDXiI/HefE6RlCs2lV6mq4Xf3t0fbmj/+gQt5z2WyZnFvoeMfA9XfqTTJzPA2CUERQ== X-YMail-OSG: PtWpU0IVM1mc8LCAvXcxPe1kJho60LmJSNzwsOwE7jZi.jTtLCh_3gBKAtbQb0q QKwv28ZwPAc.FVVBg5LpLVLmOVKGA747G3tZ8GP3CaNDtZEo7y2k6QRi16EzfCklod2JpZ8oV8kA U_c1T5q.OfFBOuPaJ19UTUSBtzifqp8pVMIfM5qhyHfwOXiIf8ep6Iud0IFFydxeE5bsrPxu9BZD ulpK9uliwVIKTAi3app7iPkOoLr1eV3RkSTZiiwrVcz71K7k0wVQ80ASgDQU1tb9Mky6cdO6LHXo gd.GOS_tSY4Z71iFZ2LDAkzlgdJmeKuvGlRLzrpl5rM_iAmm.zSm9Guc27IAJLsPRGGdqGvYPh.o 1yaUtsF6t.g6IN62UNAf7U_eUdXfvEmn8WEEC.f0akxFBvnsvdg_gnD2KsRNd4y2d5IphVAjqUb6 5dD6UN1hUeJr5mRSooDzeWRGHwdVzvJJzwtalqYloIuvlEt8Sq5dq8TuAHLPhYUc2kLNgsAUahEB eytU3F0AKweHVxttT2mI.Hzvkr4MYAvruEWtAD7aAhGjFW1ROzoDCovsbGAubjA3fQ0ZCe1J1mQv ERxpXaQgofs1bxG9BiXs.pYlkhJ_nxtOnkgNJDHD826IavXjFfk.6gaGhTVwWSQONmlg7T4_oBRT VQE_OhiTxM7j4Nin0WSsfaT.wVawBZEHEpI_tUOTtxuOHE52JEK22vuCnAE2M8Lhhipk7qFOr_2L JsVr1bDlAa1zpQcUF0NpAvDnPjOU9.pURGXxXbQV2JFH2Zd2CeimFMoNleO_Zd0teFwNYDmGvjuG 0_fx4m6OiGKZzsldMA3a8bZDMzwl1ieF0nZ.YjjO3oq9Nf9RjToH.2iN9QQP694ekJXFpQcmYavm Dy2LD7u_gysNlB7iV5.IlNwAKroyegDmMle5liW13lkF2GjeXLNT6Gm0w6c_YYcXvlVB0sGk7cFw yUQolAXUp2lvcVDr.slgQCfiZwWJEnJESrKzL846lxoPlrHn7O3a6pQM1O3aOzQ0UJbW27MwReVp lHAiw0p9aRP1YEzM9LDhxmBDMliyaG807..Z35yGxvLk38LOr_pPp0ccckjfynJCu.hzSEpdYL0N knFSRi7e9AulYEa.92OYnwaWB7ujCDnIjV2FOacXqIo0YMwA8Q6jZUh_wDoarK2mdp7vu2ewLG04 CLqHN29_yevLMD0_6VDA0GoKd1EE90MtzfZ0NgBvWCzyTS2Kvzgh8jeOQVqJVJS4mRKS9CXOTuLk RmAcIykb9H1myJCeNbAdZegYIVH.ToJc.eruseRLgIrCjRJHt1rTlkw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:22 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp414.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9f21a7219dc461799002936560934de0; Fri, 31 May 2019 23:11:22 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the ipc_getsecid and task_getsecid hooks Date: Fri, 31 May 2019 16:09:29 -0700 Message-Id: <20190531231020.628-8-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 0f9d4174bb6e..62783a923136 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: @@ -1094,7 +1094,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 @@ -1610,7 +1610,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); @@ -1628,7 +1628,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 Fri May 31 23:09: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: 10970805 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 32F6413AD for ; Fri, 31 May 2019 23:11:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 238C228D91 for ; Fri, 31 May 2019 23:11:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1812E28D95; Fri, 31 May 2019 23:11:39 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 95ED628D91 for ; Fri, 31 May 2019 23:11:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726601AbfEaXLi (ORCPT ); Fri, 31 May 2019 19:11:38 -0400 Received: from sonic310-31.consmr.mail.ne1.yahoo.com ([66.163.186.212]:37827 "EHLO sonic310-31.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726483AbfEaXLi (ORCPT ); Fri, 31 May 2019 19:11:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344296; bh=vW0GJVqmcxCQIdr1rEmD04j1RR8RMpPnwmmtYdzFYRA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=jqY9LxRsUfZ6PQIjotKN8hy5YZj/N47e7EVzuJlHuWJX4Wtuvb6slXUjPiCB03BudlHNZNx808p2T6ry7rsP6PkDupPCqCTwxsY8/n//hJMVT+zWBPMJ8bwbSH6jCYk1+iq6Z5v9EaQebqMIN8v+rQfWfyVJkSvUQD1gM461sEmY5iafvl0Ckn04IBCkQcyFBKCmXznxVhNZohuz18wx+C9Td2jJtCrj/fW4ttMiPmNHd9oYdeAAqMRR7pXNeK9Qk7JeWHFEwpucx/uXjAnBGzwf580G4bvvgkZ26OrEcFYV930nfF1yHTY5Ie1GuJUqzdtF4FuVeRsvrReTd+zHDA== X-YMail-OSG: 25CpyDUVM1nOmObmTgjLv8EElB9Z0hkn0ObdS_JXE0ZgQ6zAlu8DzR3qbRRsT0c FOmNEXD5aDYyFfGl43Xky_VSF9iRq7yYVbIoNH9ke_rj42S9GnGhjYx2acrlkbwRJ1d8prIj4Q1p TxKlSCP3izcGX6CiUQtDLRZZm1XvhZ9LT4_tIdfpP7.AQ7LGhnMIj7tyUG50Om6WOmJb_pbQQkIk sH6PxvuSQRwgBAvjZ5OT5HPg6nT5qmlh8x.tcKXCSih.naRbHZ6JLGJ_QYHdZWmp5IKm.yyvLTtv 7VDy3Z5CzYrQrg62LGLy8W_vCg_WYtk2X3oArU56gzux0amorrP3cxQeCE1ceZCNPvPM5cYmd2qF 4gGXgbOyAKT9qa8BM4pUeou2KdDYGxgTW5K6jWOBEnvrwvH0RitjadFYd6OzQMTckTfYh4vPDzHE k2Nsgw_.YdOQfUYe7FXHCQwzwMkEiyjWmy6pKYwC9r_f9Zq24FqWdKJw.eWUqa6COH8liHc91p4H p4kgdJBcXBLL_5G6odcdiJ5BgHxZ3idnCfzemde30sehImvhoX.uifDWUBO.eN8Zp9a8QI9gCMtq Gx4OeMrdFNbkzPoY7TWSQPGbO1r9PwLLHJaTTZJIFqPudlE_sNew80RwHFbMkE93xe7eQjluQbot mzdLeW6ZUAGMTO5wzybGH0ATaCtfoOq45DRPgdx1DvDKAKpNN_mJAx7ptgEOOQwKmMfzSWKGR7v. oWc2eO7.BdMW516hbLmYXUa7o4ZWTIgftSE8GO5ETGw9JhgtS4xI5_IAfTpKdjA_se70Gs8BuPGx S4eb0sZg2Bb9XsPWkdY09J77lGkPSg9vC6jUFANXrSuJYMFVI4TvCWSiLsWEjq1t5uAahJknVEob .SR.gPFvVuQHeox32JRrX44v0TpNXuHf.qia326eG6DEdqTyx5xvP0yFr.lP6OOuHQ6pGkS1c84q UOnyq0z8NJqEVBNRsRtoQZHXbEDErbdleaqiWzROY0gzYI.hAF6AJKN.hcbN2GLZSMrr_37a2ku9 Kv2wKFDimnE9h6kcRWJG7ViPMv3zPCyoFFtefCd32nZNfe0GpHvsY4IgyWrS_ro416EoQBeJ3Svw c.Ix9.FUQ16zV9YFmkd3MF7HLtPgyKPxAs.zo1_ksO9bTfzO8I02jVAxCo_bFmD7P2KOB9xz.kDn LV6LyLtdJFKv8m.inza.cq_bvp6LnXwu63dLK_ZX7LIQu7KVS9TclEUSNHKu8bgHaylbfkXD.5Al zd0F68g8SJsyVCxe1sokMYPCWvhWH6KNRuC0NJx75jq7PFNtHAGq1q54wNg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic310.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:36 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp415.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 3476acdfa7cd8f6c2fbf806b530ae11f; Fri, 31 May 2019 23:11:36 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the kernel_ask_as hooks Date: Fri, 31 May 2019 16:09:30 -0700 Message-Id: <20190531231020.628-9-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 62783a923136..800040050032 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: @@ -1598,7 +1598,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..b88a51b6ca41 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..3b77a0324c3d 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 Fri May 31 23:09: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: 10970811 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 8F8C118A6 for ; Fri, 31 May 2019 23:11:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 80EE128D91 for ; Fri, 31 May 2019 23:11:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 75B3A28D97; Fri, 31 May 2019 23:11:40 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 1063128D92 for ; Fri, 31 May 2019 23:11:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726617AbfEaXLj (ORCPT ); Fri, 31 May 2019 19:11:39 -0400 Received: from sonic303-28.consmr.mail.ne1.yahoo.com ([66.163.188.154]:46514 "EHLO sonic303-28.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726559AbfEaXLj (ORCPT ); Fri, 31 May 2019 19:11:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344297; bh=7nhZ/zEyM+j0a1Luk+r19dVtPBLiOzXmF2b9tX24TkE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=lE25/+ESflbyPs7v1QW+gumzf5/Pbdw84PrERPtg77LCycnaWpUrg5xbZ6s2EqEb9XXISki7MMiYtfSSU58Z01t60dntjDH6XqullAhHqtq8vHqlDCsgVDTlmP9KUZ3kvCXgswGxrgdxjMeQm6tVAtiYOl0MgyL3fhCu6M66WkrlIk1urwckOg++4Lv2sgXy9aKUgQ3jI9J1VAQvp1ZjXTIR9TgQ2tdIoq6aoorOvGd6i874It97ZGcRE3Nny1r0Iyu6G6/qLVd4DpznmmNfQjqBCyESiiRKq524HXjSP5ACW/ULnjDvdDBbEgvH+zK0zEHfDsanTt6+4PA6TTcu8Q== X-YMail-OSG: EcN_cIYVM1nZts.dV2QMHMSIDBeLcLrpDFn9XDq3NJDfws8yn4.O9IdEfWOQBWS EoUJ_bKyxW1IZ8.V_5xeuqNkQ9NGnEtNjb0KgoVWSbigSh426AvpPck1o9QLtjzxlFayt3Pxt3XA tfDgg8t9Y.tmZo8Kc_dvi2KasJg0cciL5UwuY6VrLdRtfqcUlKotsUg7Dzc7IGSCkt4zaRBjaPEl 810u5iRaLMizdAf1xrgrTSBEYD0ru_Vdt48lEStgkqMumWNb3zqU1pKEt3wgtTO33IlKSg..zZnE fOb7HYz32BTsUHXgrjZd0SXk_C4S4PavgOiggPnFBpQNqa8BrTKnG0yzORbKyze_1KJ6l8rEOCRi e_FL7AcMIiYOJkBlNIJNDfqhYtbbFT1VkAL8C89XZD_CSjYWE3mgJUm_efNgHijTa_0e8F2ufdLO MIrPs7j2zGHpHtyj0VZR_uLvEz10oitd2mTkJEJQF67UbrJNiFhlHCGlbpi9p6s_zAzzZ.dKF5zy MIC6521c37RWLQ3uPUefEYCEkz7lr9QoqVKajLhSa5_yEwoLCwf0KKD74EN_80Fpuc_iHx5AqR29 QZbs5MO8OeWry3wjYuVNY7P72uOFRmsGiXwLs8cezrBl9LXw2pklPn5o2g_05gxDHzeidnGY_76I GIIOXR73oA_LfnV_rT.336AcS7GaXWNS38UasiznExLnHhObfFQD623feJ06rIakgjUkBmCgwrHZ E.6_LqdCdLEOdjsFy4Zd5wBlbEXO3eY2EmC.tMTHF0eH0k4C2uL1Ygf0mEO89QiMQKwsXXF1SuqV 8iDhvGuBubzyzz6JXRyD1c6HMOH8wSdlgsTOV6FLEbGmFITA1BxF6gtfyTYdGabs6SXaNf_P7gfy aZp1EnthZh52ogJ5Dy3LHXuo8sL8YClPGK8Oll45yuo.6WYq4.Xeq0B1oTMXhJH.GuEGEElH10p4 h_6TlJ_OQZnMuNW35JH_i26PaDBT1yu3h34p7JCLXY2WC5jWspsaK4eK9kkrTle0HSMWP09frrpu DceCAbDOVlqNxBR43.DzQbcG4CBy5cdxNzAofDN4SkqXe7hUt0mhqyZ7m3u0fOGpxiMJL5DB.cER .ovI7LPu0aNdW7vVqhfjPu4.YL4LziQ._0Qi1BOiGLsbvGc2QceviNctgb8dKS285VYxy6AmEmga YOyGDaKictOGL13FEj8XWVFK56kegO.yPqcxDGk6yI9SJO2gJXh1HANLfp.zyuN.vSGw48ylKl34 nQg8XtgC2SxdSZzaBKe3MS3WtTchYklVXNffsyLzQxe7fQKWr99HTtA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:37 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp415.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 3476acdfa7cd8f6c2fbf806b530ae11f; Fri, 31 May 2019 23:11:37 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the getpeersec_dgram hooks Date: Fri, 31 May 2019 16:09:31 -0700 Message-Id: <20190531231020.628-10-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 | 5 +++-- security/apparmor/lsm.c | 3 ++- security/security.c | 13 ++++++++++--- security/selinux/hooks.c | 6 ++++-- security/smack/smack_lsm.c | 5 +++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 800040050032..bcc628cffe6a 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -881,7 +881,7 @@ * ancillary message type. * @sock contains the peer socket. May be NULL. * @skb is the sk_buff for the packet being queried. May be NULL. - * @secid pointer to store the secid of the packet. + * @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, @@ -1702,7 +1702,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 b88a51b6ca41..9db12f6b1221 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 3b77a0324c3d..3e3724bbd6ea 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 Fri May 31 23:09: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: 10970813 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 D6BDB6C5 for ; Fri, 31 May 2019 23:11:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C42AD28D91 for ; Fri, 31 May 2019 23:11:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B677128D95; Fri, 31 May 2019 23:11:55 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 E640E28D91 for ; Fri, 31 May 2019 23:11:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726593AbfEaXLy (ORCPT ); Fri, 31 May 2019 19:11:54 -0400 Received: from sonic310-31.consmr.mail.ne1.yahoo.com ([66.163.186.212]:40168 "EHLO sonic310-31.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726535AbfEaXLy (ORCPT ); Fri, 31 May 2019 19:11:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344311; bh=ZCT9uElDRTx+ICdatyCuPDJ03LmAmILNxQZ9h703pNY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=JOPES5/c1QlBL0nCYFzoTRMINS4UvJ5EjFVjJ1BOq+YbKkayziZAGAWEpR4CCbQW4Sycgr3zz4QCT9v0mPX/vL85HeWaCOOa+dD/66V3q9+LdZ6BUs6oCEs0mRsy1Zux9ScDHPcYtr2uTg90gc8SxO+bve3nZkkpaGT3hnsqUBF0aeiF/XTh/+izrxU8CcCahoh7BWRvkpRp7feZtvpnhXje4b7Pe0LTx6W6x0c32Bh+w49U2rgk9e6oHIvaghi5YXLowivzEf7yZkAtLoVtPFiYWTCcEM0H4rUom5Ki6n+KTjYoaqRqa0FoRa5TMG1dbELM3vuLdbRL+AdLtg4mng== X-YMail-OSG: kezj4aIVM1n4.FuLZT5AWGpATIrnYsSSjElA5qKk8YFUfSO3B0At2_o1QZgVgTX feQ12f_M8BbubzoXT4iVv6tRBHg.cprLm.R86Xn_4C5zldGByvyNwkp4Z8uxzcwUPOgt9ga70Adh 9zNuCVb.jSyaQNDlyq5WFPb7SumIkiSMQJD1IodPx5U_QPjyV9Vtrx3hbMGihirfYq8teU3uxHbb bgwbdAekxVQ0cGbRYKHHU6rWzMr3lKkV.s2BMlVsvqJFcmILU9oA4hjCHesEJWZa1cLQ5_9f_CE3 Gyh6d1ucACIRnRsI_wC8GtX_id7Jv7bPHQpd5J7B_NE.gdvzm3_aClRdfaXVkg1zSJCaKwMDRKrS hnlpBzo0FgMZCZDjaGAK05ttppZ4bZujSfCgqOYPI6rE.FQnJufx8qYJepYK0.k1nf_8kVVXYcf1 X7Qnyq_z.BXtNqH0PAVtZeHL2zsSCywZGpjDYBy38sjkLWklQpsmxlE3RsFcHE91l.bI0uhfwD3a blbYEgnFRpwZQQ4q9T43bERXizaoGlLzshlVgXDA6g_rXh1ThKIStWOy_eTTMLuzT63UwUj_kA6W iSNKgkEAAHcleTRJvw3.rrk76DXaN4puhkOEntoJynUitCP1IgA8I8mELDFca8L02ws3LQ2ecdo_ lRWwueCHt1w33vLeskYiPmLpKtCQtB6gPzb1xZsM3UPo49i8esGhVyA2W96ENl2q.g5thELvS3TD gL7GcDSWi_By8ToIKv8USuM7A4H2miclrashFs_sBwqFtiu2AjGpddZxw79GjMt_ekMu1bsoJFn7 co2PRIs_aImJFuD3zPXDAecxxXiNAEU8W.iDiZ1wwOhwZUcmZUWDU1wx.zJ8mls0PKXsbneBQlaF UleVzXMiccTkHCM96EirOKCEQEeZHoF57y0vrBlc1mfOnW0ePU7OutVO_rpVMptylmlU985FEtz5 Kwj7GclAGda1U40YZADSOj5Y.f2aWFPcuLCliyRMnSER9_nUHa5W6LB6EE5uzMeG0I0paU4OE8SX F99Q17pwpxm7ObY5DdbI9Ms1kiy3WK_sLDMm.3CyLsELDZs7RZjYUo.Fe3fmTEVGTtuErBH6LqGQ V_e6STTTVAHbcNuCZRvDQpxD8aHoO9hNOVeDQfXYJaFrEb8GF5ztburNao_A7xVq186IAY1NNp16 4PTVLtkaS78KUlbfc_r4bJci_2mTNc_Yo27W5rEpdQ3RkwTl.RcZHrEjarXmrdIwzOgEXk2TZoVn cKh2fTmXRZMnb4SzdwULR7mUgXmcdE0dF1pBHrgmfVUnOr512e2ShbsxMVg-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic310.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:51 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp422.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ab3fd190e6a3abf4e978ef414dbc5f7b; Fri, 31 May 2019 23:11:50 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the audit_rule_match hooks Date: Fri, 31 May 2019 16:09:32 -0700 Message-Id: <20190531231020.628-11-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 bcc628cffe6a..01296e4ce474 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1354,7 +1354,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. * @lrule points to the audit rule that will be checked against. @@ -1778,7 +1778,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 9db12f6b1221..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..59a3b1cd5ba9 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 3e3724bbd6ea..a3776501965d 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 Fri May 31 23:09: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: 10970817 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 C51DB13AD for ; Fri, 31 May 2019 23:11:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B470228D91 for ; Fri, 31 May 2019 23:11:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A847128D95; Fri, 31 May 2019 23:11:56 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 1098C28D91 for ; Fri, 31 May 2019 23:11:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726538AbfEaXLz (ORCPT ); Fri, 31 May 2019 19:11:55 -0400 Received: from sonic317-39.consmr.mail.ne1.yahoo.com ([66.163.184.50]:45125 "EHLO sonic317-39.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726555AbfEaXLz (ORCPT ); Fri, 31 May 2019 19:11:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344314; bh=e+8uXyTo2CH/SxRFMxOILZ2iZwykcjjY1wTO6Nmz4rg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=mVcMplc/EbFca0JaIVupLF/wKkLZif+Z4kQlt+wvIM69SCFwOQpM0Q/LgiVY7HrddsZIs58QXsUiEfZ5JWTfgvcrr6JlhaSLKTLqLeqspp1eFPQv3uqth7vZQ5hEmY8hHjbBrlo7NrMBN333X8P4xk9XuRKjGqvKTOtwtrqwRV0FGa0+BeiBJVLjcuCdSJ3q/G//RJiyFXbJWQiNRBG/T00S0J0A+YLzdaA+s26Bbug/P00GVYCrhw08n+psdtGqOI3Q7JtsT3PfUOhkNb+HdeFNr4O3lacMNKn9BX/PqJ4D7mtE48LORtACEL2Ox/e/Wu+GxBTBBKLKaUSen0PPlg== X-YMail-OSG: 1deOM60VM1meOdd0F3fiGsXzpK61pn4dhLxQFouyTc4lvsjmlLpVhIbNEgM5Np6 hvUMw5PeXSOtptM9wI1sxmGGCRszDQAmi7JY5E_TyLb.1WHy89H6hthkdexirxjX6eo9cX.yBBix TAbt10SE4Bw5EgkFYCgd2yimo_QQI9BzuvGiMWCkGNuGXwV4nzzMUuOuLBWExq2.dvzdf5kfgWQK zSzPu0daTVNiq.5LcUQx.iDJEZDuSLQqqZJJ1akoCgtaMZ4d0Kvik4kp1i1QdHAdttpRpbTBliBg Md7JjQd1ogHs0Pyoy5nUTWBTyMEaI2kBxqQj0H8kvKSKgPWn198vR7ozWggPuETBpN_7EZCFlkpo zGqXuwd1Csr_3F.pXrpvx4A1QAVEyvf6elyW9EJ8dKi3rL74jNz9bRnknNorXHPIKR56mH1gF.5V Yc4jMFBnkkXgJQmP2H1oAgOn.kzPz_TPqXxjMhIfoxSizEaZ3CG9_eYxROwNJ3LkRBZspCzW6pJQ t12CZ5UR3H3tHHv4FFCCaOCxHlE3Q5_Qk_UB9atja82TRXaaisjLk9FUc8.UBO8HGnAejzDP3E2W sMBQwPTMHbsGzgwuKLYS78rGSXW70g0EKDJkqU2IdVTLzkycxd5hPgH5EXldSFI7CiuXTEzKkV2K B0anVGyOq3_J0AV81iWeD6OQtQJ_CMPdXhCmyE0pe0h22Gz7GZzsNcXC247hKTSGZgjWTEnySVBb 1wxxxj1wb6aByF0npWD.NvjaXXjKOc0InDESewWLryXHCdYXFbgll5Pxh96O_ZRKtKUGKW5FHG9W QL1UVEEbMz7AS4PJcWkybDqRt0kMkj5WdzsTsUIFvfPSPRIc_Xey8hxWOMDjOJzN4G6WHWpuiPo2 pK.hpC.uzte89dn0YsN.g_uUBY90S0_JSTyA_aIaPxlTrPTpEvXUodICmeG9.PBaT.F1J4RzpD_s T8_kmlpAF2fTN7P0v0AMjXCD6yHS8077r9uUI6J9UNanY_ApHAIaMZ.SkKHzDz7h44lAyv1ppveB lsBs4NUz0KaMv17ery9ei4TgVIkyURU3PzjyIGcgI0NmtdyZXg4EJlUKVOZB0VZD_wV_F3j8OmxZ VJZG2USTZ7YNExtuCVWFcWV34ApMFVjiSoCG5HRD7QCeyck6YJ2cms61u8BTxxjIVjN8D9XSWcgm uf401htprgMc8amcnJBVfip3APP4M84mul5ltX8ZuM9ZQdINTzBxkjvC8.oAG9ysKa7f90BHsw.k yDs7fpcC0YjQMcKuveEyK6c6opxPtuRPdjfu16rt4gm2ohg8Gr24GTYW1fho- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:11:54 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp422.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ab3fd190e6a3abf4e978ef414dbc5f7b; Fri, 31 May 2019 23:11:51 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the secid_to_secctx hooks Date: Fri, 31 May 2019 16:09:33 -0700 Message-Id: <20190531231020.628-12-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 01296e4ce474..433d98dcb928 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1319,7 +1319,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 @@ -1664,7 +1664,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 Fri May 31 23:09: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: 10970825 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 73EE913AD for ; Fri, 31 May 2019 23:12:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6441928D91 for ; Fri, 31 May 2019 23:12:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5862528D95; Fri, 31 May 2019 23:12:12 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 D0E4328D91 for ; Fri, 31 May 2019 23:12:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726450AbfEaXML (ORCPT ); Fri, 31 May 2019 19:12:11 -0400 Received: from sonic317-39.consmr.mail.ne1.yahoo.com ([66.163.184.50]:36897 "EHLO sonic317-39.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726541AbfEaXMK (ORCPT ); Fri, 31 May 2019 19:12:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344329; bh=xCs5ko0ljATg/F1vIduV+zjbu+Bg+Z+duHwS3Dwapdk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=htZMY2bFVvilnMdblYjLwpd/KdI0rccUHWRfaPmOyn9YIWsk7f5nZzfy83NJO2n15loRdX7rhEaHgvObDQN0MyTMi5GlokCpQVCmJJHHmHjH5CUjGQXz1Mt7XrmaX/9aBG4VDeFrA0qxVx1nwaIS917nkxyuFY2uuG7az4laikOf99PskFWbKlqp1FPm6MDWtAzCL/hhRGOBzJlwPtfCRrwyWso5/h3/3hvzXpux/s5RzAYJNr0f9Aa6aFRrZq+2dB1xw7z4a2meB2wMZakXlhLCW5ggMt++vn8Afjn88OFxqDNzjkABQ5m0QqcOYkwUwjekaCamS60Jro0tgVcgSg== X-YMail-OSG: _rWEuk4VM1kdH2smothzW_TzU9zmR1t0.8dYS71KHkWhPCURUD2gTiM2VVe67Q2 SV4WcfeYCLE2L.bhW4Yfnl93qoaX2l1PUdvSkpz4Nlwb99wQwY3mUhIuCqQ1TNZ0oW_0blIwmBeM WzWu_h_tG1EOwUAlj9OFpFj03A.9Zb3W9oosbeSlWYni4eGUONqGlCmZ_RhvvtPlLt9iDJAvGhIn v15cWS9iUSFYiCIBzbOp3R7dZS7Ty8xBzwpixUZy9dM1ax21xD8sgXyzE2Ldd8P.Sav7DqlUyBjW yVQwAcO8Lw524LJF1GC0jVQsogfWZ.hqi_3CRj2un4C2bnQOZSwAMGm5ldyTTlE7OuxnZD4bYacI 7QP_TV4Bws9iouAq2bHrdW0CqcCyE3.oJr7LJ301jCFVIXVDg_jLXqC2w.8UC6cBx96SIoXq4oro KUPjEd90lY5gz5trcblXXvtoXZX8cEx0Z6JADzV2d_q3iQclzGz7OBP6PXOB472fhBtTV1VKx3Bj ileOtDp9m7JNjkCFivd0E0XlFYAkkE.94hrbk.aqsfxosMSQcWPkLZKoQzmxryT78XG13ra5Gfuw TXKw7e9O2HesfdD5Ax4dw4pEbOGzQqxsUKc1Fui3Vb3T9j8iESJsvmSBsOnBX87WJ9TBp4DHTM87 f.kfjsK5Ep.Efq6WzId.Ifraka1AaMqOquXIe26fcQQbqhsCEbpwlNAt1EpwGsA6d7rtKd.EaIWu 4mL64JsPDpiFr6NMD3VuD2kQU13SDo061kUfvZ4Sqpn_RtqfO1A_wzMOWLxQ2BtudfCFTrP3OMsJ .i2Fil9Q_lER1JRqCyzZQum4LhLxTX56laSO0XmHVYNl8BJIO15KmguMy1TgOGB3NziM6os1WZIb e1qFr1VFQHdRQkcYc2OXtOl4wj7oqQzTwDj.v5pGz.CfRFQXBT0imH_usH9h3eX6GcmSsMI8Flw7 IuRSTdKt_g_bic5LY7Xv0NKqSuo.9gVCycf0WhBIY.06kJkpovZmovwUgA.OYrT.Vth_38KjgfEy xu26UxLIU.cJld7G9wDP9wPj3RAyRwalWG9UYGQXq186QoQp9hSdr679QbwcrgU6muTJThcGBjMT OeTp13DHmtbR1Wk83aN6SrpXJDMXa8GzEYIsysj68fNJUcoRuAO9d02FCcjZ1ByDGHuMD_V0s7NB 1.VDVoK0HpFve.kQAWDUZ2Tv4Y7j1TabTTqr5dt5fjfj4r7DtvucTlX5NaHKn_pKCFIVyZBEUqJg K.2ydqR25EogYVXz9MZbD0dVXQh060TSqsxrzrRFqwbVplx744rqHTOBncIk- Received: from sonic.gate.mail.ne1.yahoo.com by sonic317.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:12:09 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp420.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ee29c54a0a05db0473b369e84cf14b31; Fri, 31 May 2019 23:12:05 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in the secctx_to_secid hooks Date: Fri, 31 May 2019 16:09:34 -0700 Message-Id: <20190531231020.628-13-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 433d98dcb928..0837c214cc17 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1324,8 +1324,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: @@ -1666,7 +1666,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 Fri May 31 23:09: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: 10970821 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 2750A6C5 for ; Fri, 31 May 2019 23:12:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 119E328D91 for ; Fri, 31 May 2019 23:12:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0513D28D95; Fri, 31 May 2019 23:12: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 4F4A928D91 for ; Fri, 31 May 2019 23:12:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726593AbfEaXMK (ORCPT ); Fri, 31 May 2019 19:12:10 -0400 Received: from sonic303-28.consmr.mail.ne1.yahoo.com ([66.163.188.154]:35289 "EHLO sonic303-28.consmr.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXMJ (ORCPT ); Fri, 31 May 2019 19:12:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344327; bh=kBs6xavdKLksOJrpeyZAKYy1l7B4qvl4+o1ibk1YtLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ngO7NtMaGi22BsV+sUIXlGlbbduRHHpjzW1maAeFwB14K2k690vwbZdeJ92q/ucsPL4b3PdmxVJpwJoSai1iKLYa7J7UqiN4AAbEaaWiKiro0OLV0IfmxR5CN/QO7wviEHYOp2SfIqbDhZUIfslLIkW/IwRtBJFECRaL3TmivoAUsBM3hfr7KBQ0EX8ixYGdyFmyJqLsd3g5byFYvGzNLXQAO8RplV3h8nfM6QyxNjTfSKusbT4LKEGMmM6bWh9MxTjPVJlS1pWYqyZUD+IQVC/JBS0HM/V376qt30FK18tbh5kstGsh3AAMKr/DJv6iCCHJ2KMmv3Z4bIBv5FLcDg== X-YMail-OSG: aG1brDwVM1kYLjJi_Nsmu4tNZpuAGG3b.v9._jnMioK34q2YcLk1OrK611ItNmr xUeEgXLKwjLPnzu6MspCAls0Q5sgz1apY864f4jwX17NR1apqfinqfepBesAt8B1g11JbGwM2ElX D9kJgnbe.4HZJz8CE5I4vkJSrjrtZhnuVlXmNLKpAdVvuIJ_3zGYtgQfq1Ec1AVsBiNF7uMo4aFa SsIOQ2RKv_H.2GR3bNfH9QjLa9gcaWtY9J9SgayrI1Vwap7gMJJ7pgwzZo04EP8tWkVdz9MAXl0Y MPl76syyCNKYTZWadSeTPcpOjy6EIRLnNxcjD_TerIzur97TNaKIsf8VQywDuQmORoiUpGgTLnDK yWtbGouDta7yhYZy6fZHcWVL1BB2Zxe2fQ6JxJv1.eX_89Qijn4rp5.FpmlZhoHza5cyxnXtt6Gm .BXPBJohO_wrpiaeTMBv4QeZki.MJDZHpEqmcw8SLe205mJfQSS0qZ0JQzlGplY5nlHeZ8EwDxL4 Oyq.gdK_fztuswVBpeqO45hA09Vv7tIG1iEoBQAS5X7ZS7uiVIxCx3c1o9bWTAJux_L4VgdAYtyw 4.oO6qWayDDhXOvapUxqRyOTZ7F4gT_EOy0hGbAwujEI7zHgS6WoLv8JMYRX0Y.XVrK2QyRED5Cv nWFn5yCHf4pjQ.0VlzKwdORHBWSWM49.5pOA5qGozkiLXQxzMPgk4qavJJqOP8pqPejHxWuedoJX 3dUsOY4jI84x7D5lKKheIJKd2mavlPh0RNEcWkAl3IMREsTgbX_jA3RgapCE4jkF2ZwA4rnCSyo3 o2Mkmp.BzEEeXS_aE8VTXOUa3YfGFn9etGihZb.lqpWmfkaoyLSISJht0zrN5OhyaWQuRZY6pK02 vwxykC49q.RBUxi.piat6ljm3kTlaOGcfiNolJSlbwO3oxqPwoTsk8mmEhyKXCE1qxNEjgprvANT 42ZrbAGBgdrkW93cR87U3gAzBKQTM7XyG_OTUaA.35fP6n4lxPlwgD39ZMGlcX0lncLuSDXxwacL 4feDiDubHMXCNKre8Aj.0WrQOgz9BIusBXuGW3Xpj6TEVrAEgQ1U6v753rXMpkzuz3dcc__6mHjL b_VOCQHt1d0th03rbe5GSjOCUwi6OHIQ7o8AS2pCYFrqAxRpM7pe9ajq1bA5B.hxi.NrD4UgbY5e luejUhO84VCBPrGmvVFsUcJZYwfbIdQwMDOG4YmHo.2dbFIqw1qlhnmTNMgQxTYVd0qTGPP3.501 lRmqKgM3onHEu.Hx.UyAeCXuS2fVx0fH8Uy8vYpuWkUiY3Owf5KxfAA__V44- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Fri, 31 May 2019 23:12:07 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp420.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ee29c54a0a05db0473b369e84cf14b31; Fri, 31 May 2019 23:12:05 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_audit_rule_match Date: Fri, 31 May 2019 16:09:35 -0700 Message-Id: <20190531231020.628-14-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970829 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 8293A6C5 for ; Fri, 31 May 2019 23:12:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 71AEF28D91 for ; Fri, 31 May 2019 23:12:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 65DC228D95; Fri, 31 May 2019 23:12: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 E413628D91 for ; Fri, 31 May 2019 23:12:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726538AbfEaXM0 (ORCPT ); Fri, 31 May 2019 19:12:26 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:32803 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726541AbfEaXM0 (ORCPT ); Fri, 31 May 2019 19:12:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344344; bh=kPEVpSTXbzStzk2RRdBr0uzp0UqHYw8ZEJtQ2z8HYS0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=BtRCULC7uJYz0APOGHqBysF5btLpgQbImrGj3Oo33FCuHUhEIa/DKNV7sTITkM68uu7eqFpyRs02xZsXrxX1iwjOGQDv/G2nz9EVPkWry9ot0at1Nf1E1X3yAXtgPmHj8dHxJsCMkvvlzMAJEQOcCAdhBtowE09PqZtWDxW/lNgTuqkWv5aeukHO8J/WnlAIW+i7rjxoMOLjZ+3p05A3ED13TfIsy/bEnSmcklrmVis2ZF+nLb70Vad0pQ3FNkV8Bs1AMaAvobVRbmx+EdZffUdIPHb565qoiIzFqFdzAwCl4iP0AKDogMiO5BaSR7qciDezzawmHY707S2Oe1Xg2A== X-YMail-OSG: Fd4AGe0VM1nCYKGy7lVyAGi0JI.xoOQ22UpixIWy01pj7ii6bEI23Qhrn8QWfuw 0U_PpxkN0Jn1BaTPviKDhRgTmtPH.A6Ls1NTk25T_x.qyd8vdTrWCpGGbif.57S96odD2mbCz9fe SFA9Tm0_a1LQ8WAA7EsuiR2fVo4FEJKfk6wNzcdxcgiSYuzcFc_7HGequGvlnwOZeORcyOHvmTyQ pVvwjY2mzOGruRekJgKcs_.fH_3ojqGEQZGLqhtyCgKpxV6Wg3fDvCgHhPxBgw7DiDfx4mwiCcae AqyCYuB_5Vg_IB7Yw2pgMTE39CTzJVqa7CNRywpXe.M1PjI7XX5g4uJZe2G8LD19BO6h9IxHM5SU LWP6iVTsklg2nYNOD5QQH9xtCxjcSIi9f3DMBqpVoLxIy1CEGsUmphOubQYf2i_N0pBAE7XDUGN0 NnOWc9NU9VFvfvZA7vjk_W_OYyScIKkGmlOgE4fI.aRNbv2GoCrc7c5QXIBhhL8iYSMSHLouqwV6 j.YmP43kheDzUl2dEEsccly4aDQKOM2m_RkrFo7zb0BzGUHJJX5nxURCO6cEBTm539YztOMXTwaS CGQsU4ETmAatxNmRkO0cK8ICZBdHvXWgf0opIJwz04xa3lRbLzOu.AQeclD8QMnQKsEdz2DmGZGn lq.0hE4Wh3Vg_9cFqmdLw8k8terG3Ol60ZmmxAzfJAuMr0eXM_KayV.AL.Pey94E_zJSsddGUEBt 9R4pbMjYyiQHzb16E53hZWkj6jHZexHnECBhvZgROnwG9coyxf8ftzwwqzlbfxhMgPqmBNFPRQCs 9E72KYzewrw4oyUJQZXLjk5zJSv1OWFktbtFOEDan2cB713152zw_6MMdDuDSwDwIzaxwI1wLSUm KvpZx5UYS.IfgxKopT7mbPXyB5dhoX80ZCejODuyNe75p9R3DQdC12GwATdE0UO3vJYf6JnXJ5_N P6goxUu5DIR9Z5qekAitrE1gZMs2fE_4.4rZZYcfb3h6GmK4p6JNsNwF_6HZXB4DgmKKaptsbUko 7PODrQ6A1rGGIJmHv4IdZgqD5ntSGa0IV2ZXd1boyqf4FHchFw9bok18ZNoVUFScpwxMLqsZDjTe DLDAkWeW_YaUq0Gp.yslNN6b1hCeX0wutQNFjvA7SYRdkQV6ydef1pKqMeNprW0vDb.xeigaK.EU ISg1iqZ7qIOoU3so5RScIS0zDy2uSWJcxT8go8wnqBWuW6dDLTjCECh1Ko5UJNX2MiHMOmMkU7T0 9WPRStiwi5qkwK1LJZTx3MNtgrt7yPQx5GX1VAcc4ODl8oA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:24 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp401.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 5c1c0ca95bce5a627929b23189b28d7a; Fri, 31 May 2019 23:12:20 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_kernel_act_as Date: Fri, 31 May 2019 16:09:36 -0700 Message-Id: <20190531231020.628-15-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 efb6edf32de7..9305298eca17 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 Fri May 31 23:09:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970833 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 6BD8A13AD for ; Fri, 31 May 2019 23:12:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5C85928D91 for ; Fri, 31 May 2019 23:12:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 50FC628D95; Fri, 31 May 2019 23:12: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 D75A128D91 for ; Fri, 31 May 2019 23:12:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726541AbfEaXM1 (ORCPT ); Fri, 31 May 2019 19:12:27 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:34225 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXM1 (ORCPT ); Fri, 31 May 2019 19:12:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344346; bh=wTEQTvklkThW7Dll4nUn/vb0sTDbloo0pZigu96CHzg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=gccMiXe0//Mh4+T5Jh2/uomOEAmCZq3sQsYsdahw8cK65hvQcnLyaKsNrUg7CSzBpLasfqbaEDYkY2DCyeKt/GghMJk4Jshsp2Ho/Gh8GrEzejBp9pOwuFti0czqgKvjpY1rdpHAD6Jqgpv7PercPm+moevjp5IQcI/HXAMcfWiECa160NUaXrbk4DjA6jMcWkDFruBsewLwHIB/zFb7kcB/dSsmzf9jhabMRsMg7+1MyroTS0v3pdeOlghCDqOanNCJfH95fhylQ6GeC0BFYPSOqRAFwx5I7F42ZK+9bILE8v3h/f6zLUYFkO/5f9UUppWBb02r8J+OtZ9IuhWurA== X-YMail-OSG: VVe2x2QVM1nd1jQJdy5IMgCOi9wJeTwwVFPRx7I.OVD0ZTVtxOOYA3i8Wxl7NPd nOidz_YnRlgyBWlb_6drxjTSvIMI8.jOKLmp7xpgFvGmG1okipbnaMJHQe69A60yoyJa3y.7uVwe 2U2w60b_o7lQXQ_KYkis2tDlCI9d1PdDtCydibvhtU9IzUIUL5yURIQ1kdPF0eWtTQE1EvlUouYB Qdk_IRE.0fJ1SV04ieXibX89kxp2JbRxsVHDP5MYXYzSyt6pcYgACvDipoCwxRttGAbjFrA.9z3p I4UvEOdYvAbQB71N_zJKFhq12kilhwCDY4sLe6YM9IV6fAONJIYgOd.QWXIS4P.yMvJcQWheWgoL C7mHNLRW0r.J44hvJ9Y1F2dc6OXwfTR5m_bD1.AZ7tbFqs3IntHtVwAkMh409Q.kGeea.iYUZVwi MNLJoihiybgHZbXzwwft36zmWX3.bwxpIXqlud1CBWgeWFHrSZIyiTkVkrPC6iTtxGHD_jTkwkWV mikHO5YQF_UlRffFWGOqUqXmE_Q1OWfHwSmE4Rd5YzADetQmhmJaMUrXtA3GZT81EeQ2zVktf425 yq3vZSjQVwiMemJ5HAK9OnVyy.MnykNP9Osb7y3yFlZXGfk1VUay3TWj1u2gZPqnga80xSbmDG_n uRVPxqkEngQrWuNhNd0zWgcjmJ3Fzhk0fkzqGW2bClkpxzifmnJ7MWoRmt2cMCa8JI1BsTWvVuL1 _yDDP8PnKThTNCar97Tpdz7c6PpkWMLLETPNqM3_GPNHH0UFWAX9GrVQbbUrNp9QIXYNNiJJzJZv _fG9q4SJM_CWYchc_Z2HNT.7Y00GJlg13wH7RjL9XKv0iJbi9OwKt4PTctaldVVJML5jNRUwoEZv oTmzvf4k7johP78f51eFVNgc8tuJ9JkhpegDXEiD.yWtJtlBovzlzQKo_cAJc6Rt7rZj7TPEW8zP Brrxfi.q4lrHVchqNHnLsOpXxYnzIRN9gYl7q3.jpZ052MSZ54OhMrPNVdTcHw.6MWDY_jU2Clp7 8A5Bv8Q0_v2OJgJF1OTHRaaAuM7AG.3ZzQuJEqoy1ulnbTyOSDhtYUHEPKuGrYsAjvYUeyxh8Wrw YxzfRh5gVbJ8Fp678UKT64FpyG5_wiYi7IRhgrXhOD.BTunuwc.DHtBdnBl_NXowXJ1jJyCqGewy Mc6Z1TJv5.5Ml33D6s0icrDTdi40P8iYTwe4ocO4bASGQo962VIA4xicBLNKWrkdOGQ4wuMfJnV_ t47J9iCf3.._xQaUaorfQj0O0quSefEb514aEoyypzG.pW..lLm5pv08- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp401.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 5c1c0ca95bce5a627929b23189b28d7a; Fri, 31 May 2019 23:12:22 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_socket_getpeersec_dgram Date: Fri, 31 May 2019 16:09:37 -0700 Message-Id: <20190531231020.628-16-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970839 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 A30226C5 for ; Fri, 31 May 2019 23:12:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 920B128D95 for ; Fri, 31 May 2019 23:12:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 85DBC28D96; Fri, 31 May 2019 23:12:43 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 E7AFD28D91 for ; Fri, 31 May 2019 23:12:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726653AbfEaXMm (ORCPT ); Fri, 31 May 2019 19:12:42 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:37502 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726450AbfEaXMk (ORCPT ); Fri, 31 May 2019 19:12:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344359; bh=nhyQ5HEMViXMwzj11P6PbXR0lPC7xmZwGngBq91che4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=isyLxpNGwV9a8I09DiE5IPWVcYeHMmXGADM4W+ftjnmvXTzZ0dmva5TSbOg9TTFfmbtQEFh73hx/UCY2mG6KepN429TbhsFVkBaBG/79ZXtfjThLzrbJvgGo9f0yAGu1SwSoo8OIeUSEafgVgBRK0hVtIIOWuUqkwdtaqT6otN2/EgHBzvN8NtvKqs5saaRp7CSZVOUGzzC400QFLvx1D4kgVRzWea5b+yc1KVRbKj8/JIqA4sFc0Xuxyf38GSyf1qApguBnBZtJivKe9gDW3mfguRfzkvZQKUwWYu+MSChsrQUn241iWb6ytm+9rF6Et7vMruKFGVlGcc8tWun4nQ== X-YMail-OSG: H_cCyl0VM1mGgnERVMhwVOqQE1oE_wiSKO52I2YRiZ3c3FUhUgGEpH_1FEeRVNv T_85JCfPCXQJDoWovNswJIvu9pK5k.B3UCtlE90O.1MfvjNi.sV2lhNQ03Uz8RHEBBC2CfYzj0Gt tV0plr7FJdpWjYqeqtSikKRp9EjIfm9wqqFglEMI9MbkGftwIQ_gDPM6X29c.xepps1YH9CZmHw0 TjjiIVXVw_3y5lciuAkswzJ_R8BGiWjsh34Dqz8Np3RJKZSS7cRCJAmEPfZC.JKFyiTy30jdmNHF Cc6AAC2601iEBrq0WS5bXNLZLzkPvE4jbryQT.2Wp0.SZQ3emwZVR2CVlVPOTKXUY7Nx7MyyfOed bJqAY9AoNhJTrEizrivm464H28HA3hZcSFq7qh_e5KQzikAbPltFqCvjZQ2da1LQR4ygmaXRX4FP aFzKBVgT8eS0ESW_xsOC1iCRQ1Ny16nguvu81oL_KCvk7EWPFaV.Fvp6.fnmK7H5GFVdIl.ub9Wj K7pMARLWtuFvDb8rqWsFWuxdo6ZhxAjRLb0hpXZuTY6fadgcDBfkM19Rk280kdgJBkEIjq7P9VYL R.ht0x3qpuABY7pZpUA5wBEnZ5Pd44qu19At2GUT_7zrbUgiKXGjpQTZcieu57SW8jydVfEW.mkC ZGgLmWbNs1tptJ0SYxn9bFmhCrQsUtPM0F0vtKO5Gi42xuDUISV5fTlRYkHsfAd2toPcpcp0S05e q4dC6K69Ogn1PLyxkjOqA2c2LXCa1KuIKGKnunMU2UoA45dD.EoMydGKSscDPXrPJk7mkBy.U9Ix Mhc6zjPQj32O9N18eQ9UbRezAWBcBJwuTPrH9wcd8hJmBuvUKMNivPyZS8HttoO0CzdUwjNwmjNC ZFD2PmphbFH0BlZ1hdd3lv40uF5HzuGvE7x2aX9glgszfenCnImLJnQ.qJMCO30EwfRc34lvwN.o qqfgmNLYTw31VDQdF7dvIHpsxFjoPBtbTgtacknWen7I_SJzDLOiP_OcW63ulA2c521Zyupkebi7 3PVQPmvFWjG8zCFGraqmJGNgmuIssqZzareIBOjED6_IQsCzym.Lo0Gj1HrtRt3DldDofWhA_kDt oVRe2t3UmGXElMLh1iXjUbKA2LxO2o.nUog.mOPecHS86BFqcoccz3V7b57fu55lMqDDq621DEKD GkjqB.iwJXqowpEdOe5qhuxwIeyKO1YigvPKN9knjWhEj33fFrrBmdtssPkcC.I.nnmI_zDTSkAe a1bmSqSefX2oqgiq3Y_j4V3IAnDPhqWeNpo4kNO0s.FI7Gp8USYq4QPkl2HR9QeS4lUZOhZTY Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:39 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp424.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 96e99cd6627b9eaaa0e67fd214bcff39; Fri, 31 May 2019 23:12:37 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_secctx_to_secid Date: Fri, 31 May 2019 16:09:38 -0700 Message-Id: <20190531231020.628-17-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970843 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 E5BEB6C5 for ; Fri, 31 May 2019 23:12:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D469928D91 for ; Fri, 31 May 2019 23:12:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C8DBB28D94; Fri, 31 May 2019 23:12:46 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 C887E28D91 for ; Fri, 31 May 2019 23:12:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726666AbfEaXMp (ORCPT ); Fri, 31 May 2019 19:12:45 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:40654 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726638AbfEaXMo (ORCPT ); Fri, 31 May 2019 19:12:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344361; bh=7li7tkNnxiLkHtu/0oyIewmS2h9OYS5xrTRq2nlRU0I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=gMP079MOi0BLLoWrHBtzr0loVWt0jy6xs5i4Qe+XK0ESz+UgguRxlkw0VvXPtfUzcBnRDxCgtuyEr0wUkjjyj6rqi8ueWIPdQ51GXO9w1GIUCJaHknxi4Yq/wQtyteUiMYi40f8tvKPZoAHC+GXwurKjPdgCQuIyAtTAI/MVA333s2feJrX2v9d6J9eNBg6F2JtFn/T65kbVrfHjRAmyG9Di/ECw+iOZu+Lz4Di/ZD/GSL71/IMi7Mq1vmYBygmjWNaTMi36abM5hNNZwPNuzcUgNnpHMjScNi7NpEJ+/iOW/0XWVWeNTl5vQlqiMN8OYudf2e8ciPmW0AkDIhi7Og== X-YMail-OSG: khA2lvwVM1nPpn44ZG_KN1I9HE99LCP7_Jf.2J5E0pCV16DdMQv1sAnRbN5Ibrc EJ0.8nfEZ9ePoZoLFIEcS2bWyemOCemlOsFatjND1yJCr.zaoYFFznHnHxaGoNcPzLtLFPaw5p8T r.a5SFVnT8k2I11J7ZpUW01AG.K7wRWS1HeuEOwvFFFYD9fg4tNHpSyPnq2qz8CvzunSs.lp2Dyo YH90CGOQXlLE_wvacmg97ubDAFGqfb8LcLo57d51Jyusa9.aGnCqyFFbY3obepiv2q1L4RvPZ2vs usvEVnw3KyOo1EUNFgzcuSFQ8wKHQ9zxSfAPO9U5Ajawww4rtCt_kWXpuJVo181rhVjwSiU8G.82 H_8SJqaRgfhq3x3z7.PIuEuMBlWNtS2uX.9zFlcb8e8Q3eLDwopXpAQp1.di4GtpZGY4LQaMd4op Yf_E5MgkpI6HB7tTOx0C7yVKAqqbCZ_s56X45gAbnqH7yue28jJqacdHpC8P0tosI6yi4y3opmVH 8ys.acMMVr8T7it7NOtijXJjDjjrbm7kYUR3kD__c87bo50rj6Mo5i9R2942sCiS8iqz70cTd.D. lbh5l8syNU99aSPqbeVoIeYUbXG15NdCCc8pkrsn2UfyGY7_y0EQryclpZHfugnXyhYdmv3BrBWG BRm9YkZyg5ZOGdZMygvxNiNAtJReyh950vM7mt4MTJgKKHOi2MRFwAMqn1gSHw07LAaeJeKjx4Vu PgkJuUot0rLvcjLmfAXUwTEwEKg_SoRePrrv9JOo5O3e2My2zPoEDXu95pwoPvCnXqyfbyturTDb OInjoTvRVEgRH9S14fjCb5plqBCl3UpBB1gxrYz7dx_D.UQdWLGxN.UtDtCZuyheUJPohizmxa2k 9pnvdWXP_UohLs59rlZg1EkRMHsLLjcQ_QgBWGcU3x3jiQbVxbgEy7.rPQTZAdcX_ZjkeVaBWnxP 5QiYkQPVpZfnguoEHhTwboJsnrCz47fGrDvtfIJLybgAoRehvwsuQDyXaIpuwFv7xnH8o9b6qjMG mAfgDdJ9ze31u475rnvtBZrJzfv5qjQqkPyNxv5NYG8oETLTPUfwGhzVRZXsi6GbUFbV.45JRPgu ZBMxgiKJZb3YgVluCMxp8Q296NBK67tElwGzsV5n9F7LqPLIEjWTbVQRRKCJMy08TN9lw1JFOpfA Ps4OuTN3drXFZW5ng9_ln0RWTFUazHTG0QmwRI7Lgkw2ZukSQIGx_ux9laKiBIDX3SrEIsFBlO3J je6IBubrqjd9br12sjQLaliVvKLhL72_Rp2BmsguGVxLGMSYd8bk.X_s- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:41 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp424.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 96e99cd6627b9eaaa0e67fd214bcff39; Fri, 31 May 2019 23:12:38 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_secid_to_secctx Date: Fri, 31 May 2019 16:09:39 -0700 Message-Id: <20190531231020.628-18-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970849 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 76BEB13AD for ; Fri, 31 May 2019 23:12:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 636F128D91 for ; Fri, 31 May 2019 23:12:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5766C28D94; Fri, 31 May 2019 23:12:56 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 ED2AA28D91 for ; Fri, 31 May 2019 23:12:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726658AbfEaXMz (ORCPT ); Fri, 31 May 2019 19:12:55 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:36941 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726653AbfEaXMz (ORCPT ); Fri, 31 May 2019 19:12:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344374; bh=affcoRY2PaaUmEgcqS6C9HybTLSyjRteSCEEdycSbI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=KLwNbx6AsHAwP7WEjhfxk+aEARHwWExRNyDhMsrRjP7wzF6NyJpPIy2EmtD3pGmAdXndcPJRC5Pskw28OnmhBGLFzmeHrovSr48PG2jN3Ud9TSjLXyFAJD/uNTXOtauWqGjH8wmPAxFlhnWIoUmoyXIB4xjltt8olMbh0ucxWfHxCSMzUdwFCrI3V16mIA8b9ss4k1yPkRCVPkut0DafFMkBs8kZB1XopzB/5zeZDMDxdtnNoOK7j2TF8orRcG8Sv+D5b98Ek+/pc3jCRESwtcbgrCUBLbjr+NKUtsrqi31A3N6l3D5U4NG7wNu9wnoDbIyBqtb/BZ9Xhrgck3OV4Q== X-YMail-OSG: 4PMBBjwVM1nK4PghUgjt9CKcWrIUgJ1I4TF7Hgv.2DaXSGTQ00tpz6isKzMIW83 zhwt5r3QyUq436Ds_S0xqoGVhmA6apzHbIorHPrvd2j6eKM99ufOiqNoyptse2uFkMUgMLyrYYRf 0wiC7nbzMqq1KWag5D3Z0qArjg1gWxIE_3xrQt3a_k8vYLhcxW6qwDnLXdlRsm3PlNzEiPPxSTMN cc95WQbuYj9gOXHzPuJ9LZmpiOt0X3mVYfWiA_AgB1mFfElOiz4sVTLpCgOp5D3u0PYv1vcmK3dr zBvS4uZu0VrJWIyTdwM.0i8qqzmoQl0aiODvKwAPQTS3XCcPxfVPFmUpbCKVMufmUj8IoeA_gQah wueOILaIzm8Tuoo65446GvkkZbjYF.3tUdPf2WRpOxfy513Dcz5_gJvrh_NwsajgbCQB_tZrQYt_ LR0pKLpFTvaXlz9kOECLTzgGdWceJwl9xJMg_AslVSEMil0fumuUMNfZ8gP4ziTneHSEFx9QzZHR tc83twqMUDmYBH5mLAoMsbKyJ9f3ECaRAIyNVyAqXzvrn6TWh.yc7efPmy4jOMbg_0R0FdgXWrbF wWygJZ2SuSJzzKJJiVDKDDmpLxNo2Ay7WQXFDQfrdDhcrfCtAS2d6NhtCxXfF3TWkQA1ozWUm0dx Ak37BTeAU6Ofg5M5GwJvpF6t5JvNXVxS9UNtgAi01ZZFLQD2rquo7RXDY0_ibtU9_fnytSRhRFYv zyHjMwECVMqok6KnLMRNhx2gO8Ewo3AGzWuV5gEVEhGGyKwCDO5AeWPwbNkIiPPmklVE7Eql5TDK AJCsd_oNgjS.i0SQrZGbmJJVgwpSH6c_0MkDqL4wY3fIrdLlpJ.scw.iMouAk9a69PLjGv.OYt_S 0VPgxnS7nqKvxQ5FVTUYdiqQ7bFvY8HnnK0LCGsRvZiwjF1T.xJWHF_jupjZdIoRZIBEY5b3zYf_ 4OgVlJTMdkGZkYVH9_2RkyM1Vzn5nlBzeleaM0fsGxGvjJnKYjlTYVs.EUPdnOF0v_BGqgX8rT9x 60.9gPd81maF8QozLpZu6zgMJDX7DM7RU6lLE0D3hjz0xkxIdUh31cTl1kUqyMXgfAiEMbKujblq MOh8XOegC8_MrE8zINVAYxk6.akUA4nLpJ7blwewflmRiyt8pgGLWWfZrDWAla2WYhRihZb8C2SA a3woBJVidHG9AJk5YENi4BQK8fypfyPfs0co3ZRL3pR8BpJ3SCbagfc9GZQ9q_dqz_ls3Oqpa_fK BSp1o2Qm1ap96aZjo64ZpB9R_bodA.Ho0Zay__yu_5zQYoYzSGeJEycw- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:54 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp402.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 6b512c5bef0dbdf030d04ed894ce55d5; Fri, 31 May 2019 23:12:53 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_ipc_getsecid Date: Fri, 31 May 2019 16:09:40 -0700 Message-Id: <20190531231020.628-19-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970853 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 A994913AD for ; Fri, 31 May 2019 23:12:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 98F8E28D91 for ; Fri, 31 May 2019 23:12:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8D79E28D95; Fri, 31 May 2019 23:12: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 BB33228D91 for ; Fri, 31 May 2019 23:12:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726721AbfEaXM6 (ORCPT ); Fri, 31 May 2019 19:12:58 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:40934 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726720AbfEaXM6 (ORCPT ); Fri, 31 May 2019 19:12:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344376; bh=rnYFo5ZRZDk+OWS44zRZyocobFLx6h6kqTHu/9Enlaw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ndmw5dX7FlnDjNXy+p82zSNCuqaxHV1vqquxHttDhqiMzgpOr2RHwI/ra0uYgVVvfIEC2VX+6f9kMkvjOzfILO+ZOFarsPJ84ps6oW0GA3v2rCeqIj4jn5/6PR+5g1ClC0pXpq+oxEE5/kDEU96cDzK1J/kScXRRZButxRKj9a3edP+0OVyYRR0uyoUuCp5t3p0l7Z9y2g2mMHEaynv37lbMW4PVncl+kcJT4GSAP9Kzhh1z1iQEhR2FpedwQcCEPKFJtxemNXqlirAW8NxLrNyzhGWoAoYMihzyew4V40oPEeq5nxj+V6mx26FFbYB9IUUjSeElhkvCTq90xpWHow== X-YMail-OSG: k_0FXlkVM1m_oEPYK6rDgU4Z49OLhAN70TCax_WnkPLy7QhtJ0Quf3oXkKrxxvt fthe4YaJLnz42FrqNhNSgvj40XRAOGfHnWjiIF_7VDc2Kqo0xst.IXL7CeVQ4KT5w4EklUjkvN1J ROmS9P3OTlJAOHXof.rhVmWiAWQM6yYtO4A6xjCoqHBVXM2IsLM4PyOysJtMlaH.C5UWI6zGtErs YlMKAg4aIVyoe38GYqB6kSQ.5RBtysAOajM5n8PtZOqQX0fmMFmW0LM0EA4ugrPG3nLs5eXc9b0l Ic4_KKwJKm679Dn_D7y1OS4YKHwHS_0ZfaUf.RuRQLDALfulnIa2FYiht6LrRpOytXGcm5_LVejx PBa9LS1YWPEMXr1PHtrDn1f26_MWcItfGazaA9zsWC8dev6PiDbXOv7GT4JZDJI64oo9Pl46XbpK V36WJgHdcDjyy7.86uMTAEK5YGo_OduiyYQ28ZerBGkPUbiqVDpYuMcLQtXocXtPZRSVsEetkcGe JKSWC6VsDzmDhXgy1LV5w_687OBwUsEjsYpXoNTcM9koQ3Nb_ivk78XzEKXiZfcdc.uC_rX1TbWe C0P_d_uD21k.s5FkzCbZajHppW1gVF98AyylnV15VDXXzxo1Fwyd59GU5Y_MnrJezqxLWa4OATfC OG2zknTuq8N7bxRF1AI0_14My6mQ9hRIZzBsfVkRwHriJO4WERlW2rScQ.oLNWHtl_cTLcAi7_Jh 2qI3h9wLhlUgKzs_yo3CDz2oNFY5onlahdvwfMjYePA564Mrg2d8HVsTW2L.LL24hWPQ9jGQ_Xam p9M3H4PgN5DUAk3Vr7dhPFb3wxd3NYGAN5f_EIhgQ_eQUvdgPkuPJ9rHF_dCu_Ddp5COLDNdYdbp FMJNJYa3627czrMu5kTrK_9xZ2OWDgTtn02sSVfuG2YtjfqWhBh92mfTimsP26NvTnRBCN8s.XnS CeWHoVVlkVcx4R24cr1Umn10sT9kj1z5zUN4pi23.tNeFz8U019YIEUXWxebfkIQINgdzeYGAKED IroTgtOxNu5VZxbAckn2pMyCoudzXv41Ln8AOz1d2aDJfGuX0NU4TYO8D1jWPjLuWPcINpy6UVsz HeTTlQxMn8lXLmULEhPe76tnhx0rIc1Sn7gS7tNOrOcsr7du0Y8ZFsGaaHcQ4P_sdIDSnZslzd2o wStFLVTtJb0bFabRpIbJVBf36TzaYj1qejbpVn6WaweJGDsPa6veWQ2cDhmw0hcOGusyvWXMrZcV do5CXJ0DO_eQVCl83zQQEjuM8Yr.2lPzYnAYKY3qtev_zFNMiuSx7F75T Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:12:56 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp402.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 6b512c5bef0dbdf030d04ed894ce55d5; Fri, 31 May 2019 23:12:55 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_task_getsecid Date: Fri, 31 May 2019 16:09:41 -0700 Message-Id: <20190531231020.628-20-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970859 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 A6B0B18A6 for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 969EA28D91 for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 893DC28D96; Fri, 31 May 2019 23:13: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 1AC1628D91 for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726666AbfEaXN0 (ORCPT ); Fri, 31 May 2019 19:13:26 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:44452 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726658AbfEaXN0 (ORCPT ); Fri, 31 May 2019 19:13:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344404; bh=GPvWJDPXSClM26o50qIJxfLTG9C4Dy1cxsnhyj+//zw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=bnG/YtG7X1ys/e1lVNCQK/Qz4rlPFczyvVk/wBpaFoXTFbpkitohkEI3yeUTzGXr2UKPZPZBFJOWJgvlDx6z+mvvJbRX279813J8NaWz5JCTdgBgWKdpudaj5KG/pG+bsTWfN7ZqIBdsmTunliqPDECLEe02q/A+uDEIHiyZ3OlfEuJepw9EVslgMwlvhJV5T0aXbo9h+R/iQHbb/RYjrKVRE8Hty0ro79tHcPBhV7GBM8D9h1vAqLl8bVeiL542u5ehsbAMoyk5ysBGjijaxbBEv4H4xBVxEAPp5ttCMjOR0J/LWF9Y0breytfzj4fTgTBvPzITqEtD1d7r9UH7yQ== X-YMail-OSG: Y6phVJcVM1nMLzJbqVU0lhhbGFxFToYt7WcCjyTdxzY.R9qkMsQHyay3XUzEUWw GRp3kV_STpNWKVmOy4hezQNAOIwht9t7u9Z3LgVbx3eZslLGLfC_6MT.ZN52SCUapLje_E3M6PH3 7z4QjVx1u3Ojgl2io6S9HM6nXYPu1Tc_lyLgBVN_x.3IAFJqikRDRh4Zd07ZhsB9OrVlY0wnq9w9 p3hHx.JInSkjuVuNAQUYmkRNj8oDSRq0Yzezkmt9RmJHKkhv7zQRlx.cydu5sadZ6uLM4hOeyiq4 VTmY.kDSmj3Jl2SuMjh48PtBIuKfIWA35PwH3HO4cWrFFAc9W_ec4oFLu.IBrcMUlM9d2QA2xkp6 .6nWAN4ItlEbkYHfg2ZkNL9NXaSq3MZlUeQMhTeFiSCXokdfpPX4StObm7sB0xO1ghZFd.wvady8 M8RJoifUAaFXke_kdpWBfM5Wu1.6di_saWgA4JjhUgpJK5mCT8VEGXLBbSaNnQxrdf8e83tMcylV XRLNuFFqf89XuykYPpI0kunNMzO9zm.a3jXhh_8HTgTQMp_wHUJ22XcHNXFPRSkM3qFhqcc7a2N3 WCtiXVoHbVLHbsRB.QHkuh8Nwk6lDMi3UT4GSHLiaJ7eJH8qcl7muFxBBmKKdtGq.WYb9SvqP88a xOMikjInBsn5fjxsEBsXHMp9Gc_x2G7sxvyqWp2gAI4Pc3r_8xbZymvCrla9eDzD7bDpOEcf1oWf yg3vKM1pMg0zgfAsKujzgpqVITohlVfOzduEmXyYeY6teT5hWU6ERv.GzeX9RG9hFPTpjEwk5mxs XMFlA2TtsNdD_b1HNjGimoL_2k82lwHfJX5IzRp5uSnVwR_quUWJDJtXSay78RGC6SAhWB2HsPgA dqwunZJleWMT.WQzHtMvNZ7DXw4gCQS7.kVNCgBv_o7Mjs4gfnM5OE1l0rhVCdnk9c9m9olrJdEN QbT6YhXAUGeaqtHaucjUErablNHE.7OiyTK5Sbd81Y1pzDb47Ki8ROuo4Xvm4BMhPNZWDWRqu6Cn iFFPB6UJ3H0C_nxloJvi4r1uFlET_c2uMNUwIPzZCzrsQ0PJ68SmHEa8a.82cJAy0uXOKAIyHCOx bMB66kppGDdZV3e6ghN5jnUtMOp.8jPCBiF3wZhJkjJKQXYUblYmpFQubcAEufZ1DBYwuqd5WHL7 sGStN7q1LH4_hfkzomPF97txwPeBeP25CS_.SDzR8_b.4QzrXOAntsxzFfwWButNIZ52nnSxzAPI 5qElX9gy8_JL20sjZeL.WUxW1PM29na4f74oaW42Ww5h6ZM96ULhrN4Ca Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:13:24 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 8fde30701a6e2f0263f97d374ac02e3d; Fri, 31 May 2019 23:13:22 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_inode_getsecid Date: Fri, 31 May 2019 16:09:42 -0700 Message-Id: <20190531231020.628-21-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970863 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 E4E8B13AD for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D5DDA28D91 for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C96F528D97; Fri, 31 May 2019 23:13: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 6FBA628D94 for ; Fri, 31 May 2019 23:13:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726658AbfEaXN1 (ORCPT ); Fri, 31 May 2019 19:13:27 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:33246 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726634AbfEaXN0 (ORCPT ); Fri, 31 May 2019 19:13:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344404; bh=0JVMKDcgnflVCRGzj1eTsOgE9xKpgnePntpCQbXL9EQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=d8cm+ATqribOEz5vpvUvGACPuWb2flPdG858u6qV0QG+tzol8rdu4HnbeAzrevmtjOuggC4VLInDfvrskdTWldQ+1SCNGf5uOs7doSqHQmRCFD2d2r2gZ1LMstoM9wUs2BKtGRrA5Is5KkoFoM42eev1c2t5iUlC5jfHFHkyDHY/5qPlCxxWJdoYisJw+86xO3Vti1VaULwq7L3GpBpdkykNB96a0MMH8HZfsjRb0fClWpUGXX9cwcD+2JSba++gtwm7PeIiyhTS7K2yDsamGyb/JOV12F/SynGJE2ygotYS8p0egV9zzhYFfM/W3WTEQhs/QLfvhzuE4Tchha/FxA== X-YMail-OSG: 9ezUybIVM1n8cFgycVsb4SzmJjb8QNQLtFnrKjrFSYBKwGN84HOBghEzK24oxg. f7dZPBU3P0kOo60_IGjIdK5OUAmYbb.dRPqoTMC4KIFLtLV6LA9UcD05C64eT7lLrvBm94_IYLcW PvE5WPUfG4uqyOCCXB2uDejXBvB.X9U_mNKASYP6TErcni4gTKb.AFsXmHoYQE22hrlUMYPFr4iR yJqG8K7MxJuxy4dBOAr9BXRJ_cEGS4fjqeD8rgXhEH4CavJtJ3RPLdikp9yprm6mYyX8fccX6vzO uHwr1xv8f0aWSwYF7pJdsmpD7jIcGRnfiSf5x91tW4l8PEB2nAh5FnDm__WJvdyKuDyV0ukbEa1i OXtlZ.HqLUUFO0sxbDDuF3qjiEqe6vno81i6tSjWpBQsh6x1FWsy.DvAPb7hSY_5vwyqaeZUC_A5 o44SpRcaBK5cUICOnY3w_680rNqwkC7iA5GJmbFLyPOA1BzJF2C4Usk5e4N_dGH4Cm2SnAtfmRCL eA0wpl3Rm4e6stt_ccbOKEppfTqDJwv.LLzN8sCVeZyOLQmLKx4ThE_ximWz.aBVnUFYIm0FJ101 xZ0MbOG9zApgQjKoRc2BApjWUcMWBbgabX8WxG9VVNG_EcwyLzLoWrgVt8GXb5W5E8uusNcKV6bA rYmEToieVAXIyMM1HOImozvIQ8DMsviqo3y_qv6TRN00WxQlbimVDqtTNZhlDQaTsfSUglMpVxCc szzCcErQe9md9gIzWhf520xOGsnfu3oIEGzhSQ.uXhQMn2G1iLTKqNDkelcJ5OdY.PsJkOy9JqGj 4G2Or0_OdCTJxPdf2L1iGx5p4392.bbu1ptfEmqg4u2m9ja7Rf5h0xesssnNef3TArnwQwkzB3_m dn5pJtpF8g7U_zkypr.GJszZsX6GuIcfyGQwOw..h0bD348PTP_P7nyvOgVMPdZ4ImnckZFrHVFZ TKxeqv2fwLGlSkKWsbYYtsl_BHAVvTwjdsO4DdX43fBwau0GO_ylBA9BbqJtEx.hAaizMj_IKILv PEmMEUXVghdED1yuvS3.a7dHlQ78lv9kZ0q_586esARJwpYPukiAdpZZcRYGeXrwWh40Elu_l0hn ShhpycZawCtMs_dQipPIFxQoXAIXCNRkP5sCA5QJzmY4E4S.RuqHhw.Kii9mEiZqkdmrjkpl6SVB igY3kvgB9tkG5CyENavuKTBkW60ft.C78O.u7Fycboi1j2PghwsCwLmK2kpP3TXhEBV6Rq9h2nJL _4T0I0BnHCcH1awDIcBNF2Mt4jQuYp4kjIybQxp0pivGtbAMmOSoPMb8- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:13:24 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 8fde30701a6e2f0263f97d374ac02e3d; Fri, 31 May 2019 23:13:23 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_export in security_cred_getsecid Date: Fri, 31 May 2019 16:09:43 -0700 Message-Id: <20190531231020.628-22-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970871 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 8ACB518A6 for ; Fri, 31 May 2019 23:13:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B8B628D91 for ; Fri, 31 May 2019 23:13:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6FDD228D94; Fri, 31 May 2019 23:13:44 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 14A3B28D92 for ; Fri, 31 May 2019 23:13:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726700AbfEaXNn (ORCPT ); Fri, 31 May 2019 19:13:43 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:36021 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726666AbfEaXNn (ORCPT ); Fri, 31 May 2019 19:13:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344421; bh=j+cuqymh91xxGIirxxPJDUSMb0L9mw21aX8dKstwmqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=SMamQGTG9qChc7CbmwsVbhw5oUSGPa4BXrqgSGVLNhj6IMzQuhJuTyxkm1Y0xolKNVf3XHj0RFczDYmTvWxYoDbFMmUqeWQh0p637yFaDagq+PZXkJVk9lY1upPPx/ItyLNRiYIracSVCjLNqYhOAoQWr1dL9e4c12CWbhbXYYj29d6Zjfs190mE8pfUNjS1fSDh+bNSn0Mzd42M1RrBF9v8J4xa+RJCipTMyE1wsm9fInXmoeuUqwZeHxwDyzrT9iFpXFTeLu3wQMNg2MVdPKIY6W4vFYRidf7Do5ShsF1Jx3/s2rVLWKgMAjF6Gms/OzXQuV7zT8/GezmSpkCPJw== X-YMail-OSG: Vl6wPfIVM1kTOcGLGcQ3CpTSOdAMdgPNJ9S8yHevbXsr7JV1sH9K24aeo9djGUV Yz6GQVgA.RXK64b1kq1_wqyeBuzHKOzk.DBdbrL9ScTg0mIeS9r8nDCw0qVAyrM0F7_jZoKS3hS_ hjmkScw0m0nDfy7HzAAiDG8496i2aHGEx1Lu1HYudPOauRAbEn8hX7UtPdY7cxmkaiDagsdxXFjS 3agBR7AVzBPdLfQ5FwODobvY_SCRxF1xC8AF5xHLnHMPPiU49mLgyuxY4cPye2GQe6InCekyhwVr NVU7jKQ8O9osMXrEQvFgOk6LkgkrUX8.N7RCgjTiAgRHVwHllKo6qByxLUyGEvXI5S.EDPpvMfdD iTGRc2SbMw2NqI55kDlO93iemeGzRnX26O1ZG7w9A8SENYFMk5o9BlTeCwx3DvWnbtVUHsjUyeND YYZPzyfiyIG6aKL13mtywq77_8sZTh1.swVzT1xgNWmHLq.D3.fAhRwkS2wtVeRwKcdEaF78sozM 7AyRaLMaw6U.RE_GJTPlTxVKC.hJ2myeDNYcgB1DZ2BQ7Zbh11JgL1XsYz6sKRS3p7xa_MBRN7KL QQmTw6iwBeMbdagRB3yLK3E7l7CMQ7hkYgwcFTSs3UClkdy_LCrCpP4U1V9nO25uuIXlGSTjKFC6 bVMkYseyBra2g4OCFbj4BC4SHDjVMdSWCcvMqEBlJIDBQIdPNu3E1n5WYf20xAInTDscExgxAywn iV7rCfj8ZqqhF6BYcNdG.Knt5ZbAiEAkyqGj0qovUPYbBEiVOw49CV3xUXp3iuLtHRo4igzXPfze .CPWYoLulWvFIb72n0s9FuADIhB9vhjeObF7LGycH8cIX7rJiaQaqy4IJka54Pft.x4eV_GJ3Rmu BuDKsRo1pLxZwTSOCfQ2piatY0209NSdsZmnE3w_JasapXRuy327X3eS3zHmU6TcUyhT9NuOI5v4 qQGQNqPaWsaFqpydKV.mmPECwwFs52P9Tn8YJsg9hWRzfE4P7EyAeX4lDewqvOYOfVfPf17FYTc9 YOCDIz2qNm8Abky8L_04czkXTuljJYqq_NZKJNnFUau9K.YppPLXvglZoEArT_7LChMh8u11ss2v GrcPnkMkX73mRZOCvmdrj.4Q..mHB3kKen9pv0vECKypZRhi14wwSGzcjiNsl1hk0m36i3PHMQ9h nJAXUvUAjBXArb3j9LM65UGfonD6XMP_qNbj0v9x7lRjTDnOtYqos67wHzegmRITrPtNSI3lX3b9 WUdVMaaHL7WqazusmFSOzK8VS6pS2_1d0YfrB_UTXZh65SR9e2cAzQvUv4w-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:13:41 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp427.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID f1f4781a1c1cfce2dfc25044e7a51d44; Fri, 31 May 2019 23:13:38 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] Audit: Change audit_sig_sid to audit_sig_lsm Date: Fri, 31 May 2019 16:09:44 -0700 Message-Id: <20190531231020.628-23-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970865 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 62E0613AD for ; Fri, 31 May 2019 23:13:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 528DA28D91 for ; Fri, 31 May 2019 23:13:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4672C28D95; Fri, 31 May 2019 23:13:43 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 C10CC28D91 for ; Fri, 31 May 2019 23:13:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726724AbfEaXNm (ORCPT ); Fri, 31 May 2019 19:13:42 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:44843 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726610AbfEaXNm (ORCPT ); Fri, 31 May 2019 19:13:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344421; bh=V6rKCyElicKZF/0fKwJbU08oHRiI1KUrOSjj+nGJXW4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=kk+VTXndsuL2kxK1HbZ6qsr21wdQFYxDOGALvRkV+mAYb+U51CJmoTSKi4ElCyEyFJMRqB/kmg7s7sAyAilmlY2aqiino6U15YV1YVfzcUgRbW9zYvPV+6oQZ3iisIKHCDRqP+tDxtRemHadgRMj2f159V/o08rFi+TolzxTw7SEZhAvGvzJ3LT1sueqtTLtq8Aw/Vw+MJEDyMaLaVlxNFwjn+qOgPDhenyZkNgdGT265mD47R3ywDDCWI0NbLMnMKC1jiJK81WM2G3LoP8w+vnMj7xsr6hCKu8JoQbhWdECqI+4CjrTwvhdRBSRGmgoaq3DXhSNBUCHpTn5n7YdLg== X-YMail-OSG: 6pbJXn4VM1nBitkPuqE_bwwpcEwcQOhfXHXhVY4gISEZSIloWAWUCO.oEdEkpJ5 aQKp0UPHNRJmAwdBegZqHo8SC8amjdjyI_FFJT3vOI0tgn0SlUMMqtsmpqA0MS7JQdyW_vaytFQH 1Gzc7J.PeAd7h9XmxpMijNSs0J1NAHL.lMRU6VGo0nHHFpbRd8YrS_LmYAhr.nmFBcOgtGhXwxSW qSJNMUp1765k70LNToqDonGesWGouN8pcU5eYhPob4txduJfD5AiqaQ0suCiYI.9EKXD00c.ncrb Msz3bsv6TGWsSWwVMW4DLjtLXxsC1VcYPBUV3GMtswt0UMaJTKHiTF.gXu5YoOnXfnCd56NRhPXo wqVxnQtgel5sxddZJ75neg.F5D3j2rzVbni4NvzPGPqrjcPJSE52z3IM8nlosqMPSQWQbnpHYfu_ 6HT5DHY2L4LmZ_4tl7EWpuCYnlKtQcfU.3r59e7125m_sU3j01HYfq5ftvI7sF03tdsydrF93Tdz unj6SxfVOSCeju90a8ZnAwkdVrF9j6Y8Prx4HbPbU.cQW0d3C_urdSioa9tc8rUaeedVtmY.tUOV cZ15xX_k3Qt52fHegL1eAZrkPd_xx50_b0lUjzkcn53Ni1Xoh99YqkxPCeZHYd6UERRM3EAutrdp kB8LJaSsG1AEQZVXV4mfwT5RB8bXID3U6uaElmP5O4DhuAJwBdXrxH0LDxra.PpKrE_ydfChqDRK Hq1J.CqriMtpGQEqIuo2.XBdJ7oqPAriEMvfmJHIcfwU9CEBmnFP.YC5K4NnR06EtBcZdQN16epr kEO2dnNkuXTRJZdq81_FCrNQbqlmsXvkgc_4Pgsf6ZgbuSMCUHDr88kuwXVn97vbiCijpu.AxLX2 86OOYNmYL1g2LDClPcrYsnZRvyQDH9iDwcq98JSqoc1HSMiqrOxJ8Zd7dz8KhvqWOtAXqxLJwXAO _uq0DdCRWDLfYhGQZcYk3BvTj9LWFmds.0yDmb.rBoOtOzn72BDAEsQgOK0_C9HVjRT3ThpGIHli PmIhCxOV4_LcZP3i_sjZ7sSiEYkq9_BF2Of7Z6SDacsHn2.JvUnAArMpuFSj.xlaG_6ChpoPj4Vy WOBxj4JoPMb7nXj2z7uxCt84C18hZ2llyHF88JE71E6b63tfVTQNnpTZbPieVO1Q0fLrgVXEK0Tt dVd2Cg4hq6E2VWE.m6sMZe3SLblvdmAmFjkvGGb8ePCQJTJOaIcvwi8QAyIMKDhCQlaAW_Jcjlik a_lOaga0dioQKCFftnYY9xsAoI9S.fT52IovCFuLnWp1iSESYZezUvSrLeA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:13:41 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp427.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID f1f4781a1c1cfce2dfc25044e7a51d44; Fri, 31 May 2019 23:13:40 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] Audit: Convert target_sid to an lsm_export structure Date: Fri, 31 May 2019 16:09:45 -0700 Message-Id: <20190531231020.628-24-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970873 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 D743B13AD for ; Fri, 31 May 2019 23:14:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C146728D91 for ; Fri, 31 May 2019 23:14:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B2B0728D95; Fri, 31 May 2019 23:14:12 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 2874B28D91 for ; Fri, 31 May 2019 23:14:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726636AbfEaXOL (ORCPT ); Fri, 31 May 2019 19:14:11 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:44993 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726518AbfEaXOL (ORCPT ); Fri, 31 May 2019 19:14:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344450; bh=NLJ9WRLN3mqnoEKmIr7GkqEF3TZIbdXheKniGVooL5g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=XnD83uXYESVeQ+1hE5D1CQ2iWx/bCW/mkmRMGw0RsnTIyLO9/Ld9hKAUQymciimPiku1qMGPMjhR/3lVs4cYKYsowLL5F9Wl+QFIi1Gk2ot1fSKpawBIYS7AYWB7FvGF6vTvBTBqvpxdGYbxcbWUJnhZ56KxtZ/vl36mt5xu+5KJ/VJ1rPtMpn+y3/3NKEYRjrekBq1zMek/sWIq976gdTyPShCP+ZWQwztAg4x7sXyZi3UDVuz7HfS7sndsMnz7BD2NmM1Cbg/TAWKRaXX2b7MkAOwBMwxE9wEeIkeeW1/xXrPkVx+ChMklXKmYbIkH9YGUMNy4BxQfdEGsq2wk0w== X-YMail-OSG: iocqQ4AVM1nfTdRqietGrAkRrLNo9bV9t9dcn4XV0xm2HCxSKRlsyvEH5tkWHOF 5pbQpGggmHMAdARaohI8a.C4JwLdNN8l74BLprdwVxUnZwShWmhKaIQkVp9jozyNdWWcyO79JAPX YrPMDYtqJTRQTUj3fPma_mp9Ani7htknmAppYB0z9zdcoO3WWU51JA2hH1owKQ2VWyFHW67ysGUa 4tTvPc.aifwEiXvLjtOuWGGgR6fZJrpx_zolBy1cuHlOVmnSGer3MUsbkAVyjsG5LJqfgmZCQ3Ks VoewT.crhFqX9Kb4hND33GGIlSkW1DH.UFMvFCdE_gJKtTf5nIHTj5FpGgeq9XReaE31P_2NyenY pqWcjleFjtaQgyguMIXYdtFo1.vkauJXQDmlF1kjWhMR7fgIp39N71AjbjPMhqTcBJayQmEkM._X McxJ4EKm5B76Xq0mS8bPfVMQTL_e_wgn1u7Ynlx1vcirp8YmRColj.2XEn8Aifgh.zYisS4S_T0o dGOPgzQFujXwzG5GzI.hYjWrO2iYg37WwdU_xzWeg0tsvKggm6QgKIYJBbvETyQFxFlRPKZMmuoF 7Dm8TwcIkYxMAfWak2IZCOaum2s4Gw48UwsIIyLEYIDW2HII6rO1ombYnJ.QXfNyvyWu2Ja7HTfB 5W8_ftIx1NDwvjxtuWEuVdZgDi8FVPh.A3fL6_hHsyd6hkDaAQQNwQZNN5jeKRqgtw3uB9i_9WfD Rv5.CK.CxXMWXE_i.NGHYb46dxhLE12woFrCXyuvrTkhy0UDGy_vCPOL2xxuJJI9uaywEFPK7LYH wO9u6sahMh9Q9Zb0TYzudZ_LfCfeZMP70p.iSIpsJcvPVPlxJuY3T6fUCTArdvd4X30J.ion37gM YZWN5HxNCk0CvgQxFETgfIaXlMIAGhf.yDTQgSlu7lUMuK67NzqSCFhBuU4cNM7Tzh3wY14Vwbxk U1BRCAPoxe2VonP3MBaX21tF12iRxLXaCvBNgMXdtQbz6t.EcqQdYk1Y7m45ZFO0QRG8jMDSeVNL JVhXnh9ZnfzHT9gMEodfqGtV_2OMjJd82eUW0Vi1M5WN0cv9pYk3.sykCrxIZlRYwJtrhEbAcs3S r5O.CASXNqJh8R4gNF7juBmScQKMiX8KD2ZdvtPjnK8RWbI0RgpE.T0pwSdZh0W5rgwjOxjmjEqg qfcBlGdzhIsJ.l26NrfvU2v9kCVjX_cXxH1JGgTnuSCls4W8FcY3BDgjXgVn9dv4sSl7jKbbbVxS gAKOTbBlrgmguWumndTOBgiXiH1BqvgZqn8qWTASM5K6eGb.qT7RERM6A Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:10 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp416.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 36cce48665e985747dedfe39c8f2f209; Fri, 31 May 2019 23:14:06 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] Audit: Convert osid to an lsm_export structure Date: Fri, 31 May 2019 16:09:46 -0700 Message-Id: <20190531231020.628-25-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970879 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 5588B18A6 for ; Fri, 31 May 2019 23:14:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4710C28D91 for ; Fri, 31 May 2019 23:14:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3A67128D94; Fri, 31 May 2019 23:14: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 9124528D92 for ; Fri, 31 May 2019 23:14:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726593AbfEaXOO (ORCPT ); Fri, 31 May 2019 19:14:14 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:33410 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726541AbfEaXOO (ORCPT ); Fri, 31 May 2019 19:14:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344451; bh=WdnFJNhqMM887DyLRoNCsL62MRkkEDeoMEYJROIA3Sw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ahHpL4EuYR5RmK/5mqnxkuM01ebP0aiGCNLM/10C9TYlJgSkXdQJGRlkUvSr7lEgc91f17ddPoYsoLwFPIzCnBCSM5ZSoJeXTRBsAvDQVYkzP+4EnuIR2Taio5RT9alKsmY8PQc7Ddpx1d0LuiLg7CQcgR8fPx3SArj/Vd1wTHnV58dME0olwLmlof7SrDZI7Kv4sHaRcM3+sfkXf3EDcWYPQIt+8DxUbPrnAj+2DjssuiZjka+bi6oZSNrO9YnCnJMhI6zWpm+CQyCcf+YXUWrzVH8YWtHhMF2gKGbeCyftY2pXH+LqBPLGYmjUy84os4SpFLMPVJ0Vi+fAR82OKg== X-YMail-OSG: r7Swh10VM1mg04rC9EwYOUmWI8MNsWfLeo5TV6c1JESTFQ3BUwMjv1qRxA91a8V nWd96w.XK4ttHJ8zyyu6DkXaEO55Jk9P76jbEE8SmG8oBl.cCXivvMhOlLXwhxBNb.otPSn0sTjS EfwE9uNdabwWBaU1qo7zl9Mni8xnYLU1M8vIyEIF8Bw9SlFwNmSqMJYwuU_TLUyGodPBeshoUuOw 2ey.l2h9T6HLNUoZffxKfJLPglaXINZQNTwgK20kw.8knabpyfc7VUg4CYYEsvOJ49NQ7usV0shr FXs_CnR0HOZWOA8Z0LZrM1kwtJr0KzFqyX5M5LU5ukciNGNQprf8hftBNl_CFJpFyCuNNSoudS.J ym57Eysz2CpT8qcdx3M6VWaEvoOoPOzmOfiizWx9CoGxLwBXylMMTqj637HoOdgJkzRUv1msC7dU yflFRA3QMJFUM43JGMy31TzPmlvRzdvS5v1Vq91b1oGf2mEnruwJru1aRbMF91Qky.EEWX8GkuQb CvFxWELiKx7fWKG9646b1cgGNL.EnH_t8w0LPiUsgujK.3ffr7NDty6ty8KJb4IDbsvg7Fi7J59c H6zzteWf9etT65V_k76qaNmxVfVGZFCBUgGcJ0oUueCx7PPcLKXeAFgRb4NR2GXP1NlO.jjsFQz8 y6SUJ9wYEFLEauvgpZSRg3T2u5Kv8kErgIiCICFaea_DyuoaBlC9VlvgBlWJCKk7V1aWeFwLevHW 48AS2mK7JEBG1R5EmxRB9nKUO3PNyJAer4OPJT6hIc3L0pvMisl20EkVYZD2q8RijYgeZ3trD3Me TMWBCw9JPmHmdNkrzlFk3MwGa9bnT0TZV.12E5CsKxUTffpYpefiEJn_MOnwM9fR3K1lewc.euHj WwDBQH1ZweSDKEf_M5_MwQcHwjKemy_TKzl48W7IGQ2ykSVyI0bC8oiuaMDiZWRJctptPgXbcs0j A9oe8mirjMRVAne9srM7vS2mWtT5l1aA_Jfja__7F.u7VnDqRuKfDFdN24KFVo38AX3kPyzcaKOD LkOIU6aMtTByTGmHy1OyANbJ4qzND2.XMWT049O3PM20rQutuKZFNN2n1F59oxH234jjq_kuP3g1 LjSXYZNECu1pjozHXdISOGUthnx2IG3S6Ij7NhbZPvWAp1PRsVURTdn_YfLvinth2qScOC9aNbnX Vi3NjAhU6AvVuJ9BmiBy8mD7wVGgBi2pjEoKig8CYT0Aar5uWi.lD6glIOKDtjuk6Zq.m25Zaf9Y FCmKzriOftJYXkLvSpN4lgi6EM8kmRnofS6_rHtqMM_1pAiaHITOzvGdNnw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:11 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp416.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 36cce48665e985747dedfe39c8f2f209; Fri, 31 May 2019 23:14:08 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] IMA: Clean out lsm_export scaffolding Date: Fri, 31 May 2019 16:09:47 -0700 Message-Id: <20190531231020.628-26-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970883 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 1158F18A6 for ; Fri, 31 May 2019 23:14:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 015B328D92 for ; Fri, 31 May 2019 23:14:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EA31E28D95; Fri, 31 May 2019 23:14: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 8A20528D92 for ; Fri, 31 May 2019 23:14:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726636AbfEaXO2 (ORCPT ); Fri, 31 May 2019 19:14:28 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:45516 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726589AbfEaXO1 (ORCPT ); Fri, 31 May 2019 19:14:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344466; bh=+QxXCb9k4EN0+MlvBQu1WP28VNVY6EbCswDSvfqvDU8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ccmxFVpCB2X5fZTdglzjgqc+Ta9QU/awanROgc/gF7BHwN6SlOpfSRXhj+rVU10UqEeRr707tOog0w8HPBoV/s52hyLf0eWcT92XoM+IhnepIChaOTDuhZeB09220loAYoqptI2eGYtIpwlHDPvh2ZN3j7HnztyPD1Hzsdt+EVS/dBjzONIn6BeQOPe51inbN5yItvxn1+E+d4r75IJcsPWzesNdTsn77pZL0aze92HQ1MN2r6cO1R/kYG2lf+wZmkkWrY3Lyqw1SZ0eEETl7lMItet3XFwjnCKxy26z9OaLpy57b3vdK+ja/uVndLkw5nuCYjaVJPc0T9PRgMivMg== X-YMail-OSG: ZBn.6KkVM1kT1Ybk6yzFOXpo8qjplVJbfaRpNXcY8c66dkfwG43I6n2f9BUDnsm p20GI4AqTvEXJnDx7q3S.6kSRUBZTzMwsT1UrfVSu0pN6sB.KhfXADaPA3n4EkRtyKvmpKDdakL_ zpPpLFNfHsbzXGF5HPk2iVdpsUMTmAz81chcvJ42mvDgmixAr1T2NW11tqGS.i2iORL9RrbCqJLG 20QA25.2VqqOEXAwh50Sjn3xrDP9vJp7R7e.bvLnuGQaIVSa5bc3Exb0QuS9MV64R8VkIVOFSZtU OlcGfKHwsEknlxQRhagEbdSQSNDYuVyjWxHvv6pS8ELaTtGTKD4zDDpzEg0_g7Uj3QaSxQzgjcNc T339gnQXne_E5sc3CPd06AKItBWh2KbVTBjfUkJpi_QrwZBSdpcca8Nmx9QfnLC10F1G5FGfByaR aOoW47Rfc1s76qFfhfo5aQq4BUkQc.IOeIqXWnHxdnznD48kIjXHvzl74NxoJ38d0zH6nCSFNRFm XeUJuxoXAHtL.lK6ndd.Y2KXjcwBVwl35PXiMw6JEgFwO.9yj_bR37i0VOgtEj5mox_Z4M_LRIiA HRVxV7biK9F4sMgORD2O7CE2M5V8C75zlwJDtaB3t9aazYniC80K2bSWRi9SSZB3xE95RAT29Kx8 SukhljbgCvU9xRnsfxB3EAQA8.LaRGiSUFI6H6rXiL3dgcIzDfvSCXIlxv0MhJ94YXt7sG2ERnrm v825kjSwSD2KF46NqzP2XGiO1yupF_iQ8PjVKYTGsJjb6dJZV4sIuBfXpItCsW_Q5A8FKYZsE5MK qpMxOm3dbJYFjxmCTgeh9A2PGEoj9YLPGkUox57u5jIGmvjiioPHmHWSLGFn1Hqq0ErEjyqY0AmO GIOsl.SMj_4XQFT5htZK7ShWz2BJ9C3pO0F8OO7deQ90K3k9mAQdzXIi9wEGH1YSTqeHt6oVALme qY36U2iKW5ZzqNr6PeYRF77EzInX9mwqDOqgi8kqfmPLD8SeGNLTUkjMLfpsJSlVH2fq39JjSkMi fX0YnSMC96hkAA2Zxoog6rq6tUnOHI1VfKlwODf8USgsrplMCXRGh1lpmWR49vWfuPZLb0adOC2u YYM0TxhlB5cywH_9Cx3eXZ_QRDvrj8qmtLxRHtavGJq..CvwNI3yt7.ol12S0J56HG3Y7LRTtpRV AAePfR_yddFLWIuwHAo7YRulox3u.GxtSim7P2jV6pDVZcDETx2og6.H9dbuhKLd6vICadwdqWjk fKgOx1zqhyQsPaatqePRZTspRCoIyrNLP88fAV7KX4WkF.E_HMlTHD.08 Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp404.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 93f12d8cf3f8020e3b32ef1a52c7253a; Fri, 31 May 2019 23:14:23 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] NET: Change the UNIXCB from a secid to an lsm_export Date: Fri, 31 May 2019 16:09:48 -0700 Message-Id: <20190531231020.628-27-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Store a lsm_export structure in the UDS control information instead of a single secid. Signed-off-by: Casey Schaufler --- include/linux/security.h | 16 ++++++++++++++++ include/net/af_unix.h | 2 +- net/unix/af_unix.c | 9 +++------ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index e76d7a9dbe50..9d8115b3d679 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -100,6 +100,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 diff --git a/include/net/af_unix.h b/include/net/af_unix.h index 3426d6dacc45..c1612d4b191c 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h @@ -36,7 +36,7 @@ struct unix_skb_parms { kgid_t gid; struct scm_fp_list *fp; /* Passed files */ #ifdef CONFIG_SECURITY_NETWORK - u32 secid; /* Security ID */ + struct lsm_export le; /* LSM data */ #endif u32 consumed; } __randomize_layout; diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 4d4107927ba2..222929693867 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -143,20 +143,17 @@ 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)); + UNIXCB(skb).le = 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); + scm->le = UNIXCB(skb).le; } 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, &(UNIXCB(skb).le)); } #else static inline void unix_get_secdata(struct scm_cookie *scm, struct sk_buff *skb) From patchwork Fri May 31 23:09:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Casey Schaufler X-Patchwork-Id: 10970887 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 D4C4418A6 for ; Fri, 31 May 2019 23:14:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C587128D92 for ; Fri, 31 May 2019 23:14:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B95C528D91; Fri, 31 May 2019 23:14:29 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 6DE4028D91 for ; Fri, 31 May 2019 23:14:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726541AbfEaXO3 (ORCPT ); Fri, 31 May 2019 19:14:29 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:34632 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726643AbfEaXO2 (ORCPT ); Fri, 31 May 2019 19:14:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344466; bh=DXZobVlHba7NLExIjhRRZRkmastZlDIkiPrs42J8njM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=sgcBv1a+a9Um7OCnTtseaHU1QUGUadAHTYgFYFrRx/M4w+cE5PxJ95F7GirKt9GKsrYDDsooxk1nwhmv0BtyLUQ9Ra590GVDOYgLXXHU2aygntJfUBTAcT+NwIlX7qGqsuqu7khCmlY83qVBwv3ScJzwr37qlBurP4ag4n5+whg1sxezdjQaI7Cz1eScJVRprANtE5BISC4fxDBSLalcntXkSV8ixf2ncj6KCV6z3xjR/c3rZ53J2cwKWjVW1H/TCtwnjD5CQVR8sMcBC9t9GnVXKbH8f8CKAauFCs5uLsdoHr8bPS2Qj/ozaXHkGJE+ga2drbSae+47LRx7v7TgBg== X-YMail-OSG: gk3jNI4VM1lRoA31vc9Eej_zJgfL9EaXtUeVuPY9pgSXQW7FoyVal3nRFv3vxbZ ACPfQ0CmXQu3tNDy4LSEeTlSrRC0uUyDjFHXkag873Me3.gurwsdPV4EwXpNxvX1dxVRgQeONdPv R5BEUU7hqIoRdthq68HA2Y9_FYXxzG7hw4l5hhsHTnpTTwUC0otpgyUaN0qQQICGApfHg1PaK1ko cvJPJbDmpHtfCvHYszyfuQ4T.PT140f5WD3ctr2gneYD6O8PDxd80gt.TDYxT1OlaJw6YP_YCWz_ cxA12SZtoDzmj22EdMZ3JAgoYQsJGl_8AxuZ6cKXvvipNxE6dlTEKz33fF8uKKEcpWbNFjVQ5u1L kxVBBPbDAjumjRYpVH5ckMNbgCPZDnPgPtOaLzpY5TrKsO9XFozegbkU1A2kXtFpsZr_xbW.ESxy hBLT4cTpsMHRFNN9EzZ8pIU2Ce9zE717RGsRiA4C6Dcn5U0c1sI.vB_ViTgG1.jFl.ntcvNGQdPA jWabgHE8hBwLAvsE5Lei865Nh7DI6QzOQJ3SVisgFNfbB5wAbaiqRvfRX8M2Ur4mExLYlHmFRuSd ylosIDvVAN0eMk_qyBfaC9gR0ELJmozAZoXym9fQ77DzdKtx7es7jXAKrvRJGVkAq6M8UUde.Nhp yMQ4GSdQdeH87giq2.cHg3HI4NxhZaVBVoG7ls19FfTODDW70LClIZ.tZR31t4NW80_zUWXDdetQ vNmqpSJ9E0pxj2V.MBXEecdPuxtfZ1ch7Ahvnt3LlJ5DPcXsk8KBJAfMdQmkF_1_J_W6qVKMTvRX wOCsvXJCzFyoU.mqQazszSvZLJw0f.WzLXFkryR_gCO89EBO3jSZ6zaAqxKWG38Ype530tQkKAuP XGrPyc.hQq1fDQbAbDHBuJUU1XTrT3BtkPLlptgaIYNmLgLKXsy5shFv8ISBM6TNrv5GB29q8w09 dabY8uaSUSd7M7fgPD0wUE80CRRJsHRb4SClJy44AIn3VD6P2B3HyA3F.fDeShzXmZOOQlLymOMZ lrEsIXYVJvIp5eou6tE1cScT6N_nclOjf3iTdkyVOztLoQqCxOOLujipZ4Vw4n95o17B2pGWr8Xp 8DXatato7wxq8fwkuvScSMZSDnIchMxdRUFeXmU9Fsj.hSr_qD2T4iQny86qpAxmtbjP9UhyzHaH Yc2JIuRaK6PBpoSCY6ereEgnrtkZztmf8STLoSmQSTFSXNi6ZhJAH_L6qm28UEEHg.WTfXZz7Y6y 6I4SaDt_vapDimdDn9.PKdkD5xJmR4hFh60kVmaaRSCC0aMyrTSDahr8- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp404.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 93f12d8cf3f8020e3b32ef1a52c7253a; Fri, 31 May 2019 23:14:25 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] NET: Remove scaffolding on secmarks Date: Fri, 31 May 2019 16:09:49 -0700 Message-Id: <20190531231020.628-28-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970889 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 7DE1B6C5 for ; Fri, 31 May 2019 23:14:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6973B28D94 for ; Fri, 31 May 2019 23:14:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 599C128D91; Fri, 31 May 2019 23:14:42 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 0499A28D91 for ; Fri, 31 May 2019 23:14:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726684AbfEaXOl (ORCPT ); Fri, 31 May 2019 19:14:41 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:46834 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726643AbfEaXOl (ORCPT ); Fri, 31 May 2019 19:14:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344480; bh=n7o8QGFhmUAYfuuVtS2cjj7dSkuQxOxyGbWYP+SBOLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=IStbCO8bdnEF/XKvB2atYwP/fVraaxtTrR/UpnVpTbrE//RJh4DSiNrKEopQLz2ZDfXhV5HZz7dc9HzxWOIvdYtLOiT/9YdRUNCX1wS1peNCKbWhUqLFJI7YHh3LxqUAd1uLwZumVVAHlKh52612ooXLXPvU/wShpXl2EzHwMQ7XIBNfKucBZQ3N3mjCN6TCfFniBGROPhDwCM/skGvcB1zso5E5glwyZepsouKFAmjdmttiOLyDTEbaC/lVtAY10C9x6Lj90YBG52PlVLCqqjs1Bvg/q8WEdhutPkPB5PnHtCZ82tjNPWEz1xjYFglhwLe8tMKoi30FNHzEakba0Q== X-YMail-OSG: YIF4_fwVM1kUCVz17cTqD8HXQ5tm9gS6P1jyEX1dDogKja5Du2dhVOFfDi_XUCg bUYRREeWYng_FH89uJHAXNP8X.etXFNQnCJqklRRaTC3DwgVpKHUbwmcILyw6kD12JzH_UGeSzBm Gl7tXWByxRQcarKh6q2MzDBs.mGvbu1h8rZ3gub15d..StgUiWKJm_KSehhum_BO4.YhqH7PYFuz .5FtCzhHkvHZuT.6t1YwHqRX5YrRvpY_4JAt7ioKcJRrDDsHPhfbA8kFY7gCKcMF7Zs9kIuDguqQ kMtJTXYwN4DVChaHIFsYKDdjHKwLdQVHZgbgWs5Maw7aqLWykbTm0u9G1O3kx0ZGUl41NSVv6G4. 9m6mID9qXj_kesD_wNXDyuvdOk5Mc0kZagc0HURxkVbH8_HtluiJA5UQhlKhWxL9MsuMUKWVBWVS .d6lxDfPT63xC8pl5tIt2GFw7QpRDZS4xatxtlyvf9zKHRQxziCozj8Nsp76Bj8zTU_8brYfDnJu w8Rcx96S9Zu_oe3uwiN9oGTSnrxieOcAMSDQFI5rHeG71rsBVr1jrWi_KvCzbu2i9BtiV0Mf4_d3 NR8Qe3Hyxa.62pQOWzgH37pNhZEFjBo71DuOTfTth1XjCkkQkkmUJQ7EzUN4YWYk0M1wcPDJdwX8 DcyBFLXxIcK2n2vz6zCIZHZHLWivLy_BpGpcEPkSsNgIw39ctVvKlrzxD8yv.8dWKctoADouOQxT pF0sBEuGttekbJUNJBnQWt0W3lvewojVytvfqzv7HWJaQKzzIGZLlg2NS_y8GX1TuN6jwBSxsvpG qUTlJ51ZJjGPYwsXkAvtAncnOF2lV_NmQ9FZGibntt86epNdbIel1A_4C0OV9c47hEg4qp41HRtB .ulbXFCf8Cm7X0W5G.xOZwRTfJggolRQtfkDEI_pvZ90efnBh9psCcXOIzViR79LcCto2Ixu0E.R bYGgGeSABfgcW5vya9xQYiCfzb6N.sotRoPBQmf_prQ.cWKeLpnko.461IZf0VfV_XKH5MeX0Ovy uwZIurq5f_aSRzSZQSZV7Ueh2lPu_ZKTK3al5FQKpNHZ8G9lDd5QE3pcPnDJHlXUYIw09kuD2X4z KOlVxtkarr.lRc_4kQrH4VQE_BnGYgaKH7QdlruxHhXCEEr3qJ8LlZnJHo_meuyqEEtECVw0tzZI KZTrybAKrANJqvlimCPSsxD13qlJxoDLlbeqZC0rEc7qYvKFX.lsavsnfyUyh9cu5zuy3P6cIY4D BoKBpTQiPouH_JJevP1KOI6WTGptX1iTwK6nnL6GwXIHZ7KzDUIjDHc2v Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:40 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp418.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 0d7978b7ccfb88ed7fd120b8f1db518f; Fri, 31 May 2019 23:14:39 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] NET: Remove scaffolding on new secmarks Date: Fri, 31 May 2019 16:09:50 -0700 Message-Id: <20190531231020.628-29-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970895 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 B925C18A6 for ; Fri, 31 May 2019 23:14:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A7B8C28D91 for ; Fri, 31 May 2019 23:14:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9BE5E28D97; Fri, 31 May 2019 23:14:48 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 4A86828D92 for ; Fri, 31 May 2019 23:14:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726694AbfEaXOs (ORCPT ); Fri, 31 May 2019 19:14:48 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:41036 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726643AbfEaXOr (ORCPT ); Fri, 31 May 2019 19:14:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344486; bh=KYlupIPcbLYAYHDyLLLdG0LtZrXeMUYE6GpZUguvURc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=A8bLphXAqaAANetljJULkAGdCmgl19ZdVRUBxfbXFZxvUrvl9Wp7RgMIrUDPT1cpzhYh6oEmwZN2BRSp8jgVc7tZUSuGY7JUNusXOrVoTJWZv+h5JpgJLS7ijqSpS+rRqXKERsXusq1zbZfAkSS16eVD3H+zsLVpa/+2e8/LKDM2OKmV63zMplzHLRGWoMppm6OJUTFZBNmmZC/VMic5Qjabkopw2gyYeSYrwKADGmazH1MfUyhLIGUxEyvWWQZ3hH86UPHBT3h9c/0NaRLG7IsF8O/PTNhfHmJ2tpcrB1Oe6XXh18mVNQ45Gsj9Yox73OQr0nMr3wXR4QG3+xmYSw== X-YMail-OSG: m6CpCCoVM1mhXXlaJkJ10R5zDUWgHEYSVbivIY_4NXazI2pKnfkCeIa52oArJt1 fx9eBj.GlTyLN3xvCYxxF5FqvRNP45E4mDKxAejkJNVJAnN1EtGs8AktVFy3KW0f3d6Q4_x7nIgm _hBViRUWrD6K_snDrmwn3gerVH2vAR44ziwUxAQbn8bwwH1Xn_M4NACoOUYV_4Zr34LKxtu1DEAD zFT0sbB3BawiMyfj4V8tW4ZIiCpB7yReLC6OK00Qv.ODFeEuEsiGJo0B1kV9kdq._3TZFYnTYJ9n 1m.FNnQh0YYD4FaJg4IiQ1Z25mpF.KMevv8EQPCmhNeqNkrMeqkJaX8ouVw7I0X23I9RDbl5h7Vu ixASO1nnQqjfE3QBGr1.WWkZMtyNDmv9ug4XMlHNDzTDLnsOj8GrLJzgsBH8tc0PsjRucCeh17Dz 2gydBgDVDLKBhY_Ktg4V5nlLsTP8D4KfsNp5Wivoz1tU4GLdiSEpoMqNE23CpUvGIxqWBTfsX0Cn 8oNhOsoT8o0naDIfBrK.7RWzM0QAF0wxo1qWSTOY28yJLKnEAkSBKcLSeqbAXDlkQwCfztBhl.8_ 4wwptQ1Ak9NKpGXP2n8YmdUNfZDVDwHpRe4BDwnP6izCBNGGl06SyWnnkeUJYSRxQ0jjf1.qC78F PYfbXNcI.Mru5kB0w2vAz8Mj.QHrwublbX5NgBUUxJgmA_Qj9Gsk_jKQ31lUglxl8hAAxMBMCsmh D6fzKzTdKVlWijmwUnViJqNLPXvkc8oWMBPshwIGzcJj5OOCYzK23IjGFPGSOa97SKOP23AbwhQX S18vuZN8I_.x8UBmqTMdC_A3YiHovMhkCIk.4QJBBAcHJuAXHZ71W_DARFBPUMn2zSgYB7EYn_qX s4b88IcJvnhcRBsBBjYZ9ZVMVjVAvKBBwam2ad.mp7nEwulk6qQE9MkVeKYfBeD4pdWmxEnvimkz n2AO9Ckwk3kvm86SHEw_VaZ.Isyhi4kpLskmyY9XHTWhRwshObu9S3UHXUsmFChfv89hMvWtiYLM on4sEc8FdkhoYQKn0K75Ee4cs6IIzzdlL2D9fxJRGa7sZ7wglEycaEu3aE8iNfhcHliiycZULQI2 4j6dHLE_9p0Zp4llBh2ooq01IcbNa3UP15QkiNGkI87J4YfEo_wSYBrE0esKM.hosn9.WmGVq9Tw L2x45nkmypu_q2Qg6zR_xJJkyvLjLl6k3SAu5EC2DNBIxH4Be4rAL0LOqwDHX7iamsBtwRgwT78l .fXEv82zrhpf8QlZCWn2iEhn8cyZKUmOI_kIPT04RfPT69q4glC8CtyA- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:14:46 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp418.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 0d7978b7ccfb88ed7fd120b8f1db518f; Fri, 31 May 2019 23:14:41 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] NET: Remove netfilter scaffolding for lsm_export Date: Fri, 31 May 2019 16:09:51 -0700 Message-Id: <20190531231020.628-30-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970901 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 BA0A413AD for ; Fri, 31 May 2019 23:15:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A605E28B54 for ; Fri, 31 May 2019 23:15:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9A4AD1FFF9; Fri, 31 May 2019 23:15: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 5C41F1FFF9 for ; Fri, 31 May 2019 23:15:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726589AbfEaXPO (ORCPT ); Fri, 31 May 2019 19:15:14 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:44275 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfEaXPN (ORCPT ); Fri, 31 May 2019 19:15:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344511; bh=ru3IBy79wwcnAZalZt5K4emNkCbgFnwqv7TisHF5r3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=k18jLQ9DMXZLFCbrNYYR+bKYB43gvUoLpntNGa4dTeRdSriMq64uFxCOs+HxaOV9j1Wf1K2Zh6KVI9WiZDzalCDlw+7JSiIfXZ1J8T8J9fQymbAdqH4fukiVYDB/bifKiH1OCDH/F+kYXImm75GhTkdWZ2cgIyP2tHGQNycVUoGWt45+JqlcslqZvsRhZF7JlRITr95xbzuFBaQGcM6DnD4XBnm2zUSuWOMES/YEda2ZA7tYeSHUfEfQyr6Rg3g35Ph2pK5NiDz8O1tYDdU3wCe3ezCZ1PMJ7+2MDhJS8umV1UJXx6dzvub9yaCru3oai5cn/5i5KScsD0l5UF9fdQ== X-YMail-OSG: VSgf3TMVM1nbuSGL132Jo2bB.hhxC0G_c12VJMOcYzHj1fY3jrneJcdWhcsvTYm 9zzP4.YVvzLO.T60Ye73POaZpgyYIGIgQWU1eDJjQ2kxpAY_dkuieRwmzLarf9MArRZ7tMBkgpJz r8bepa9__3OlpcZWvC5k863YcG98kA75ex5N8gxPkNCqJsjzp617wziTmmZOjBusjD_NQAG1chef 4YZnZA1.cwQnpA79O8LYnIQ.nzI5rGtfogBEvkOKwbPgApqrGQio1lHwPsZ1WXcfKxyQ.cRd_8Zl wepZS3s3t248xniQdL2nx0xIlM47GH8EQ5qd5Dz3nLVlv3unTWd7e86qDgfAZ7tNiUUQwZYcrNzx 4OwqzIxLO5vA5CQp14gLwuMt3wfhD6kR78jlgxzHGrvqvU2IFrNGnZ2Ykynoda5NTe.LP_nktf_e UZ.KFnw8_WYBQainOvag20DqH6r8wsxz0qQUet6aBz8REMU7p7JkdlNcPlIkfc3.wUDZpgjJpkVl J4alQuPr9kCN4NNMn1UIH15aj0IqZ1zU6gbbS8CAWquHxgppqJF3UuFg1vX6tTBQUsF_Th4ezsJW OfLZowgQ7LSXCbN.gWlQw3ve0NR77yQQ.ZAENFJdBliittHUnOyZxJtr1buELmVq4Gm_qCFhF3Mj 9l00fhaH6e0eg6gleB0snY3kNQFO.fbRjeZOj0BUl5vu1qTmw3.an4o0onuhuD.0Ou1hQeX0bVY_ _ohJ4_p6HbcrAknxDaUUtvIEsCHc9OEi3kDMxKfSKNs.gVJaUHfm_431_hkgPBLwTYZ5..yx0L5N WT0ml9fNLltY3L_usLJ1kJ3yOyRI0cC7jdr15pZxH.Be_5Ktr2gq6m8MSDqeBpHpkwROVQq2y3Cx ssP8ioGKiWkLLB2B6CB9CEac7jJXB4lbou_BbVfMvjOCCLxFK53ocPgirOVmPsXGiYNNwDjbMK_U tlSCSSEXab9sz0HkYy4QqjCXLKp.cO3vP.aBqCdqCVlpMiSQTkt1FbtIaiMYila9VGfiV6LLUp3s hN5aC0ACZt8JX39J1hPRkcdLYFb5VY5by3Kchfivk26VEHB7hIYPi8CYF7N1O3UHDU2pEMvWLqCx .suz.1OfYfBxqnpasaC9YWn2_Gp2nCoO2.ltaQnl0rMineiZkZ6ocalzwP4gg93n7kPqCkFUuAoh F0axHyb442Wet1t7ffX2qGnszNd_cBImftIm8Qj9nM88Bf79Ju3.EZw_gNNJbE1pNpRZGitUfjSD gJjPH53coip4HUkB5MSOqSb9Trd4VJtyowY0xViWXGsKbM_ABEfzqQS3lyT2OdgRT4yw- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:15:11 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp424.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 8bf20f07042e719b018df2a0e547b97a; Fri, 31 May 2019 23:15:08 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] Netlabel: Replace secids with lsm_export Date: Fri, 31 May 2019 16:09:52 -0700 Message-Id: <20190531231020.628-31-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970897 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 32A93912 for ; Fri, 31 May 2019 23:15:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 191AD1FFF9 for ; Fri, 31 May 2019 23:15:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0680C28D95; Fri, 31 May 2019 23:15: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 A140628D91 for ; Fri, 31 May 2019 23:15:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726774AbfEaXPN (ORCPT ); Fri, 31 May 2019 19:15:13 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:39076 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726762AbfEaXPM (ORCPT ); Fri, 31 May 2019 19:15:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344511; bh=gEWZCQzFlqcooAYwsHr2Nt701eG0L+I40RIrEVg4i3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=VFQh+v7XaqOAF+HyWFBkExT1GoJAvq4Rs7w7ZRgYgPWi9XUGbCuOHkTGIZ1fWi0UdM2sBfbsWIDXZ2YxY9hbzhpN+tjJZUgpX8lkwJbiRpS/kya8kKcXB/d0CNrpV6QDk8A8SBmqvPWc8vePSnev7qGY4QJ51P7vd6JWQE4jyPmw9DCaWYrRTHTo8Vr3fAG2N2GMiZtTuDtP1WuByX1pL88lCgmUUvBL6LXVCS5K0TJl+4EnrRuXj1Niyn2w33df3hQXIdqwdMtyilQchvkbBoltBeTozljlge5LC+Ih5B6hl/yi+8QecIJ5sa2ByDrdSI+mxXLhGL2HKjcx/crbGQ== X-YMail-OSG: VT4V.OkVM1ns5cdM_cpsnqwloGx6K_FpJQYtaIbzfGozTY4.WdeojANP1ASo9ik CiR3_kfUPBCrTkWyxddfr2qIBy1ziy_QZvM.BSO3fqS7K8tLD_y2SdQMQuntxL1I77XvQaQkJ_Qy bmAlkGtj50CvKIZSKbh.NpuksN73WYAHj5IuvAH9a2pRRYHEYWLNN4h5aftQSryspqwybQZ1XNDN QZgPqZNW19BeDxlDSk1Lk4qM7NHe5D70IWDGb4VjxtrIGlsxM0vEOlTgBpq0pB1tcQR9sywJfzbL J7cuJrOkjxT7v1ZL2kh7pWhT.ONfzwr.n_Z.S4y12yY7vy64qvq9yzFYKWD1463VYAXXFERpD_GL SKn0K_VF7apfLPOfIaRRNlVH7gKdtB3I5Vo02VSbCdrlA4k1OxWPOSJ.MtTUCRZu9LHEa6GsNWem zcsOmV7iQPQX_GaZPyrwvXyA_H3sSQBAE8kedcrklsV8W_0kFNbdPnCMLgn2poVDgIAtFSZT5_69 ygYVRxHKQDbeqYCisezpr37.HgEtuLo1s_ZkGpOabxj2OnesuhUlXEU.3bPw3gHbNO4_1bxMq2Tu _.dI8Uzds3T2Um4QiIXcRioY_Zb3jJEChpGJFfOfBMcHDFbB9WaKfaVyv84fB4TRzJ5lirt.HOR5 LdCTBULNpbn33rRsHF5GMOFO8DkZFI9Un4S_uxgcU3ZcTGOGhM0fRIsP5fNAFb3LHvu8jRJWNnM9 K6X3jbAT9M4LDMi0K86sBNkBUyU2ZoBheQtMwjfvn5vORqKLSt9UUPKyUgeJsLmkfOJ.g3oeLHEb vwhZ21_vsMo59ejN4deSiSHBiOI_acz19g0NRCY7V9yukuQxSC7F4HNbjg0E_Qty7z8zaEY_o7us KJCaO4zVjcAPwXPcSGEhT3s7.ms_oJeyD1VOkp1JVFRu7ksqvKdlqPVUlJd3KYG9noWJMSVrC420 QIfDF_aInOwVjn2eTolL8HVyAmdfTSBSFvWNeH2FSvMSeJKvQgtQerQ_Wfi9t0uU5oAcuqt3Wxyq wH8aKsx8ZkJiihGbhnXb8454ZMqVhAhD4PvFvMNCGk6NWwJ3yId5wGYLcesvr5lUNEe63bpLCE8E OfeZDBQoMIvKL9yypQEKLq3eVhphLuLCf0.B0xF9YLWVbHvSgROhs3MeA2VbUDMWA7UqO3_R4Q76 V29c24_PjQx1R5kxJ4b7_SSA34wUnn3RGsbMHv6UmRNobH7iRRFZzlOV6O4550XJrXy_8w118232 RjToLh9lZ0H6T_8PgEgp7yYs8KYKdXR6YjS_x02rX0Relil3O7sUiUsnG Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:15:11 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp424.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 8bf20f07042e719b018df2a0e547b97a; Fri, 31 May 2019 23:15:10 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Remove lsm_export scaffolding functions Date: Fri, 31 May 2019 16:09:53 -0700 Message-Id: <20190531231020.628-32-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 9d8115b3d679..dde36e850cf0 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -116,49 +116,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; -} - /* 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 Fri May 31 23:09: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: 10970907 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 1C29E912 for ; Fri, 31 May 2019 23:15:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0695F28D94 for ; Fri, 31 May 2019 23:15:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ED5F728D95; Fri, 31 May 2019 23:15:53 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 9D2AE28D91 for ; Fri, 31 May 2019 23:15:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726741AbfEaXPx (ORCPT ); Fri, 31 May 2019 19:15:53 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:44164 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726643AbfEaXPx (ORCPT ); Fri, 31 May 2019 19:15:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344551; bh=cOt9caKD/749IXNAg082OZdZ8wyzsShJ6Dne6L26IXA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=mv2iFgJl+Md3hSgZcNjMrtg66euZh7uR1Y9OQ2VJr2MdDc5bVqM3QX3c0Se4dJscZ6ILAKRZoztTYbaUwiv91Z86iVulsTGgyBo5UaIcXeM2YYhrhG7m/mLm6b2vjno8g/7gzddoADuu/x/lDaEnypm/EtBq2wQUCsq49r/AvKEDbJEs7TUNiIC4GUGYKprsSOUejwS7uULiUsUs2MHBNn/Nsu1l71Nb8MNT1YpwlNz8hSRLKLMo67to2/Wgt536mMiqeggEYbHdy+Pm+8MEHoB5f8siYqfv1VTWKhV1u1NtIoiB6xmb3cgvN4QMD7/nOJK/ckawrL3XFhLumEHYog== X-YMail-OSG: V8XuVlUVM1l87kbiC6kIMAxkxw5rNIkmZFjajQQlaipOuNvGbaO2FWn5DeXsSxa FAqr0STLZRfMyJ2oO1f._jjdpH09CUUV8zUF_ftiC4uxpDL6w.YsWktnxzr.LI8iQc.rHZkQfU.z PDJab24Y8FG5vnArN8vtTAhisgWQiUM3roTDtVYU9_dgFZogR6yAa_0i_iULNHu91F22qJvFWxxK gn5ovtAWyxwR_jxXtPrMIXLdkAYXZd8n2XYsC02GwI5sfZWBNRhFkieZYcvDvSCp5DkB9ULIDK.x oS7OSs091GtJncCc9dn6XgDfj_MAZMIhH0mf9CPGsGkNyC63_PYdr4_.FuwCbiElu62muptsmn.8 3cACjtjY9v.8KvUj4eUGk3iTM_gNb9qVIOy1aIcCWMmxET3il4jTP7FLbfo2ppMKsafm9oZMdD9o 0FcmVSKGUa93BAa7_y_dkWJIp0CCROBjKU66mcOZ1qMWA3njlVYWUj7aU1Q4htst9km4TYFhnp4f NutsLAB._9e52Nxn0MuOfyPKDH3.XoFIDsRFXkeY_Wsz6qe9zRjWKfyFo9fp.4HJNwlkY4qoIKOG OdLUGK294OEKZ8nUyAa4vnoK_di0OlVME7HY73TdYNWmNtEfmASsoMkzdOiomig2kw10Za_5nzav nfVFYg5YshMWcD4KImdHZyXVBDW2pS89P.mOT2njf70q_hX0qd7sHI6v7NBeW7hpRylBJZazFrLT SuciOg1xIdlOdBninZ3yFJ6VsxEs57N.A0Y3p9xIpyrMWuw3KdJksynuMolfJcl1anx62T5mqgnX Ol7YUINzoDVr7_0dZP.te91W1yTssJlxJX4LJyoW3uZn2LHHnpSN589YYsln0m5PsmbmJgddefk5 UwqQm7nRYYJfh19vemgmX65wMAjLa87mgbcct7k_AjbvKDdJAncNttdu1gqFVrAIIHcrVaWpCo8f Bezeym9rnWlfEEsDdoXsakHfW0dC_o3b6yJbm4q2NSP6gDsWP4NKTuqIc1IInNelzv90LY79b4M7 Cqu4ZPazK._CYOtakbesQ0VlwvUhcBFY8nMRVt5Lu5OOsEsJxOt8.xR8Hq7PCOZjpi8u8BXVzZel umHv2LUbFeCpVl5dwiHIpFJQNQiKGYZXB24i2II.glCGJh3wVgaLbcXm7zLKwiOjrzYhs5frlxD8 X7FJrtEQZjnd..JtEiK.5oimA9V36Qi.U2oVX1Mm7f09Aoc6fzW.OiUgoouPwQqWz9azdf4bkAat O0vfHuLV_yfmuxLYGToSN4H58O01BJ6cxt1rNVsPHnfOkTpYn4b7XZ3A- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:15:51 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp419.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 4dedb584d5bfc5b80f3c45100d9ad329; Fri, 31 May 2019 23:15:49 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] IMA: FIXUP prototype using lsm_export Date: Fri, 31 May 2019 16:09:54 -0700 Message-Id: <20190531231020.628-33-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970911 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 7DAB313AD for ; Fri, 31 May 2019 23:15:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6DDFE28D91 for ; Fri, 31 May 2019 23:15:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 61A5128D94; Fri, 31 May 2019 23:15:58 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 5382328D91 for ; Fri, 31 May 2019 23:15:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726719AbfEaXP4 (ORCPT ); Fri, 31 May 2019 19:15:56 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:33288 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726520AbfEaXPx (ORCPT ); Fri, 31 May 2019 19:15:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344551; bh=XFEQORQN/Rrt9xNIMHTY8NF01S7CWObpcTiWCO3b0pw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=LIwN7w55dz42RE6UmMDr+E4rsa/HlJ893CQoa4Ij/eGJCZ92ryAi6z4nT5gMGMNW/DNznSy3i647bWsasNJ9FTyToJaV8zLSr6Qs5OsnxlPpnT1k2dHnFywwFOK3DDFL2k3t5SQsYXgT30cOhfxJpxbXQ07AT02v8mEUVEYtovbtPuWOBnO44/txDQ0fPZIJcOfSL2xjzhNzC+dwt53QBhDGUzIugb1VbpwXQAYSOkP5Fjlgyhhpr9789zg90vNV0LsmJX7zfuM+xEH4ZNIbZSKtjss4FF5Wvq5BM+/zDEBX9PY+z1tvfjl0yDUh/RVbNh7Ytb9BNCLBSmI44muz0g== X-YMail-OSG: SdkwCM8VM1m_eaGR8yW0FV2JQYi3U9hNb4WI2M4Zim6PZbUPZGq_fK0yOudtCV9 FPcvo_qaFEkfmGBJ6ZBdzVWFzP9OKp3UVSjmvc6dIxvYmE_BGa7Lqv_zs9wnmRT5F4iskMiVCOqC piSjKDtQUi3ST6Has4c_XpEEpOMxJIVgqzUzGk9nrnl8mOpo6w7W_c52O9VujVbWGUzrzLHWnWmZ laRduDr3mJqsY7jBqq7sUWkkIXF_EOBV7CNAcf2cOdVbe2hmYiKqYy.oz9fXv08jKcwX.8rfAyCX 9HoYsEfsrxYyWhPRqjihtotf9nORE7l.inQ8WtqxGlrMw.VsaZdQMI9G4UmOXl29m4ynZTrP32gY c0KHSG2DP5FPxeBcn.8QHNT3o.d_TXvvsg64EjwzgWS42BX11NyR9QTPq3MUYOfj7o9m1jVbDx13 ygayEC8oSL.c1DIX3vz4U4nMSWLqQP0EWe_Ak_y1kFgrQdvc8UHMQwyThOvTFuhFudxF_cKUAVBH ofw.jMi5v5vh4TXlFGfkKcKMJNvAPTbPv8m80ZCIwN9vSHztffwmro6G8qKCYNc8j1yLYg231kc7 wozGxnLjOo0Zh3fVlMxvX5i0Z4MleWUnaM7LISlNYrmP7qr4j4yl16yNBSnNAcTbtlglpWP5PrYa zOWCi.kWF2RwWeMQrZ6xbWISJ5kZsaI82U4MxRz9xmAEISDmVZRwvMAAHdo4P1vnwVQXU0MhSns5 G2_ts5de1pzoMOalB5P5QocaEu.QZUy0kxXKH6EI2hIijoP_RTznElFzqdyB_LlPKW5GxOJLq8hs YyWiu_irHX1P1HAz5eg42.EMeW7Ky078VEEBrR01lBnpfmC7fbslWYqLDCC.gRpyFgw7.MxW.gXt areoAQWzzmMO39UxZby.4gTHfr_drgXQP.G_JWQpmI2y4tDS7d0G42FvQcdmfCADUbHTwN0dd4lj Snz97BHznBCB2uegeNt7MMdxGjr8xgqbkYN3rfXVwYIfwCT88WNGeDxxQv3SkPynk6fs1qNmdXDb DUk0XNP05V_vmuTY4xRqLvyi6VBSmv.hOKxaCNYAc4GH1Q62SEfKmNdgp1X.kEjMg61Ohu8Pxxt_ QqnCiP16zIfZcm8qDQCLKLUDFkR6I.Y3Gg47JMdlTOvrrQtjzV08q4yZBvdDFJTnRF_KLb3ICFrc cV_aj0qAu0gF1_CtGIi.RVZeALXjn.Kj3ChZPp0DJHK5aXtFuPhYrUKVaiuromWaAT_9SGyr.pC4 uQpFg4tOL6GF8IeR8hxWgxWCxPJUvyLvftY1GuH58QbnXvKQBcDWWHxZF Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:15:51 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp419.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 4dedb584d5bfc5b80f3c45100d9ad329; Fri, 31 May 2019 23:15:50 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] Smack: Restore the release_secctx hook Date: Fri, 31 May 2019 16:09:55 -0700 Message-Id: <20190531231020.628-34-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970919 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 F049213AD for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E155728D91 for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D5C2A28D94; Fri, 31 May 2019 23:16: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 8F98428D92 for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726520AbfEaXQW (ORCPT ); Fri, 31 May 2019 19:16:22 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:36596 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726682AbfEaXQW (ORCPT ); Fri, 31 May 2019 19:16:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344580; bh=VEDYIM3R1NMqedNbn6scDMcxUUfpt0y9Ccbwl5mHx6o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=gljSPrUGuoc5Uoa+EjQ9SGNP078uC1/mEdxfv8Idwy767vinA+jtn9lxB5J+BYn15BvUHsjAp21yvbxbbWr7S/YHVEfF6Dwqz5jDt8mavuXgNqUxxh7zAbUKk29vCQbzNiHwTYqWlPUT7iznXxs06pP7Jt7JQO/kVj26IFaKmaCPUx+bmcG79ZpdV8+//wuAlTE4jaNwZiyMsg603n498RiSgSCTC7GRw/FYbkpWQj7WtWIPQJFTeLHS9GS8WHjimDYYz1Doj+/PHHtqVIB0gqKD//YrXLcJxRpC4vF/hQQa0qkpMDpIRzYFLTH+ZryLUs9U31nRNhzZghyNez2jRg== X-YMail-OSG: ffznJWYVM1kwo58gjwpWmI7u97q5GplhGG9NzWyH_dIVRuy2o21J.s6VIGQvafO U3PkNqAd9AjKcOTKt3fJfn40D13YLdFlDOC.uAlgST6bKTXDGT5XQXSKtSN4tP5I2pNqGGmq3lAD LH57FhtuGm1jFVaqwUrU3tz5Dok_BiidnTGTVK_RyWlnQyCZMtf_Kzg8elBGg4LdwO3YXA4RCjtF a3VKq2fXv76po4eekjfIJni5dQoiLVo8NP3D0gYyUzwfkeAALr5JEVopUBdIo.Ao8hcRPQXM4G.1 iH2FMVXLwgjJBFSnnaVG1TSX9Ote87hbrKDrernweBGezDoB68x3Ap48uzdQZTktHlWxg3OQDqO7 yqKvIa_gIKZr5UozKxD7zgkvJasK81ApjNtxhckW9YFdWHuLc95LUNvZskkCDrW2D9MX5D7TY23t TCfgUqpRba2JQwcH8fs013x5hUhLZAQXcc7nPR1lQv03vMy1vAqIEwg3k_OHEZHbXuFNyo1KEvgX BqymwdNE5_51MgmAZO2XUSfZ5_TFfw4fRZTdtAplWQRxUyDqEJdWSk0sU4wj8kom2HTdHv5YydbP UrfYP80RF6qsFBks8EoS4As02QNy7WiNpfkPY8LdtGuymg4wknssr0KaSbPkmV6aJYLnfdkC3il7 FesPvFxVorDO4um.iBYr4.zuekvYQ8Rsk1cjBXw3OIkZlnT00_XoX7GsxYBpDKmr4Re5F_0L3AzO fxHuq1bIEZUobJ8RxeYnxvHEfYxdS7NWV6gywPW6f_xPS6tQLbLZn7wwhiayYx.Epc7vcepC4zYy QuGyO7radBenlw7pvFVoZRs_VyLE2_3UxyefcILDOO8z4cW2oLxsB2tsXQtbaUbR_YnpnlT3azGd NewbF1dyxakjudr9M7jVSi8SazOt9yazb9dTmc1mSkqK.3lMZpLW0Zg64eKcCANezbJoDJa1aNu0 KnCs56Is7czs4anc.Uhqhpujs0kTkBRl5eQbHSICvSxShDr0i1umQg5s873p4OWDENgS9eG1OyZE 3WsTTsNRJ1koEp0gxiddNDzFPAv0WmwEqE7KNC16mPp9qdlCf3_Kf13NoQkd1OupwJLLSMjXyPf8 1JksBdeYf594ZMSciqa_VmZfvWb3xLHOUUnOU7hp4eGRUUcEEyT9qhAuxOWw8HfJyv47qoZiyoDf aFi5yZj4VkldgoKAti3T1zW70P6dNE6duLox2jJ.xyRvyBjeX__ieuZu.Ss7rtbXfkriO7PFUZS9 2RWRcGaNElr7rzE0JFgCctxULunt6.vZ6zM5LTMPREweGxHS19BGh0vzS Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:16:20 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp430.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 871cbbaf11ff5bc468f07126785c4e7b; Fri, 31 May 2019 23:16:17 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] AppArmor: Remove unnecessary hook stub Date: Fri, 31 May 2019 16:09:56 -0700 Message-Id: <20190531231020.628-35-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 Fri May 31 23:09: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: 10970917 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 8D7F618EC for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E38528D91 for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 71EDB28D92; Fri, 31 May 2019 23:16: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 1D6BE28D95 for ; Fri, 31 May 2019 23:16:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726638AbfEaXQW (ORCPT ); Fri, 31 May 2019 19:16:22 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:38621 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726520AbfEaXQW (ORCPT ); Fri, 31 May 2019 19:16:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344580; bh=zfBzq44MmcEq1Uo3O/oH4Lkcr97+L8XoyMvRBXLr+Uw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=ge6r5ppzKbwCrIMK+0k9UKMpZzElow6sI96oZnpXuOIlQsLySEWl3ozFQIg+kFvVBPFIbcueTodKJBOhOi51AGGX1X6HMZLD5p1PyZsI2QqfLEajSCeugw7Dj9i6WfdG64zlYHm+BZb/aXkvIzWLISF9TjUI1EVlKKsuwDCb9VxAE7cwYSvXCPjRD3n14M6NFNsulSaScwgZ0l2GmiFzIVBUNCq5tHqnzYZyAiAaywDcfWK5nXXXjfvxU21hocoX8ZBFEj3+6yV1IRn/h7HtVTq6fnaXoEHBaxp+hxRBsiFxlXPxPdHIa97sHhgzJ0jOykXFOSXEjmVBGbv17lWBUg== X-YMail-OSG: jhBgxS8VM1n79n3bp5iqi.87jrd2omCQ3QtvP8cPeppfMucsqZqo6GYDTvkxJM1 VLXQPqbL5eVC4L0Y3qIroCti3XXie6k.LLGLKKkUPU9jYyqa8YuCuUxKTRuN7DeOfzciqOBMu0vk souKlz06hUdlL1GejZxh91gP2ls6iXTxWs0Fn1.Svcatq04giXbbBYXqcyArvTWVZo1VKQXMkWTH KKu8GhKNBv6Wiiovg6fnHXNrikNos_NMZgl3S7OltUpuoZAjUvJfBOQVB53Trcym4u37qT7LuprU eyXI5iaXvG5MFvoRZuTLQH9URWDCjyswlE5..8Ndo5bst8uBdHIUJmieCkXqrgq_K6BedHWVYUwm FN6j9N4sfgwDPPZqq_iy5OsXwFg.wpN8.nC10ue2l67FP3hse.H65hYQs16k29AWAfDkOCaI8pM5 QJMNYp6YJ.0gTGX3my25XzZ6_3j397rRuJUF2B85CTZLQVDim49ZYeLvTRE7dA4IvBmDkCtNBThE NE_LmUlG6_BeUCtbj1LP_DRp_ZfXJHCbpza6vW8XySiNq.WtgWBIyiWktSn5PdoGVoUH3GnRVrx8 hJJpeapPEX7GdAMsOxlZPJ8dzkQYF2Pa7ix_a3URvsA.vjNaEI3NJK5oyO3Bc1r8PnSVM4vfwR4r KybMWY_8BwBWDmb_V0I89h_MkFx87XmvEOyughnE.0pO_fPx.0qI5KDWNVjG4dfJdcXCFC_Bqi5_ RoYTh4fsu.b8hQrLXObVIm.5Y0JSJYG5a4Ex.ARoWfZ354T0nmw5hbK2q1L3kKVBoVZ1D_VPsAKc TzeiSKyy9jPqiGtk91XYck2Y74O2oViCGO6GsUHbgDMY1PBJIGdi5oHwiQKEhnMJ9k.63Rf.OsYi wowENxDrH0.Jm0dn4xhaiu2.o5RHKEYvvdpgXkA.hP1PZRAmudyZKd2er3KNoeOLt8aw9dnlkQcX fD6lZ8dLw_8j3gKySV4SZy35esVOYKWlLhI5pmDAXJQmlSHCkVkOpOSrbJJXwTTwUoM4mNYm51UV ceTjoXRkVaeBESSQadaWe7aSiauWJ02AVL9kvKhA_GRH_63B.8AInyGmFZiQRbwmk2ZUPI7AuhL8 d4Z2HKhq48qpvXZGLCb9j4_1tawLmVrKcvmBN9Wstazf7GPqk.ciG_Z.MVFSVjNCmQO3drexguEk PMYqpJW31geZTSPKFz9fRqoXutkR0lNzTpuSYOqHpixqIqpt1c5OIWudXPyDVJ9cdwoICVmkq1X4 yqhIMR78wx3PjJkG6cS1NHbgK8Y6a5rtsEOzhZ8BDzK3dfu_VrGTKHxB6 Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:16:20 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp430.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 871cbbaf11ff5bc468f07126785c4e7b; Fri, 31 May 2019 23:16:19 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Limit calls to certain module hooks Date: Fri, 31 May 2019 16:09:57 -0700 Message-Id: <20190531231020.628-36-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 69983ad68233..365970f2501d 100644 --- a/security/security.c +++ b/security/security.c @@ -698,6 +698,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 { \ @@ -712,6 +722,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) @@ -1951,7 +1974,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); @@ -1959,13 +1983,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); @@ -2090,7 +2114,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 Fri May 31 23:09: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: 10970921 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 22F0013AD for ; Fri, 31 May 2019 23:16:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E18B28A14 for ; Fri, 31 May 2019 23:16:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F3CB128D96; Fri, 31 May 2019 23:16:48 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 A517728D91 for ; Fri, 31 May 2019 23:16:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726725AbfEaXQs (ORCPT ); Fri, 31 May 2019 19:16:48 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:46554 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726682AbfEaXQs (ORCPT ); Fri, 31 May 2019 19:16:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344607; bh=K172cq+NB5Z0YjmWFKPzhzudN0HRFKrT7HKe6u3/BmU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=YadM9O9a9d/nr3xctE1hIo/iNaMfTOPybE2GHPiPYnYCFM9T3p5BwWWCEJVYt9oB9HylW9QpXiLqvVi9CPN6DmZBYyopgvj6Q0UxOweQFQCDSOpUmOPZfmGc3FPkLX/bFml7dVGhieCCcVARzwueG3dScqaz7i5OKXaZbw9igju6D0fNePmy4mAc9AR81mScPCygE1C6pZmpHDqD7RFx3ag+r84/7TcgyiJ/yeHeEmdKcxVoNyMY32WSP1OVsJlFL99mahgw7cxOqPhyMNSxcjYhvqp4VVGVWMxtU2pM0hbRxAlG3WQLTwUtURB0/+xHrJusFB/HrAARGaFWAHaLMA== X-YMail-OSG: 6cSnbRgVM1miUV5fsSZGOevEzHzFsIQlVBUEbePndRjDepfky07A89E7xzzkopN OpkeyijE5CDrpy4oocPo.tBKhRFyxCsKhAR6TzM2OFzBAUfAGfUMMkv6RAHo3JT48PANiLgBZmVh zACMecPN69bJWsqanksk6ksaBGhqlCNh9w2My_GRU6W6bEzE77nHogBTQ3NdS60TMWdc60HSmSSm pUV4VkosJyH_unwf1p4WUr3MQ0eSkJoWUUcovxc4TgRukeNssXCZgr_6iCMABUUwqz6sbTmWil7G rOJBWpO8gQ8jSE2eF5hvMWX4jt.DYzp_0vAqjns4n3lyf1Bx7KHbGyFLr97WWWbNJG9ywTjHNSt_ SLvTgDHyhGD13kCLIIbk83Q3o8VTl2jGv6ueNVgqVXSQyCveis.tyCFNIAsX1OVEbkMIASEkDWYp 2hd54eX7teuyjcdtVQKkswTpNWZksEk6f76v94e94kyv.SY28Z4h2W.xXV_jcb37iK_Igc.F2K81 CG4AS.R5aFmEpkPir3rnBnD3jRhCtGg8IXRv7pAeh1KqqUla3jNo_ewt_X1MeV98eBzlZ3Lhs0lb 9OPqmtpknr74nCiZzybtNeWzIu58TlfNxozPJN1IpB4eskMkz5eim4erNN7hwgfjKYDwJnABPnNe 72wcCHXywofKQ9EbEu1bb_x.hstAi.83I512dmQYUYHYTyipGP0RDOpXN8NOpLmJNGE9jqdXkqQY ePPbJNnzkaf0jmlbiJC.574H.N.AFrRpT_mBPW_xD1gh5LA78ZjzL5iGNOEcpCgLmT5UU5Qqxd7z rxS1o8H_RgRL.wtr990_Mz7pIhyJvoceddlmOcM_9I0vJ6.5woxhn_uXjoJ9.y74_6WaEhb54qNP Sr9LXiP_PTVstx_xBKwx_ooYH25opzbYvV3RXZSvNOt4L7JCRtNnZkfmlKdesriYyRE_6vGbhk0L 9vUJL7YQW6BML7l038FADbEWFHeHuPIhUhdvwWbrilfxi61Iw8X7RACazSOErEaIaHtpP_uezZGC vrACRXEo3duA54aTk5Ne4TE3ploFlyWDWtkYzdZC6DuG2PMHqrZ8CkADv2B77zJkzoif06bPOk9A 4hnWIfZ5ICuIzaNZOwPWEDPRicrGWj2B5r7eL_I.vyCMuWdqRNHx3.LbE9N9e4eEB7nulfKNqVFA RHl9CTBSgynX8y9CoPlP2IYbYtDaIHphkdEC86FjKiQDkn4yEh04h0iDK8kkIMecchVcbV4fSC0b Oofomkmw.2gO1W.AuhKWZsBkv.kg6LF_M7HqDEkL2rw.heYEtLhi4egErUA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:16:47 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp408.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9cd5788d30d0fe2cc7baddaa2babae62; Fri, 31 May 2019 23:16:46 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Create a data structure for a security context Date: Fri, 31 May 2019 16:09:58 -0700 Message-Id: <20190531231020.628-37-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 dde36e850cf0..e12b169deed6 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -116,6 +116,17 @@ static inline bool lsm_export_equal(struct lsm_export *l, struct lsm_export *m) return true; } +/* 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 Fri May 31 23:09: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: 10970925 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 13A4F912 for ; Fri, 31 May 2019 23:16:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0079728A14 for ; Fri, 31 May 2019 23:16:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E7A5128D94; Fri, 31 May 2019 23:16:54 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 53B7A28A14 for ; Fri, 31 May 2019 23:16:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726761AbfEaXQy (ORCPT ); Fri, 31 May 2019 19:16:54 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:40859 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726708AbfEaXQy (ORCPT ); Fri, 31 May 2019 19:16:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344612; bh=1xMyB3SejRKDCdQmKeBsMf7OEE0vB0tP/pBY2Hpzm7I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=MSTquErLon05pKeC8HIPcreIAPFmI04Z2fWOzH8ndlaH8IxcJk/WrDPwOcWDOUOvzt8rr9d6eEfiMU27r0gAHZ1QVrft/ebb0ZBYk7fI+j5YU+2uZlfsDfLNXaXVEJuX0SUyy7CeTm3BJZ2sH374Fl+Hn6+f6MxfD7BlgsrvSgvbiqumh4mUjkskWDKcqLQTcOSR2xB9mncL17/g64htWbXGIyoygUjj+9qMCMJuZsx6cusuYtb+KeOGBVF46s1VdVTr+1ywEr1KpPmcPfldM57iJhD5bZ6ChCMNAB5wjyTZl+s8XRC7uwa4YtZul0YZsU4Ki3z6Fq6TloprCtTUlg== X-YMail-OSG: I3sAmI4VM1mUY3MJPCYVweg5tFD9SnLmoexaN5wUBGCrYAzSHUbbZiVQBHhm_DM id2DiUEoLRU9hF5ROdOTpnQI1wVcGw.3DIBlYCYCijCNuAoUC.4BOr9wFEuXIxpm5pKbkqKmIZjo dBHuggF8XBfNYmVwf7aFenf0WsjKApnEZ_3So6c.LhaymuzHKaDPv.BU7tNtmYyUShw4225Mn86Y .VBtBzaiMqgnHdgoDoE7yqX8n1aYZQANttUoEeGwtJmhbhA4ZofI36xAbQWSGBrUC8wCOJiDcbXZ jOLVhehfZp4Q9WPsd1tSHIOEUpqjrb8MJdZ8tzTwXYnYcDTKRRt_D5Pg3DJg2sfG.0Qo6URoCd3q 2aL8O_dT5eH2rqjlknDd.iGD.oZCZ6I1IgeFnMxYKf79Bx0b0.xvc8pAzsJBdWrpQSZfDZUvN_B. al1SsSdyLjg7Tji8frMbA2aR8wPY2NaWK0HwBwfYbu8kmd9Hg34n.YOTF6kXYl.O91YAesceJMfx CxFKFeWrFHXQnb1zMnpKVWrjE8kKzYPGvkb7qz_T86o4UuHV1aEv9htDUQBVB7xCzMw7cDBGAmjr WuUKxPeARiUlT_FfAVdwySzK71KLko17fGVWwpML0yDrMOVQQ3zVTCi3sZs1ftq9.9yKQ1cha9yp BPI7zrJZCm6Dk6BdgJp8n5ovgKwdWmnyKflZxGFrpPnAcW5diycg.vyKgmrplELfzclD261wv2f9 _yOTEzlKHK9bPNHgekkHTM3yraWSKA2FktBM1s3c6_ZJKw5oot56rueZV3LbdZ4ppvQtbRuvoMvl tSd5EMGICjWE1gL43ukMC6BpgiorB21AGGE9y0YR_F_MK6FV0e.yoHaLY3oObUxpj5Q3ZvUIFfKf .SQN7zm0vfbWeFfD65dXJEQZLb1Gb6jiwTCILAjvz5RROMCJEyWhzsm7__4kCN_5_aKAlgWIlGdi uOV4hJhroWZbCoId1AFn4z7OPsawhLsBBlyUW8VHrFh5OyQAPKnhxYq5v_qxpAl7K9JNDPUPIoi9 vIXGY6tUyjh9IBSWJbCUfxygia_4TDLDRCttpnoZijHmYLvbB8B0.0ZzSye9EMz8yHN3p9dMR8gs cLrJtjNPqugjdrkw1ANVcDCTQBrnz98BL2n0N0THN59XY91Fj7eB4HiDCPPDkn70AxJGf5YCVlbU nGEnbs3tciZvW8XQJ6UY1K2dU1.0Rat6IffvBgE9A9PCDZSVBSuwkKwKAnypRtoORln6LpiI11rU sw749dN4jqqSATMoYTAFCGeAge_NiRBQXhmuMAhJKM9vCG1_DeYNydHE6 Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:16:52 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp408.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9cd5788d30d0fe2cc7baddaa2babae62; Fri, 31 May 2019 23:16:47 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in secid_to_secctx hooks Date: Fri, 31 May 2019 16:09:59 -0700 Message-Id: <20190531231020.628-38-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 0837c214cc17..229899452678 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1320,9 +1320,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. @@ -1664,8 +1663,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 365970f2501d..ac0498daa49e 100644 --- a/security/security.c +++ b/security/security.c @@ -1974,8 +1974,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 Fri May 31 23:10: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: 10970931 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 D250018A6 for ; Fri, 31 May 2019 23:17:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C2D5E28D91 for ; Fri, 31 May 2019 23:17:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B70B828D94; Fri, 31 May 2019 23:17: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 4A8B128D91 for ; Fri, 31 May 2019 23:17:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726682AbfEaXRI (ORCPT ); Fri, 31 May 2019 19:17:08 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:42459 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726786AbfEaXRH (ORCPT ); Fri, 31 May 2019 19:17:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344626; bh=eXghUWf7mncYNfyNil+VOWL4LtYvdtYwFUq87XTEKFY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=AW1RAylnqTGO9/SAxl3SlXQUrcQvIMVZ2vFxYj1iZLW6mDPL6kv/HUF6fLJLUvZLB3j1E0Q6JGAFaWxsp8l3IbXrUC3UZWAPlcEDAQIcNYoKinD4gj7xPFazK8hsEPwgMs31+q5r/bE3LQmSY7wopMzAi940sQMJxlK64Bgl0IgC5JTyLyed5XEuxVmRtQsWMN2Fjb/mqBG9aqhpB+vIiw48JWCYDFcE1k94wzVmdARqAFLKsj6vodd+Kn9bJCxs7IfL3yBY/jk4OZ3C0z4QSvbTplsqkrDDev72v1YUy6SuvNu5UNDnAb4vqNL3hgbfCTI5ROciyqMh6X5khDfhjw== X-YMail-OSG: 0tRb9pwVM1n8ATp1VIc8q0MXZeY2y9Vosr1HVJlzmwxOWP0G4SOeVYGQH2koYs. .aZkPdrRXcHP0ITnzama9ZerKKGv8wRgcK_IgEZshrjABfLIqG6HFRuxN1ZfxnGy6bDGUBrgiiJc wfTe_x5OT4NQk4VPCcw8wmpbizSYiKE59PXAK9fQrOqWlDqQuQ_dEh5qlyBSErQwsyPBYlHah8aw SWnjOYISFdP6bp2yBdxDrWSBQu_Lmt2QWh212T9Zs8G8MM56i0ViuzyucIUgMB4iAA.yVb3nwbET 2mo3fhi9poyqkxvNxRGXSphMLTPVDqb1Ep2OG27BUPYgRZhzigSNr6bWpxuXoua4C1FMn5Cb_cmH HtlJlmuB_VzSjK5SR6Y9IWNSM4LGJBAPfO26at4tslAtCQW_SquYeTV2Ya7jYHN00zl3QYnt0v8B .BbhZWyhabV4oYFcoCq6hpbwwVD3rkU.Qr1vmQ2P5xkvgu0ZRoIogvp1QGJ7S5HywCXLeeAM.WI8 sjvqs67jd5dVt8s.KzJoKoBNZO.RtEa6rIkQqQpUPBZll68WHeilts1940dU0lYPXI286a.QzKZR _hDcGEdCDhEJb6Yh7NjXmMVmFjs_qUwOXH_9Rq4I4cvnWpcGKYsun07bMQoDh.Fe2fG5Nue9p6e7 htELFHbnYhsW3TNuy8LDNlkeb6VCJbpR6YJb_E.oPOuUniaoCSQG64RCIh6Ls5cmkPBckF6y_Obv ZGogIc5Le2pNlWJPW7QVR_kv87.MgV8do.BEY7mBYIy_xIcDrvhkuxJDXFHw.OL8CUD6yORee_Fc C_1zvaPc3mFSAuFB32XjirkU4Ut9rNuWFGxGMY.WLaXdUJK7O_sRymgLSc5Uy3Qw6pvHCoswHvaj v7pyDXpD.kIioF6WfGsW1Oo2EwiP3j4ptnigioZTtEHIMIrOciIqe4y4KkRyVkYMyHPEAqZ1nSV0 fZLuqbhvRo38lcTHRf6WrH0y8FcGYOmDgkMR7.HHydLvAvY0GwmRIlCMT7DGhFoJ900owyDwROn6 NC_xCwEi.WcXW.c5K0cTk_xySHYkYmZbvuXWn3KAHYMmJrweaV4f1MFyf5PqtmVQ186LLr33WDn9 H4Pd_FYxcYkqDWf0yxJJ.UBjHHSY5VE35bmg_duUKkrHBTHeBoFrWr6CPYy_qOHs.xuxworcvxX. izLoJQReYheK404uGdnAaSCkTLw2mtl3PaZom_CrKk1lTg7AIHt_JgyZoLgJto6zpHjXo256cjJm SZQyf6rpmZjf7vIZq6zVqzFxQJR_ynvB87Mfftad9nhLRZ.zClOpdq9X_ Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:17:06 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp407.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ecbeeaf97d7184c0d421bbd47d8c0363; Fri, 31 May 2019 23:17:02 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in secctx_to_secid hooks Date: Fri, 31 May 2019 16:10:00 -0700 Message-Id: <20190531231020.628-39-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 229899452678..c983d573a005 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1324,8 +1324,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. @@ -1664,7 +1664,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 ac0498daa49e..84f27428b62d 100644 --- a/security/security.c +++ b/security/security.c @@ -1990,8 +1990,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 Fri May 31 23:10: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: 10970933 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 4A2CB912 for ; Fri, 31 May 2019 23:17:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 386BA28A14 for ; Fri, 31 May 2019 23:17:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2CC0E28D92; Fri, 31 May 2019 23:17:09 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 AEA3D28A14 for ; Fri, 31 May 2019 23:17:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726728AbfEaXRI (ORCPT ); Fri, 31 May 2019 19:17:08 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:36982 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726787AbfEaXRI (ORCPT ); Fri, 31 May 2019 19:17:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344627; bh=zNmMomX7FtNuYn5Qpm3pclNFmgRY9BLATnDH4/IPw8o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=jVAWRXo1koja8b2I8z09Wc/IUVN3dn+SsfWBeAvj28SNrlORMtRCYpHobSHx1sZLdOQNqhqfv+L9LpRr/XqqF76ZwACiUIK6KKocsVPxu+5HRbIsV5eBjsvXiKIsaUf6RbQug7B7ElhMskMYuLzKJ461yevF8UnscFodU7N2e8jP1cTcT8yzVnEkpVHzeF0eezOIQcbdgo9oUX9nxJmeCx4MSWBn4LxLR7Xo8ChgKaXB9BTFecOQbmGG5zpgcBe6pPPTxH2wLqNbwyJ1s1xPV0LRBk8m1sRX4T1dVMtM7ZTVjVHmsTu9f5CqBKVoHVCGWPGI4qd17YTmcJRM7GqN7w== X-YMail-OSG: tCHU1kwVM1lvh7f75eRPw7wgKh8aZYhWYO67SdQUfpqlpTzyNjKLDv4fN_Cdr0l dsPiKQRII1f1ReQfN5k2PwvWUemhNVj.u9vsT.CFfP4twCdZeb81HyGNOI5TRR4Y5hkCclF1aBml DsVgAxul1g2VLHf66gCMAJr5iakyEKn8fzv1dvU6_RHy3gL_relyA6rjhac_8So3KazkxWjvx1Qw i4LsFSlQhXUxRYFSs1qsSaBw05dAe0h7_RoXkUljcls64NOKeAm_u5stIzf3_71j8px62AA2V8xw XWY19FgLTE3bvAsw0ARvKMcAJ4lDgYRkzg.7J5ITmtAbGs2lsMYCatzFPOJ8QTgUJlgs_PvGZUgQ QvoZ3QAixp2abIl2wvCbgzNNRzED6YFpPIESKyIaPIvaV.hUPY24KYzf2PzBr3.NSrLrxd79cUUu IbGKtBPTegq6S0s247gNfatob8WwIyG6bK3jmMWAb2EsrYxkDQZL6X35vBT.JUXUuxoyRcEJxt0x ao1_lzHSYJuDpwgoGgsQOe99OiQk9lv8z3eGkzObxllTvwJ3ujwLRmRJjMxGcN2pOAxwXlI5lH1B YtRIzZHmkt_4g1ODIzUkqCo.ZJyJz8HeILm37swceV0teWQp69P9scXX_r9zSF7II5lTgIZMs0ho DBwYCLZfTFD6fG_cw0pK9gf3mgbbWQYC30.7EDnTI_LHlb7n7Ut8YmS2L5zYn2BnGnSAAXhHq6Xx zeYUF4Qb93n4bSjUnjaqqCde9gtCdd9_tAN445z_FzmSTT8TWwUWGHcQCSekKDkXTen5KH4BJQ5N vZ1xHRvXTzMmER6BKfbevlmHD89j9NJqS8eHmtKoDYsZ9sjrv1AlFlMLIsDUNm9rNTREgpnUP9Er YRRFScUbgyVTe0YgEYbOndOQakxYJiIEVx8RkHzrySOZy7o6TK7K41atyopAY2Ba3TfAiEAkdnqS D.lpb8fzF8hqQ5CWi5cNNzC0hqS5.JV67rL5e6DG4aitXGW.Ln95Er5VAs.BgmdPfYQd0zl4R0N1 hgQiuApO9BntzgzeEdXnrIx9516BHP.u.ujB.pRRiGHF9OQxuVLZ01wIunzRAv3LM3woNVMlHweQ EnWKsIOeXfFwAHmAi356v4yf8ss_I8E7psj9wLcOLtGYZZssm9TXoWa2jtvb02lTGwvEVl2VvlVY 4n_BisU6zOLis8_vT5hY2FllyzZOzS0tGDC6dlDdmOwHEjhZ1N6kGwq8QcPK9.iWT4irHCcYF77h URDyWK4MuhtAFD6Sx8ayYEZkYptpDky1y2Yi63GXK8fNb_T2Q1_YTgqU- Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:17:07 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp407.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID ecbeeaf97d7184c0d421bbd47d8c0363; Fri, 31 May 2019 23:17:04 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in inode_getsecctx hooks Date: Fri, 31 May 2019 16:10:01 -0700 Message-Id: <20190531231020.628-40-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 | 11 +++++++++-- security/selinux/hooks.c | 6 +++--- security/smack/smack_lsm.c | 6 +++--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index c983d573a005..20e59e0b775f 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1394,11 +1394,10 @@ * @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. @@ -1671,7 +1670,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 84f27428b62d..0c23ffdd92c9 100644 --- a/security/security.c +++ b/security/security.c @@ -1992,7 +1992,7 @@ int security_secctx_to_secid(const char *secdata, u32 seclen, { struct lsm_context lc; - lc.context = secdata; + lc.context = (char *)secdata; lc.len = seclen; lsm_export_init(l); return call_one_int_hook(secctx_to_secid, 0, &lc, l); @@ -2025,7 +2025,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 Fri May 31 23:10: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: 10970937 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 11F83912 for ; Fri, 31 May 2019 23:17:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F369228D92 for ; Fri, 31 May 2019 23:17:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E7C6E28D97; Fri, 31 May 2019 23:17:48 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 7D69128D92 for ; Fri, 31 May 2019 23:17:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726724AbfEaXRs (ORCPT ); Fri, 31 May 2019 19:17:48 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:44636 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726738AbfEaXRs (ORCPT ); Fri, 31 May 2019 19:17:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344666; bh=EacMflAD5VaKL1W6672XUiEDYF8wM5Kufsvl3z4Vcto=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=tg766CgVsKIGyCZl/T4d1zfVyaSEmn7XNqpJMhotK59NL2XbxCW9FeTLEyqNB8uOae7P/P/t+FtFQuTOKC/+fAXTfWO/5UN5ftUNG/PLhn3zRmQkgxxYzGMOD6cLuPKc3w7H1F1QEWAQqs59yGvH9NkILzFICQnZSN2JYwzVJO99IZ2h9dSpg7swYtHg9d8AzVibb6yhsYUmXkUiy8qDQwjwE7g2n8TwFbU4qsF0x7m6q2BLMIBs/23Nu/0n7mLcNtY4bBOoLK/4bigbGYZOYNR2zY3kYiJsRJtGuFJau8nkFcIPXsfgzWhkmLXD43VVLvMznoz7cHJN5rmj+1Q4Kw== X-YMail-OSG: JPsoOJkVM1mzvubFscxYKNyzVU3_ieTvY7g_WC7fcFF96QpxbSye6ol.J_qAQ56 JE_NGZTFpAtxWo2jA_ftw5YkJtXME4uEOX501G4Gnu68ZNGYRU3_UaAhDttY1G_IUvQyD4aQhoJD Lg6voqRO1XviXpATrShwc5QAg2dBTQQzqn._iwYDP29VI0ABsp_BYJymVd5UQAlgTiEZTNGGQutl OhZnzqkIM4jb2NzQ9JOO2bdunsM5YjENaWHwBiUMcBGnjPES0othpr8hf5XJPxc2wJRU8LK5Wtzx fhjo.H32ZJ3bYEJw4vNu7ZMdxNMXt5dgv2enPrx1kDb_i7eYEZKgZir1BdNv53DeAEVSOfkdbCnP birphedX6_OQdGfuNQ0K3ZaoiBC6SZ7hJyJhmt1IAzkVrihk06a6KmXt4etRCej0IrlzNNpuW2Yu lv4udorA0ywfbw7KMrjVQCZcYYR8Dfsngbm1QU49lV_J8Bf1s74QtIY9iVzu2t6XXi1kBnTcveJ1 .YDdNATQ7kWzzwaKREm37edO4ED9W6ehcD1zQ2ngMUe6N7vIpZKzfArvN_tY5KiTtg1Yl7xtF7CH lm3g6Sne1NCsANA1aDcaYP1ymn1YvjNDmMTd7Q0q5LhW21EucaEdkLmtsCadSSD8E9_cwM888WbR PrFTrxLmXSX7r2t8amE__8arxXf9SCirVjAN06tWoa1hpKs2nn2bN9X8UCTtzcS0F_AO23SNmXhh gy2goAlurZYq7as9wsX4R06aFjVV0jZiXlR.0wIOvGHKNfCovsxObDagHIwpOjPYDDIwdFLVhw.9 T4SvuWQpO.GSkyOJnzXwg5mzS6h0y8s4sn3Fz1CZ6g9BffEC0qlkFzaEVJXGwIFkuy1PuxVhIGzM BPQyefVOcIWSMvHK54L8EN3q9EsmRELeW_8ZTxqJgOfno1LX_1nshArffqeyIvppSHFqW4Dc1Fg5 5rsFimG0VzqphAHKXq6VNfWDzsnz_yBypN25brGy0dO2DcUIWl0kjjZVyHDNB1cbDLqZqynhuqO2 LbFd8ncNyk3HbdEoS5xtmqt4YXZ.GPyv49r6twN.DrWN_UbQgJ9oX6ybbCEQ2de_YjcM8C6M1To9 ndHtcJDVkiJoSTt7PkMiDo6IejX0MuQfaIWfsQDEJUq8heStJ7KtEURS1Fhk2s93dJFIq8HCQJfW .uezCtapa9cyPBgfEA6dz0XGg8LP.FBesUyvW1elzS.5VWdTHMkgVboAgvdw48IcCiNDE.YoyI_w A777GhJaY79ATL.IpGOlRH6GHHKnR2.xtjNgTMhpqngqlZ0Bzogz0N4Bk Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:17:46 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp410.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID c12209eaac0c3e6e8d2a068618591584; Fri, 31 May 2019 23:17:43 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in inode_notifysecctx hooks Date: Fri, 31 May 2019 16:10:02 -0700 Message-Id: <20190531231020.628-41-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 20e59e0b775f..eda0a1bcdf07 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1377,8 +1377,7 @@ * file's attributes to the client. * 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 @@ -1668,7 +1667,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 0c23ffdd92c9..4f443dd481bd 100644 --- a/security/security.c +++ b/security/security.c @@ -2013,7 +2013,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 Fri May 31 23:10: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: 10970941 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 EAC90912 for ; Fri, 31 May 2019 23:17:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DAB9728D92 for ; Fri, 31 May 2019 23:17:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CECB528D97; Fri, 31 May 2019 23:17:49 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 62FD428D92 for ; Fri, 31 May 2019 23:17:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726738AbfEaXRt (ORCPT ); Fri, 31 May 2019 19:17:49 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:40367 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726791AbfEaXRs (ORCPT ); Fri, 31 May 2019 19:17:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344667; bh=Si7Q6Qio/TpjyKyKBImiMFKuwDNX1UAPNk8f8AqjWng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=PWIWPjQDahjeB8NW/lCeng3K0OKoB8E84t4CuHVPE4DfiP64Vk8zZrGIp5QOIe/qg7q89+TvsQ/IGiQk77zmEn9dSidVKeRATuaRgrk0WjJobl0pN/eHvLmGmL2Di5G92d6bEoDlwqdUaKEtWVthBA53mtA+x7pXLSnQ6en2+coZ/L2mtZg3b4QfAcqckx6VeRyaizBxzv0CJp3eiNoHSobBheXQgw8mpiBS5kdjsKAYXSP3uuUZ6BYl4fI4lb5aN2I5KtRS+UCdkpW0325uRDsKuEpZ5skD4hqGv/+Dz6MiBX3CpomgfV1pZvdMOYptUUegR38BQkWNZEAwQns6eQ== X-YMail-OSG: MSjjHOIVM1mS6NomU9_LKkedDBtb0GvKw.ysRWVZqmDnYILL3CjkcZKQMvpmW7k m6VLUkHK8GBFCMG4YU1YL3Bv1jsQGM6CL4_wAI_Mv1t.9i4Y1vO9TjkKKGu0JWRm_EOoIrgMI3FE yu3HoZ1QKrTugv0WRkTlps.1x83Basl6k_cFt31HyMElslIey5HPebf9q6z7fKshaGgcUsm5.pJu fruQLubK9NkhGbQg_92c.fA5Qvj.KtfnhCzCCvCeS8K62NHXHpt0ccckbP5jEdMRUPk_Rk0rzOJa oQzbu2_.tCRabYP0qUCTdt.ZqhpFsi2aStbD.WcYUayRP7pMUupeiEJbV7NNviKNeGVk14Y8a7IF 4kiG9UI1wizG4.lT_dcE4QJeFiMkGifq9Dju0_PsTSUHu_48MjRIGaH9XAM37pQyX1CUu8sr_IBr .sZYBZ6Nyn4SQHrb6vZkBRg9kjrTXp83QK108aPCsWtj_KPD_Z1llIa_h81IpMTlghHLrzBUxTgk F7U_NKgeQNuZTcfO.o8jivzj3m2OPtg879GH9ux0ae4XWqTQLFBH4pbV1uW1zvh4cAUMzytM5RK. XGMMgviE0lBOUamwywcYf3p_Xs_zPaBp0t4h3FeqC5JQDq.ndo9b2IDmY1Tb83BKq_0hM7g5RJhu kuudPLEw.QNFtbvRSCb9UgLI35kqSKsiPcPD32pf9CvaLLu1TGgZUWYKO2eNnIkD.TMHqZBVbHjn wfPapA9VCXv9ROilwKj5h_CCkylJzh8Iezvih0KQmOOCCwgWeHKT50GwJW.CuUN6k7xXp_C0yg8s W5VCM6cZQnVW_svDpYufysY7OH9jgUsSOKUuW8SvLsO9Jf4kNLOxOZQQUlXLKvPweCJ3XSsKD6HW 6FW_6Mx5BN2XgmlhQpXYfopZQvuw8UDx9snkIRG11T_LQIgNCdDjKK5DDRpBAoZgmF0XNtDkkRVe GqgAYlpX8Ooo77tLYC86.v2yIMzEtOpuOvKYu7bwZvEPy4ODz4kuZOWcJPym1zXJjCv050ZZCgOY GBbmtIPKRr7iulmazL_m1pIFzxe85dMLgJI_Du8EdWJJCHaGc7JfLeJtK5LFMyiLQQMKIUnFdHSM eJFmmAHkvzyw_EPqfdAIC5sAB0lixiXbZjhLcj5bpm8q.W9Sj.zjCWfWNIgHRuQmshCyIy1A1Frn WZDriI4N.puZ4s7WGHjsdt7xRjF6untti_cJnZtGFdQ87mkzs0vbG9rz21iq5RllxOPOqe_nO740 2vUmttiIIFaJbTM7d8a_EmMEdOF3boT6z.jYe_W_.OeGR1TvFYsHb5NHn Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:17:47 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp410.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID c12209eaac0c3e6e8d2a068618591584; Fri, 31 May 2019 23:17:45 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in dentry_init_security hooks Date: Fri, 31 May 2019 16:10:03 -0700 Message-Id: <20190531231020.628-42-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 eda0a1bcdf07..d4ace7af4950 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -165,8 +165,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 @@ -1492,8 +1491,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 4f443dd481bd..c04b334370a5 100644 --- a/security/security.c +++ b/security/security.c @@ -1017,8 +1017,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 Fri May 31 23:10: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: 10970947 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 4959718A6 for ; Fri, 31 May 2019 23:18:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3963428D92 for ; Fri, 31 May 2019 23:18:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2D9A328D99; Fri, 31 May 2019 23:18: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 C6EC628D94 for ; Fri, 31 May 2019 23:18:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726791AbfEaXSO (ORCPT ); Fri, 31 May 2019 19:18:14 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:44776 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726798AbfEaXSO (ORCPT ); Fri, 31 May 2019 19:18:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344692; bh=GL92BlbATLhdlRxbERwtGOiRrC+zdGB2SpJVUW1Y7c8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=YY5koEQssmES3RQBFBnJESTYs2Sg85tL167VqVSIPP6OOq90Ma92jKhmn8s76exWFQiAVtBX4+q8tSR+Kdfu4g7iibrDMgapdmQYQQI4pFcQgLVh40HP1qeCvOC6Wp+9XNbnRcl+edhHmL7AXjPEj3/fUoQSS9zWEWvHzWOV1QswLjXUtd2SMMstpUU3ahKZi0dC4yMqG82sRWh/mlXKzom7CMRSthRA6xDvSfme7I0Iolh3Kf+aY4Z4p+xbZ/kg+ImK7Sf2T0uy5rCJQYi1GD39saEvWhaMbGtTlrRRC0auJz1zjJXoNMhF3ejvyGaKIrJ4HiMz/OTiu8qGSnoQTw== X-YMail-OSG: h1J0amwVM1mu08x6nKgyzsfD_GYnthFB_yx.7iLwmdaWcSJyDe9vFQm8ip_2eMu Kc15OG7FTWC1pWFbof5dkboIzPRn4EvYvStxyV7_W4XBTaA0uWukLJFr2vRsdTW46z.gvCqLX2HP q410hEvy_ZUKXOXvDdP9V2hrTWjrg2oW1tCEiMvHMITM0LXmdk9xuYi0U3onew2nVKYZ9SgxlmMg iSPbp9z7Vd6Lvu_dOsDS6HJqmi8MU48A4rXXQKq7ttyJUMqFv9zF79ZlLC4e1zHzxrIzd0quzqJE cfad0sQo3NSiGI.K5fUvazX5NiD_.adou4wm9KpfMfX8xu4Rkgwa_3zvCkR3JheQx8vne1bsam5V 0cK47QYucmzbfUMc59qsSXAppGXES4QU55lInDr8lxkOEuZhQ2Y2FrDFBni1ojaezySyh_jGNyiX i_ckDudfGBatqRuur6wGoURnvcGaqYUYcQ0XrgzZN6.szHdH02Dyjqq5xdBSfMEBiTViCzQxYvy9 nA02ojNP7wo_CjJXLQQteN0zx69hjOzLVF5zpn.FhH3UatNlplzBkDVC2vkBZ7Si6X8BTEtPHLhm vebDytNtQv3Gy8sQA5MMhj3LEGqY9ms5lLnTp.wQsYL54AmKexE4WOYSEJrHsOSRUG7hEwjfPbpl Bfh5KHNCN1uXBQIwiPRaLed_tQsI1ggDpHSSsXA2HNFJjAunpsd7En3_VTTKx4mQADAgXbKhXVtx 1BV1Ve0udWI_ysUT9R2AZfbUdwu1P.kVVIuZeGdWtZe0hbZOsQxtXy8r9LcvHP9Ujj0_Q7RtAdIx A8bKbGN2R6m0a9XlFYNTtDIASRihZIq2fOHiYRPo4WOpzcwgR.hiQMbEQ6E72IjFb77M39g8hhls HihkEqULAkr5whO46zMSXT5zonuehnRYAXTPQ0ZybO_yNMpDepU5VuV_FbakYTqFliR0ZF8IJgg4 gyb2KM745fsJBBTDxv40.XB7mv3cLC6Miij3FO0N3rk0qqkWEDqlcPmU1xaMODB.qmfTJ.YqxwQ9 QZmnVi9HyEBOmwlIoIk1n.piwKgEZQQMPw8C2pxBt..qI27NOU14OuWhPR7K4lwzXzebPBrHeR_d eAfXA7TvWRG_fWjbgmFizjFrejyVQQjRpPnOBBjKZouydSfoZhp9oLkNOhAi9pPOygTh2jZWCiV0 xV5jrftLivaFbw8ihP8jgiGcFRXB_G8KmjbGPBwl42oQ.S4vP8aLk0VFWnOK5fC178TJORT4zOQY JFacaW6L4XR2WGBkLjyn44kX9cvfkwJPaLAzHzXliSKFf9VStTCgsWMgy Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:18:12 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92e9b7c7b89b418ca5baa88a2cbfd034; Fri, 31 May 2019 23:18:12 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in security_dentry_init_security Date: Fri, 31 May 2019 16:10:04 -0700 Message-Id: <20190531231020.628-43-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 e12b169deed6..6c3a74a44a59 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -302,8 +302,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, @@ -674,8 +674,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 c04b334370a5..628287180ce7 100644 --- a/security/security.c +++ b/security/security.c @@ -1014,17 +1014,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 Fri May 31 23:10: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: 10970949 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 44B2813AD for ; Fri, 31 May 2019 23:18:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 32C7428D92 for ; Fri, 31 May 2019 23:18:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 270AB28D97; Fri, 31 May 2019 23:18: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 AF91128D92 for ; Fri, 31 May 2019 23:18:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726806AbfEaXST (ORCPT ); Fri, 31 May 2019 19:18:19 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:45142 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726804AbfEaXST (ORCPT ); Fri, 31 May 2019 19:18:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344697; bh=xbxrTtPDT+RT3HxgpjUjOefKGXANltzkYYing08uaXc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=lwrN9mPrO/Nu8LOv4NKtzhEbCOt6ge8A7zDkt5zg/LeAFTDOb2fYv+kleq1yv/xQ2KcQQ3zN0sMRiFh+MqIvkeIrufrvFUM2sPh7e7jrBqtdiPdTtoBJy606PKgKn08IqRLO2HsDpduNBISUH/usk15eQy9KeTeMH0jrtBglyGb/Wo/47oQ9S0RtYIxyia01q4Ltl2Mw1I5yzHnHqVtxy1GMxAlOMDWfauYucC1IxJCr9miOQVxgSyPLotuVVbiymVQCeYxVowrzfIRDdo0mYw5EOtT1HMku9RBfrwFAYtwQZ55AC/k1A80kAPgSsXc6sSRFdC0XKgnznydH3m7A5Q== X-YMail-OSG: cZN66x4VM1mXQk2UYci516xNWhJJOEMvlupBGlXgv7Kn3vc8Ox9GWoBDqUUkiZD 1P3PN6OITegoylINyRCCTRgBp2KXomZtFeQ1n9ZQghQgl16eYfgmha4xdsXf6BZNz92nJCznhJnH pSK5YoFiablpULjTH9aJL.wBYkOdb8i2i4CJLGtgL6KBn40mq1a6nqoid8ilT3AjXVJcOdUQUd2x 8Hvl5UN0ReSrLt1sEHmQIzGdDuCpZ0qknGc59uiOALmCuQsWSDBXU8acBAQaT7oVBT1q.DRt70A0 0I5ujKGyzVC_3NYdGHgifCDRw6Ob9s3F2gnz6YzOZCpO5VLqn9VlDD9kh_ghwqMMThAiZsQgMO4r LWDnWK2P9IGU7.R4VGHxOf0Nf0W.UiX1BaK3syoYjqZJZnC8cHEofh4ZcFZehSvIM6pF6Tksl6xs 4h_43_EBSLhZEmro3i09qaHyWJk3tlgls_27rsdnvAzDDcnOvCViapfJfXWDyuhS6On2mVn.Oc3m VSHWn2erJ.PSIh7JLD4XEz08ZPYefWHXYJnYLnoyvOUQzNWTydyIpg13uKbydrdpmaWS4jkGGuUk V7jJ9uRFY4XrE_oTXb5m1pCrs4py_o78BAIvrI62JjkhnlrtZYoru81Bj2fSiErytiwnXeQn4cP. o57Dw9t19hZw6z2SD8EMYL8FDTnBpNlo01GWj0S_2rApd3S7wGe8CV_cxxN7CPAfWJw3r7ggBLe. pBAVbh80AFUTA4OWssyZc59NCcQgsSUAtPhLJib8mu4CmIcI3yUKAunifCUr0Ge253c46dZuZFoW OPzdfdJWsAFvqnaMJlyNJksgJ_xQqlF7TcePzWoAem.ajqgdNbM4tpPSFO2xpyquhdwW0KAfJnSL QZUiMzZgM_F6H6TiKr84Yd.LeUiSRfl4NG61bmFL8c44GThQEjY1s.IU.ZEYSfGdeHk.Pqo3sg5w sSD5KCqz5bNBS.BYO_2vYhYRM9eVmIAMluwokKOOmgTOPBKNF8LSdbNTxURfXhheAVA0bsH7LbHf AKJ2yImFY46CQ_Gzf9iMRf4pkNuNIoEEYtAxYIt4zXs_GtBxFQn64lORAsEreDRN6MgSAdQyyvLf rLWRjtVqKl0onpOvdv1q7FXnIlldkuHM5Fgq_m1XFiXsZv5fL1Tk6nB5BhXJDbU9RRpYqcltHypJ jAyYW7xm6V.0Xrj44xG3DWTayIHnZXQ__SiRNux7NRjdJcW5JEUeA5x8dxQhnHczY32S0tzVhIYE .aGBZimiBk9ASz4jHreWO3AJSrLH9k0y5E27OznG8boTGb.z2g_M7h0r5 Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:18:17 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp411.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 92e9b7c7b89b418ca5baa88a2cbfd034; Fri, 31 May 2019 23:18:13 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in security_inode_notifysecctx Date: Fri, 31 May 2019 16:10:05 -0700 Message-Id: <20190531231020.628-44-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 6c3a74a44a59..6b2fcca08a43 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -437,7 +437,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 */ @@ -1232,7 +1232,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 628287180ce7..74f211d58e5f 100644 --- a/security/security.c +++ b/security/security.c @@ -2011,13 +2011,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 Fri May 31 23:10: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: 10970957 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 27112912 for ; Fri, 31 May 2019 23:18:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 14FF528D94 for ; Fri, 31 May 2019 23:18:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0985928D96; Fri, 31 May 2019 23:18: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 815A928D97 for ; Fri, 31 May 2019 23:18:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726787AbfEaXSe (ORCPT ); Fri, 31 May 2019 19:18:34 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:39916 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726804AbfEaXSe (ORCPT ); Fri, 31 May 2019 19:18:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344712; bh=wFOhNcgsx3tpKVkIF6420r+ZGM2BRdr7BpTpAqXS/b0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=RP+OZI5fYx06ky/TVkMtZ2vUnoEPWviDc1PTZKqu+2P/ETgyR4864okBEFHMxfKpp4WxlT3XK1XYJF+1zOa2D5jonr5EvoNN//a4RShf4UN6hDCvCEVkzAQg231G0HZE+Fm3vgVqDZT7FdJM+yCkjHEzsfe3SE2Qcfc9rRkyUlx9hgUOG+xMgZpEyiUoQh82yoWiWnVoOL8lYuyK62OrGt/yb/xdkWVwjL44kS3rc9XSCp0siPOM+uobnH8wp2LlaPNZpM3GJpXnve2EBITfkrt8KRGFg75Oea0ButE6MkQfKRRaWzVxt7CB+Ehwo2TB1bd/+1pY/UjGAsnkkH/WPQ== X-YMail-OSG: c3XRpsMVM1mxFHTc15W0nptzAM.fXrBZczY99pDgxINo7PYbdrTgwlhKXilz6bm DEJaL58MimRCu02PUDAJD7zlujqZ0.pUJKfbP21ofWOw6.E.6xYtUnNv8RnBaGz7lgkEz3W7K9RI jXo_glwgKv308CQRwWXYU7Ve25ZngeDKMju3Kxv2_LeWtDFcLMfThIb.Q3ljpm3gyFIpHTkTp5Ip m8z5xum0jJxT7q78pNLLfNyxTvMgd3PwVuc3X0m9_X.q6Vl7LCAet9OsX.TgOildSbbvogGsqWC1 RBGSNFGxMdzgaEdm9WHUwCCWS1YrLJcQBk4wj0_QS7AIrgi_swFyoP0v4ZOsciriL82LrC2nnO30 W84VHYJPWKkBPdLTwfOtkNnCcwYZKKsfeAnQOITPy9K10SmqgcL1tF4SOnOQiSsRM.DP3D2oNbXV VarcMi7gfXKWCmwRb6gzAqbfkaZ8y8cwbSXvYlxLtfuhKtzk8UCuLvBSB0l_dDCrtW8x2J.WSps5 nl0B3D.CE2cEqWG6fKsmd0Jvo4fGTRkCkcJWQQI1B8b3yjXWAxZ1VWjX6uTpL7eJpeUzRzODD5f6 wWs38KKFI3EbwVuIk5SOaWTFng69hPAeypuPHSYT7Jcha5IOx7O0r0cf94jgZUzsn8ULK9WnnHuN dgUk9J6cmYz.m6A_6ziqshCC8YMi4by3a1BTPmHeERFca68jlluKUz89vz3SGImoLUQ8IppEdhc_ L5r8L2G9iZqt01iDR3Vn54TIzp6adabBygWoHWQUxK5lOaQhrLVIFig9xsLereO.06gWCEf4IMel xbk304IeQHzRXmdQnhtJgWN9XtnzjKKQrbQVr91aUQlp6ikE9cdvxHXKVyyxbTYg3F4dE2GSeiZA 66loaUGE.On3q3AYqlQyp6SexBw4.SsGGx_mSiFn7XShClmxl1EdfsjgvzjeOmk3JMC1qkMw0Et4 msncc.f00wmnWWPqAK0nISKKaD1rNQRgdo6A3SSxcM32e9G984.tF6cFTeK_cV9KeXIHWM6krHbq vS_7umvDBbzlFsEVDUMZHQ5gQniwBdzBeElylD4kOkpxk7Zt4p72EVHRc14CD5rTNSmCYGDKaFTB dz_5nZf_t7EuwvBfIhYUwVQzFvu77RdwMw3F_zugDG9Ab0u_HgEh3zl6efDQ_1FpXUcs7_2aHUIl cNoT.1Q3ndTEEd4bJb_S7w01Fwlx95sl0UnNzJ.Ikf_GKupMUrbsfS1_33K9Gtc4EU6meOcGnt8Q _Tg1MhQ3W_NowWE.hEruR0mp8k3ggbs5bT_JtcVafytf6DB_dyAqXIMGD Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:18:32 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp429.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 86e200249ed5328d0602f8eedef58520; Fri, 31 May 2019 23:18:28 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in security_inode_getsecctx Date: Fri, 31 May 2019 16:10:06 -0700 Message-Id: <20190531231020.628-45-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 6b2fcca08a43..90d1ff7a2fe6 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -439,7 +439,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) @@ -1241,7 +1241,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 74f211d58e5f..4f999cfcf949 100644 --- a/security/security.c +++ b/security/security.c @@ -2023,16 +2023,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 Fri May 31 23:10: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: 10970953 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 D0089912 for ; Fri, 31 May 2019 23:18:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BE28628D92 for ; Fri, 31 May 2019 23:18:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B1E0E28D96; Fri, 31 May 2019 23:18: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 257F428D92 for ; Fri, 31 May 2019 23:18:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726813AbfEaXSc (ORCPT ); Fri, 31 May 2019 19:18:32 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:39469 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726798AbfEaXSc (ORCPT ); Fri, 31 May 2019 19:18:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344711; bh=mT7CWYfSqkiX5vZ0p/C8Hg9IONMlLrjlhp5TmNjwBEM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=aFdp5S4fNbErE0yvXikDkH+UEfemnucaafrs3X6CKk/G+Dz1xI8CqQrh1xZdjXrecG3ZIsabWpUXuyV1W+4uV+oU7CENnCHqXm6bj7+pwZcEsL1q0RYPpaL3bOYZaUbZ6YIBzP6hiKJSI8+Gu6c+ARh5J5djxRLTQ78a/AtPVfUm6R81/F/PerxUEwJZEG3Grmo8DXZWC3EMK1uss0F56zfZrBNbyJvohYVaUOAJmsqkP9ZCiGDdG/awijrM0zdAX2LpLFhbFjlZq6uGgFnDDKvRBCz1X3wCPfZRqJmtsL13PDiKkNmV/AxQlV3q/UBIwpGShre7VjKDpHz1tBqcQw== X-YMail-OSG: iJqhqqcVM1lvsSsSfvubsBwfHSnTAP.RQfFEYFdC9Fwv5nII4chOzH08G8fQRWk jHADj8gPdHNtoLwFTqSsdaXRp5D4G7i4mihVkX4vxtZ1PlWP7q0NtQqKms_F0RLRDIUP1e8.a_eW wDxgJmGS3Xz8G44uL_jxYy2LuHoE.fZQoVZwzH0u9ag1ryHqatc6psoBVzTQSNqxK4aN_I4fGlHR 1IIXAE4.EXzNuuaaweIvDzquEyJE5mwgfQyVOpte1suG3Dqd29ULekqFB2D2KsxhaWwL6IMQdZ2v 2Uxtv4Jn2guiRJp.yN7wgeV4l13ZyXaGIrg24cb3IdtGLh5xoTND36XabrYTbI62V_mtiV.AiCMN HW4orVdveHqqeQeIr0CpIlfCMdvVu4lqU1CEF6cyIg5iAqB7B3beBocJ8HxIiS.MP4I.ZOjhnaW8 nd3xUM7ZwrnruJ0hHAbkK0iMPNmT8VV0MIOhybSKGs47ycNYBK3d3YbSpMEDs031DFCSUdIK2Slu KuwBdbtWGhbAvh_N2rNkfmRknQ2WSo4sBYs9YGqf4wRvXPtwMlWNwtZgN5hRCZuyJRz05uVBBhpN abHKwQ6I.ZEXc2xtfJJcIpV.7Cf39neAQqWQDUuwuOsqdaczVnJW01Pyx74oCyGgDTdcO70yFr9d lkbqH6w5PUJVGAfWaZKYVBBfTs3Tn7TGX5frAEYleROW3orxgnn.nWXthxKijpntb002OPBlxUHL AwmUbqy2jgVxnHAfTBuuI8UTWIBAZ_ZdfATO8EdT08OatvroukVl7HXAlG59iWx6RaaWN.AkwYOP xqJBtWKGkVfvevIV5TPL60Vpw8rApyg64Kdtdr25PDTjNbEnQwvbTmgRPqsHNQhIzKeYwT9FbdDJ 1t0ub1Etba_IH3ctUwtJQrxXrOVMUNQzIqLuBxgreHhqPasapmg7V3ACv9roFvRYYxJEJTXHk6r0 1HTFaeqARElzO4jvIr4DnqL3Lruy1.YRSjSa7_QTV9lum109ahUaWdDWcIGXV.GcT2qAOqX7lbPv vvigE0mEEa2pUguFutWJVeXp6lkRCAMqpaGIQ2xi1e4vh7_Z2Dnwf1Z2h75VMNJVKhbbCgs5RLr4 zXZem3Dmy2SzzUXgpTI3KzOK6_gaBIFDwnBM9ACmyYLy__cz1YiYejByG7r_gnrIZwgnz.CNas89 Q9HC1KUaXca5YqpCmRGGvhKYigDfu7ltz_1c1MxPcor1qQUnUWbiTm8zPFljcMd4eXq8Cx23tZDm 3QPBAss2MK0vTRJo7J1NiVnpfz6U2y3.HtLBcaFTcgiHEQ6lJsCS08ReE Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:18:31 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp429.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 86e200249ed5328d0602f8eedef58520; Fri, 31 May 2019 23:18:29 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in security_secctx_to_secid Date: Fri, 31 May 2019 16:10:07 -0700 Message-Id: <20190531231020.628-46-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 | 9 ++------- 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/include/linux/security.h b/include/linux/security.h index 90d1ff7a2fe6..3f757b2d8275 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -432,8 +432,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); @@ -1217,8 +1216,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 4f999cfcf949..44a4402073d7 100644 --- a/security/security.c +++ b/security/security.c @@ -1987,15 +1987,10 @@ 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 = (char *)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 Fri May 31 23:10: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: 10970963 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 7D989912 for ; Fri, 31 May 2019 23:19:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E59D28D96 for ; Fri, 31 May 2019 23:19:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 62C7B28D97; Fri, 31 May 2019 23: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 AD75428D96 for ; Fri, 31 May 2019 23:19:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726845AbfEaXTN (ORCPT ); Fri, 31 May 2019 19:19:13 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:36262 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726842AbfEaXTN (ORCPT ); Fri, 31 May 2019 19:19:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344751; bh=4I+6H6t4R1PSAbDphFTCodzdmZKek818TwRA7drv09Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=VSdw5JFulZD4g+jw/qvyKBa8m5oLN7B9maQC16FFmu3b+Por4c/iHdb5VUleg0imb8JSMLRYNHV480YVoG7V8I1hJo3BIF9Or9O19P4J6E7c8rhITxZ6GHQdkCNPivbwLbnEUEEtpQS1Sb+0C2yReW048D+HPRr5B0BrV2t3XTnDbt4U47m64CTt289d0ZWCsY4kyk/KR+r1mz+Lxt0iF09frjR2SA+vljkDgMGeIgn2egHfHz+eesQklOybDjtpLKKf7R9jXGrqX/oJ8oiDuqjN7PVCCdpY12TU/aeKMIYmCq8NdkmT75KScyi4R6J4qdNALpyS5khxPE8v+VFvUw== X-YMail-OSG: Poq6k.8VM1nIRnT50r8T1qFXoKuv9Q1OgTWe1V9wDfy4FbzpC_ecEwq61uCkIJM pb060yiQ_YeEfuM.NOjB5x9o3vQ_ux8vew9IUk2vKbmO4mkjq3jASyiSmml2LQnJ37nLC2Z0TINf WZ7HJQHzooTMh9XXz.4gfWXyf2QZa_PqXw3_vZh0p5CB8zQWW.iXQilm66DfOLvDu98X_JzyI14Q zLS0JO3Aa1_fREb.5YfTW..cxA2ohnidSB8nElgGSkqCZ9i_qm7wLZwhmSnOyJu.G4bWHrEzxzXk ULy3Ad62Zqn_1FnBxKP.T8sv8cjcaIaqxEm3ZFiz3psH.FqaM4L9wZFd.Gv9jMPZ61N1Cm6KCwDQ gYta0toLraF9rNluhWuVI1FJ.AIS_VrTWHrlZwBBA0rYuPkf_zQNhBT8_GtkqZjSVDYu8_Ehr3zD tub2fks7qvzgHnb8yAfn7m4M.nse85lCYJDUbBGj8iNPH9a27ixqY2CK72hPsONGlwMvtzbgdqJc vWjEQCABClqoK6NdHmssVSL7wqqnu1Qqwjyfypl_TJhj109ZSEuK2Mf5.6dv5ScqHkMFDthE5y4T Qvd0btj.4FnbL7tYq7bwqCs1pazqPBKi16tQ9ox44I6tAjdKZxaFjz69vVxYWkFv6pPZy1spD750 s4fiEBfBd5FynXs3vyQdHRqooig5mRacnYyvK.VHJ_Zj34mxxtdZWIkl.otKnMZk1f3JMWOrszUr N8w5m7W_Uqkt.1YOmCLxT9rsY9BsnrrEyqJsmi7p0ikNkbug_MB6uzuVmstkNsacmS0pv9H5G4yj IBXeHt_2I4XdTzbbNEwPNsGhgcgq.CHIQPML7zmX.OFxg1KYhSfL_2_L8jeb77HyNIWPxO29isQ8 IMyuqsL0DkrzKwi_QpD11TZyUbK_mDmRxMHPfJA_B.fej2rqofJIF.656HQE0.kV0xhxNc6PtRET eGGh2IHHv6co3BecLC56shTKR0xrclRQpqEqFH3KgNbRZ6Z23jd4v25qzOQms6pBlvUrX1K1_83F vGUjGqUqViAwBAdRpbNVK_ZtiUodAhVPli3NO8ETqwfyBX7fiDlPMaz8uvN8Ktosk9Pto4aranLN 0Nug6W92bL_sZGPeEykA_0UmgYcgF3ujrfIdLFbw_QrxQSknFQwfNLbD6RJj6Ma2liYrsFXdeEpc vOkazonuIXOdFWdRz_CGEHDnQT4LlEeV.SlxiF1AALNDhNFybflmCV9DPfBDejXS0cYYXNTDohk0 PVZUbNlSBzvNa3evgefQLHddZgkfRx8tT6Ot4QMPZhsBdD2XdJXM3F8AqDw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:19:11 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp410.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 6dfb1cc58eca6b211ba8deba6fd0269d; Fri, 31 May 2019 23:19:08 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in release_secctx hooks Date: Fri, 31 May 2019 16:10:08 -0700 Message-Id: <20190531231020.628-47-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org 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 | 6 +++++- security/selinux/hooks.c | 4 ++-- security/smack/smack_lsm.c | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index d4ace7af4950..3a779a0f9e15 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1329,7 +1329,6 @@ * @release_secctx: * Release the security context. * @secdata contains the security context. - * @seclen contains the length of the security context. * * Security hooks for Audit * @@ -1663,7 +1662,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 44a4402073d7..029d2f4fe48c 100644 --- a/security/security.c +++ b/security/security.c @@ -1996,7 +1996,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) { } From patchwork Fri May 31 23:10: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: 10970967 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 9AD9C13AD for ; Fri, 31 May 2019 23:19:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8362928D92 for ; Fri, 31 May 2019 23:19:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7592828D96; Fri, 31 May 2019 23: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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 1C7B128D92 for ; Fri, 31 May 2019 23:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726700AbfEaXTR (ORCPT ); Fri, 31 May 2019 19:19:17 -0400 Received: from sonic303-9.consmr.mail.bf2.yahoo.com ([74.6.131.48]:45409 "EHLO sonic303-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726843AbfEaXTR (ORCPT ); Fri, 31 May 2019 19:19:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344752; bh=fEFSaTJW0PhJ/+1XDLyA9EJN3fv5fqnG/83jcoBEXmU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=Km/Be437jnj4mqynUq4/M7BO6USdFwX49Oi3omkKiekaAuPzq8GhmcEC1sMTxQN5ydRqJhZX1b/7k7eY/cOR543YqYzbEW6NbLod5g8N6Bc2QyhuO4mgsd/vp4OuohMno7G+CqqAXDb5EM8474QdWyRt4mpVhi3fGZqqld8tpfwxxI8cuNAYhdHCBE7VPxuvqC9vvhgNZXBlNQ76F4UrKFSefWnvQ+PKzEL53XnEEB7rSrkCly61OtEPQOockrObGb0QkQsOe6cq108YjyqAAMrHC4BdB2wwuPH14Zlw8jo0knWzylRweS3GvpEYJ2mvjHYJ467zz5SHHBA9b19TSA== X-YMail-OSG: bfQrwsIVM1kK_syUY_fanW8TIMKnN2fofWLCXIu8u.v0U59qHUOID3hzJMOEuXM WUESOch4PYtYZ9OJCdA1xffmw0dud17OESvdKVqIWwjnuFkBGK4WduQbF7KtZXtN.vAG1dnPD849 _Yd0NWiiSDxOlK0BJ7h4mUm0KhEae__ZoemFMnjKYQPnIWX3P2u7jOtUrGzAwT5j6ueDxL_1G0us sBTw9S5w6FXtwMRUcEkG.0Op1LjQJcK_xiipEo6NO1YpeEiBd7NiDRkAl4aILGILin3qIMfDoQa9 qN1nTuETjno7Axao007VtWRJFRRf5oG7LnlbmTHn.CFpO4hcW82GJrBHTJoKVc09lZLFG97cStDw EouAe.ly8hXwWXRd1UbzVxlzstvC3WnQssj1HII7tg6SAw_kcAq6k70t_CzzBHtndrVrigLhtlUq VGFVfyE7qOLiSV3X1Cn0ZRIb01dyNHImtf6gnif4DZtEFnhW0fF68lYHymTkCy1jGgiS7x9clA89 eecYwz4Gbedn4qOLnrcH.wZwqK.9_N9o3NwS.mp1ke4m4oLOzTs5BG1xltlR0WBOPqlV4TgFe7q3 wspn01Jp2otX31AR2Rj.8NufavbWohiYRuRDRwM1osKq1bK.ozEPUMzsgYJNTFQtXmlDi7TowZgY VnOfZ5WggSvn1nZStZyam.BqHO6BOxasy7CqK9P3NoRltaacKjgJXf9JKHdCr_HLUpKNLficbXNV vmTEDyDn4W0HNzUHpvhkYOmJloxi31FNIFF1ZLJkDxt3uSIWlcm34Pqmdm0Ht82FMtuYvIXDMJ9I OFDVWdt.TBap70IjE4s0zZ9xAa8hLLOh8zeE7oXS6M7V2_n4C0JwuChPzXKmku6gijrKcnylNTta 0IftPZ1Fyr_Shpb1edEXTvFWcF76xRK73Wk5rU0bHPRtulMbz_5XvTCB3k3r1obZHVhA8rh0.jPc idgbcaJNzP2t5e6mtB6Ighfj0QppLIRU5sk8XrI2AlA3XoQux2P4xeen8stRzYTERztElMhsVZP6 51YuAk6xOf7dpQ.RWzir.hkpfrv0RTtrReqOG1L5ITASoe3OwTgSqX7Z2KpGn1n3Rd.2_1ZH7VtW .ibJR3yfYZpSH5KPSTeQ4yn6VM9SQOvbf6CVMJ7sttQ98aRYuWz.gze55sfplISifyH_LjqUPuw7 AaGhTkQDxRQRx93DBVEO8EI1VZkx6C0PcwlMaX6K_kfX4f6nBirrIHtCOMH6ogWPylDKMIFCT44Q 7TZCY9CU_OmV2xUWDZXeMelUQNWeqt9KgBtVcY3uJlPeD6TPV Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:19:12 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp410.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 6dfb1cc58eca6b211ba8deba6fd0269d; Fri, 31 May 2019 23:19:09 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, 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/58] LSM: Use lsm_context in security_release_secctx Date: Fri, 31 May 2019 16:10:09 -0700 Message-Id: <20190531231020.628-48-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Convert security_release_secctx 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 --- drivers/android/binder.c | 21 +++++++-------- fs/kernfs/dir.c | 9 ++++--- fs/kernfs/inode.c | 2 +- fs/nfs/nfs4proc.c | 9 +++++-- fs/nfsd/nfs4xdr.c | 2 +- include/linux/security.h | 4 +-- include/net/scm.h | 10 +++---- kernel/audit.c | 27 +++++++++---------- kernel/auditsc.c | 27 +++++++++---------- net/ipv4/ip_sockglue.c | 9 +++---- net/netfilter/nf_conntrack_netlink.c | 10 +++---- net/netfilter/nf_conntrack_standalone.c | 9 +++---- net/netfilter/nfnetlink_queue.c | 28 ++++++++++--------- net/netlabel/netlabel_unlabeled.c | 36 ++++++++++++------------- net/netlabel/netlabel_user.c | 11 ++++---- security/security.c | 10 +++---- 16 files changed, 109 insertions(+), 115 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 0eeb5b75da5b..c2cfef13257c 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -2874,8 +2874,7 @@ static void binder_transaction(struct binder_proc *proc, binder_size_t last_fixup_min_off = 0; struct binder_context *context = proc->context; int t_debug_id = atomic_inc_return(&binder_last_id); - char *secctx = NULL; - u32 secctx_sz = 0; + struct lsm_context lc = { .len = 0, .context = NULL, }; e = binder_transaction_log_add(&binder_transaction_log); e->debug_id = t_debug_id; @@ -3122,14 +3121,14 @@ static void binder_transaction(struct binder_proc *proc, struct lsm_export le; security_task_getsecid(proc->tsk, &le); - ret = security_secid_to_secctx(&le, &secctx, &secctx_sz); + ret = security_secid_to_secctx(&le, &lc.context, &lc.len); if (ret) { return_error = BR_FAILED_REPLY; return_error_param = ret; return_error_line = __LINE__; goto err_get_secctx_failed; } - extra_buffers_size += ALIGN(secctx_sz, sizeof(u64)); + extra_buffers_size += ALIGN(lc.len, sizeof(u64)); } trace_binder_transaction(reply, t, target_node); @@ -3148,18 +3147,18 @@ static void binder_transaction(struct binder_proc *proc, t->buffer = NULL; goto err_binder_alloc_buf_failed; } - if (secctx) { + if (lc.context) { size_t buf_offset = ALIGN(tr->data_size, sizeof(void *)) + ALIGN(tr->offsets_size, sizeof(void *)) + ALIGN(extra_buffers_size, sizeof(void *)) - - ALIGN(secctx_sz, sizeof(u64)); + ALIGN(lc.len, sizeof(u64)); t->security_ctx = (uintptr_t)t->buffer->user_data + buf_offset; binder_alloc_copy_to_buffer(&target_proc->alloc, t->buffer, buf_offset, - secctx, secctx_sz); - security_release_secctx(secctx, secctx_sz); - secctx = NULL; + lc.context, lc.len); + security_release_secctx(&lc); + lc.context = NULL; } t->buffer->debug_id = t->debug_id; t->buffer->transaction = t; @@ -3479,8 +3478,8 @@ static void binder_transaction(struct binder_proc *proc, t->buffer->transaction = NULL; binder_alloc_free_buf(&target_proc->alloc, t->buffer); err_binder_alloc_buf_failed: - if (secctx) - security_release_secctx(secctx, secctx_sz); + if (lc.context) + security_release_secctx(&lc); err_get_secctx_failed: kfree(tcomplete); binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE); diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index b84d635567d3..11672c075a8b 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -532,9 +532,12 @@ void kernfs_put(struct kernfs_node *kn) kfree_const(kn->name); if (kn->iattr) { - if (kn->iattr->ia_secdata) - security_release_secctx(kn->iattr->ia_secdata, - kn->iattr->ia_secdata_len); + if (kn->iattr->ia_secdata) { + struct lsm_context lc; /* Scaffolding -Casey */ + lc.context = kn->iattr->ia_secdata; + lc.len = kn->iattr->ia_secdata_len; + security_release_secctx(&lc); + } simple_xattrs_free(&kn->iattr->xattrs); kmem_cache_free(kernfs_iattrs_cache, kn->iattr); } diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 41c5afc698fc..45781f0da80f 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -370,7 +370,7 @@ static int kernfs_security_xattr_set(const struct xattr_handler *handler, mutex_unlock(&kernfs_mutex); if (lc.context) - security_release_secctx(lc.context, lc.len); + security_release_secctx(&lc); return error; } diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index de000649f9f3..8dee01eda643 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -134,8 +134,13 @@ nfs4_label_init_security(struct inode *dir, struct dentry *dentry, static inline void nfs4_label_release_security(struct nfs4_label *label) { - if (label) - security_release_secctx(label->label, label->len); + struct lsm_context lc; /* Scaffolding -Casey */ + + if (label) { + lc.context = label->label; + lc.len = label->len; + security_release_secctx(&lc); + } } static inline u32 *nfs4_bitmask(struct nfs_server *server, struct nfs4_label *label) { diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 1bf34730d054..3d1251bd588f 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2918,7 +2918,7 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp, out: #ifdef CONFIG_NFSD_V4_SECURITY_LABEL if (lc.context) - security_release_secctx(lc.context, lc.len); + security_release_secctx(&lc); #endif /* CONFIG_NFSD_V4_SECURITY_LABEL */ kfree(acl); if (tempfh) { diff --git a/include/linux/security.h b/include/linux/security.h index 3f757b2d8275..57ce9b824eef 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -433,7 +433,7 @@ 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(struct lsm_context *cp, struct lsm_export *l); -void security_release_secctx(char *secdata, u32 seclen); +void security_release_secctx(struct lsm_context *cp); void security_inode_invalidate_secctx(struct inode *inode); int security_inode_notifysecctx(struct inode *inode, struct lsm_context *cp); @@ -1222,7 +1222,7 @@ static inline int security_secctx_to_secid(struct lsm_context *cp, return -EOPNOTSUPP; } -static inline void security_release_secctx(char *secdata, u32 seclen) +static inline void security_release_secctx(struct lsm_context *cp); { } diff --git a/include/net/scm.h b/include/net/scm.h index b5d1c24318e3..7e242ebdd258 100644 --- a/include/net/scm.h +++ b/include/net/scm.h @@ -92,16 +92,16 @@ static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, #ifdef CONFIG_SECURITY_NETWORK static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) { - char *secdata; - u32 seclen; + struct lsm_context lc; int err; if (test_bit(SOCK_PASSSEC, &sock->flags)) { - err = security_secid_to_secctx(&scm->le, &secdata, &seclen); + err = security_secid_to_secctx(&scm->le, &lc.context, &lc.len); if (!err) { - put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, seclen, secdata); - security_release_secctx(secdata, seclen); + put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, + lc.len, lc.context); + security_release_secctx(&lc); } } } diff --git a/kernel/audit.c b/kernel/audit.c index d83d1f05c95d..269c76fefe40 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -1191,8 +1191,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) struct audit_buffer *ab; u16 msg_type = nlh->nlmsg_type; struct audit_sig_info *sig_data; - char *ctx = NULL; - u32 len; + struct lsm_context lc = { .context = NULL, .len = 0, }; err = audit_netlink_ok(skb, msg_type); if (err) @@ -1428,27 +1427,26 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) break; } case AUDIT_SIGNAL_INFO: - len = 0; if (lsm_export_any(&audit_sig_lsm)) { - err = security_secid_to_secctx(&audit_sig_lsm, &ctx, - &len); + err = security_secid_to_secctx(&audit_sig_lsm, + &lc.context, &lc.len); if (err) return err; } - sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL); + sig_data = kmalloc(sizeof(*sig_data) + lc.len, GFP_KERNEL); if (!sig_data) { if (lsm_export_any(&audit_sig_lsm)) - security_release_secctx(ctx, len); + security_release_secctx(&lc); return -ENOMEM; } sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid); sig_data->pid = audit_sig_pid; if (lsm_export_any(&audit_sig_lsm)) { - memcpy(sig_data->ctx, ctx, len); - security_release_secctx(ctx, len); + memcpy(sig_data->ctx, lc.context, lc.len); + security_release_secctx(&lc); } audit_send_reply(skb, seq, AUDIT_SIGNAL_INFO, 0, 0, - sig_data, sizeof(*sig_data) + len); + sig_data, sizeof(*sig_data) + lc.len); kfree(sig_data); break; case AUDIT_TTY_GET: { @@ -2070,24 +2068,23 @@ void audit_log_key(struct audit_buffer *ab, char *key) int audit_log_task_context(struct audit_buffer *ab) { - char *ctx = NULL; - unsigned len; int error; struct lsm_export le; + struct lsm_context lc = { .context = NULL, }; security_task_getsecid(current, &le); if (!lsm_export_any(&le)) return 0; - error = security_secid_to_secctx(&le, &ctx, &len); + error = security_secid_to_secctx(&le, &lc.context, &lc.len); if (error) { if (error != -EINVAL) goto error_path; return 0; } - audit_log_format(ab, " subj=%s", ctx); - security_release_secctx(ctx, len); + audit_log_format(ab, " subj=%s", lc.context); + security_release_secctx(&lc); return 0; error_path: diff --git a/kernel/auditsc.c b/kernel/auditsc.c index d64775f4bb1b..4dab81c7aca0 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -938,9 +938,8 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, unsigned int sessionid, struct lsm_export *l, char *comm) { + struct lsm_context lc = { .context = NULL, }; struct audit_buffer *ab; - char *ctx = NULL; - u32 len; int rc = 0; ab = audit_log_start(context, GFP_KERNEL, AUDIT_OBJ_PID); @@ -951,12 +950,12 @@ 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 (lsm_export_any(l)) { - if (security_secid_to_secctx(l, &ctx, &len)) { + if (security_secid_to_secctx(l, &lc.context, &lc.len)) { audit_log_format(ab, " obj=(none)"); rc = 1; } else { - audit_log_format(ab, " obj=%s", ctx); - security_release_secctx(ctx, len); + audit_log_format(ab, " obj=%s", lc.context); + security_release_secctx(&lc); } } audit_log_format(ab, " ocomm="); @@ -1191,14 +1190,13 @@ static void show_special(struct audit_context *context, int *call_panic) from_kgid(&init_user_ns, context->ipc.gid), context->ipc.mode); if (lsm_export_any(l)) { - char *ctx = NULL; - u32 len; - if (security_secid_to_secctx(l, &ctx, &len)) { + struct lsm_context lc = { .context = NULL, }; + if (security_secid_to_secctx(l, &lc.context, &lc.len)) { audit_log_format(ab, " osid=(unknown)"); *call_panic = 1; } else { - audit_log_format(ab, " obj=%s", ctx); - security_release_secctx(ctx, len); + audit_log_format(ab, " obj=%s", lc.context); + security_release_secctx(&lc); } } if (context->ipc.has_perm) { @@ -1342,16 +1340,15 @@ static void audit_log_name(struct audit_context *context, struct audit_names *n, MAJOR(n->rdev), MINOR(n->rdev)); if (lsm_export_any(&n->olsm)) { - char *ctx = NULL; - u32 len; + struct lsm_context lc; - if (security_secid_to_secctx(&n->olsm, &ctx, &len)) { + if (security_secid_to_secctx(&n->olsm, &lc.context, &lc.len)) { audit_log_format(ab, " osid=(unknown)"); if (call_panic) *call_panic = 2; } else { - audit_log_format(ab, " obj=%s", ctx); - security_release_secctx(ctx, len); + audit_log_format(ab, " obj=%s", lc.context); + security_release_secctx(&lc); } } diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index a4f37ba6dbe2..18a7fab8b2d3 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -131,20 +131,19 @@ 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; + struct lsm_context lc; int err; err = security_socket_getpeersec_dgram(NULL, skb, &le); if (err) return; - err = security_secid_to_secctx(&le, &secdata, &seclen); + err = security_secid_to_secctx(&le, &lc.context, &lc.len); if (err) return; - put_cmsg(msg, SOL_IP, SCM_SECURITY, seclen, secdata); - security_release_secctx(secdata, seclen); + put_cmsg(msg, SOL_IP, SCM_SECURITY, lc.len, lc.context); + security_release_secctx(&lc); } static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb) diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index d10cc1924e46..49bce1b085ce 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -328,16 +328,16 @@ static int ctnetlink_dump_mark(struct sk_buff *skb, const struct nf_conn *ct) static int ctnetlink_dump_secctx(struct sk_buff *skb, const struct nf_conn *ct) { struct nlattr *nest_secctx; - int len, ret; - char *secctx; + int ret; struct lsm_export le; + struct lsm_context lc; 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); + ret = security_secid_to_secctx(&le, &lc.context, &lc.len); if (ret) return 0; @@ -346,13 +346,13 @@ static int ctnetlink_dump_secctx(struct sk_buff *skb, const struct nf_conn *ct) if (!nest_secctx) goto nla_put_failure; - if (nla_put_string(skb, CTA_SECCTX_NAME, secctx)) + if (nla_put_string(skb, CTA_SECCTX_NAME, lc.context)) goto nla_put_failure; nla_nest_end(skb, nest_secctx); ret = 0; nla_put_failure: - security_release_secctx(secctx, len); + security_release_secctx(&lc); return ret; } #else diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index d353f3efc5a5..97d16a51504b 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -173,9 +173,8 @@ static void ct_seq_stop(struct seq_file *s, void *v) static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) { int ret; - u32 len; - char *secctx; struct lsm_export le; + struct lsm_context lc; /* Whichever LSM may be using the secmark */ lsm_export_init(&le); @@ -183,13 +182,13 @@ static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) le.selinux = ct->secmark; le.smack = ct->secmark; - ret = security_secid_to_secctx(&le, &secctx, &len); + ret = security_secid_to_secctx(&le, &lc.context, &lc.len); if (ret) return; - seq_printf(s, "secctx=%s ", secctx); + seq_printf(s, "secctx=%s ", lc.context); - security_release_secctx(secctx, len); + security_release_secctx(&lc); } #else static inline void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index a0670137477b..b70871693368 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -307,9 +307,9 @@ static int nfqnl_put_sk_uidgid(struct sk_buff *skb, struct sock *sk) 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; + struct lsm_context lc = { .context = NULL, .len = 0, }; if (!skb || !sk_fullsock(skb->sk)) return 0; @@ -322,12 +322,15 @@ static u32 nfqnl_get_sk_secctx(struct sk_buff *skb, char **secdata) le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; le.selinux = skb->secmark; le.smack = skb->secmark; - security_secid_to_secctx(&le, secdata, &seclen); + security_secid_to_secctx(&le, &lc.context, &lc.len); + *secdata = lc.context; } read_unlock_bh(&skb->sk->sk_callback_lock); + return lc.len; +#else + return 0; #endif - return seclen; } static u32 nfqnl_get_bridge_size(struct nf_queue_entry *entry) @@ -403,8 +406,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, enum ip_conntrack_info uninitialized_var(ctinfo); struct nfnl_ct_hook *nfnl_ct; bool csum_verify; - char *secdata = NULL; - u32 seclen = 0; + struct lsm_context lc = { .context = NULL, }; size = nlmsg_total_size(sizeof(struct nfgenmsg)) + nla_total_size(sizeof(struct nfqnl_msg_packet_hdr)) @@ -470,9 +472,9 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, } if ((queue->flags & NFQA_CFG_F_SECCTX) && entskb->sk) { - seclen = nfqnl_get_sk_secctx(entskb, &secdata); - if (seclen) - size += nla_total_size(seclen); + lc.len = nfqnl_get_sk_secctx(entskb, &lc.context); + if (lc.len) + size += nla_total_size(lc.len); } skb = alloc_skb(size, GFP_ATOMIC); @@ -605,7 +607,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, nfqnl_put_sk_uidgid(skb, entskb->sk) < 0) goto nla_put_failure; - if (seclen && nla_put(skb, NFQA_SECCTX, seclen, secdata)) + if (lc.len && nla_put(skb, NFQA_SECCTX, lc.len, lc.context)) goto nla_put_failure; if (ct && nfnl_ct->build(skb, ct, ctinfo, NFQA_CT, NFQA_CT_INFO) < 0) @@ -633,8 +635,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, } nlh->nlmsg_len = skb->len; - if (seclen) - security_release_secctx(secdata, seclen); + if (lc.context) + security_release_secctx(&lc); return skb; nla_put_failure: @@ -642,8 +644,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, kfree_skb(skb); net_err_ratelimited("nf_queue: error creating packet message\n"); nlmsg_failure: - if (seclen) - security_release_secctx(secdata, seclen); + if (lc.context) + security_release_secctx(&lc); return NULL; } diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index 707ea5a364b0..4c4a8f6df261 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -387,8 +387,6 @@ int netlbl_unlhsh_add(struct net *net, struct net_device *dev; struct netlbl_unlhsh_iface *iface; struct audit_buffer *audit_buf = NULL; - char *secctx = NULL; - u32 secctx_len; if (addr_len != sizeof(struct in_addr) && addr_len != sizeof(struct in6_addr)) @@ -451,9 +449,10 @@ int netlbl_unlhsh_add(struct net *net, unlhsh_add_return: rcu_read_unlock(); if (audit_buf != NULL) { - 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); + struct lsm_context lc; + if (security_secid_to_secctx(l, &lc.context, &lc.len) == 0) { + audit_log_format(audit_buf, " sec_obj=%s", lc.context); + security_release_secctx(&lc); } audit_log_format(audit_buf, " res=%u", ret_val == 0 ? 1 : 0); audit_log_end(audit_buf); @@ -484,8 +483,6 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, struct netlbl_unlhsh_addr4 *entry; struct audit_buffer *audit_buf; struct net_device *dev; - char *secctx; - u32 secctx_len; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af4list_remove(addr->s_addr, mask->s_addr, @@ -499,6 +496,7 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, audit_buf = netlbl_audit_start_common(AUDIT_MAC_UNLBL_STCDEL, audit_info); if (audit_buf != NULL) { + struct lsm_context lc; dev = dev_get_by_index(net, iface->ifindex); netlbl_af4list_audit_addr(audit_buf, 1, (dev != NULL ? dev->name : NULL), @@ -507,9 +505,9 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, dev_put(dev); if (entry != NULL && 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); + &lc.context, &lc.len) == 0) { + audit_log_format(audit_buf, " sec_obj=%s", lc.context); + security_release_secctx(&lc); } audit_log_format(audit_buf, " res=%u", entry != NULL ? 1 : 0); audit_log_end(audit_buf); @@ -560,6 +558,7 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, audit_buf = netlbl_audit_start_common(AUDIT_MAC_UNLBL_STCDEL, audit_info); if (audit_buf != NULL) { + struct lsm_context lc; dev = dev_get_by_index(net, iface->ifindex); netlbl_af6list_audit_addr(audit_buf, 1, (dev != NULL ? dev->name : NULL), @@ -568,9 +567,9 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, dev_put(dev); if (entry != NULL && 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); + &lc.context, &lc.len) == 0) { + audit_log_format(audit_buf, " sec_obj=%s", lc.context); + security_release_secctx(&lc); } audit_log_format(audit_buf, " res=%u", entry != NULL ? 1 : 0); audit_log_end(audit_buf); @@ -1082,9 +1081,8 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, struct netlbl_unlhsh_walk_arg *cb_arg = arg; struct net_device *dev; void *data; - char *secctx; - u32 secctx_len; struct lsm_export *lep; + struct lsm_context lc; data = genlmsg_put(cb_arg->skb, NETLINK_CB(cb_arg->nl_cb->skb).portid, cb_arg->seq, &netlbl_unlabel_gnl_family, @@ -1139,14 +1137,14 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, lep = (struct lsm_export *)&addr6->le; } - ret_val = security_secid_to_secctx(lep, &secctx, &secctx_len); + ret_val = security_secid_to_secctx(lep, &lc.context, &lc.len); if (ret_val != 0) goto list_cb_failure; ret_val = nla_put(cb_arg->skb, NLBL_UNLABEL_A_SECCTX, - secctx_len, - secctx); - security_release_secctx(secctx, secctx_len); + lc.len, + lc.context); + security_release_secctx(&lc); if (ret_val != 0) goto list_cb_failure; diff --git a/net/netlabel/netlabel_user.c b/net/netlabel/netlabel_user.c index 2cc96305c841..0418f0935199 100644 --- a/net/netlabel/netlabel_user.c +++ b/net/netlabel/netlabel_user.c @@ -98,8 +98,7 @@ struct audit_buffer *netlbl_audit_start_common(int type, struct netlbl_audit *audit_info) { struct audit_buffer *audit_buf; - char *secctx; - u32 secctx_len; + struct lsm_context lc; if (audit_enabled == AUDIT_OFF) return NULL; @@ -113,10 +112,10 @@ struct audit_buffer *netlbl_audit_start_common(int type, audit_info->sessionid); 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); + security_secid_to_secctx(&audit_info->le, &lc.context, + &lc.len) == 0) { + audit_log_format(audit_buf, " subj=%s", lc.context); + security_release_secctx(&lc); } return audit_buf; diff --git a/security/security.c b/security/security.c index 029d2f4fe48c..3da7302d20ec 100644 --- a/security/security.c +++ b/security/security.c @@ -1981,7 +1981,7 @@ int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) if (secdata) *secdata = lc.context; else - security_release_secctx(lc.context, lc.len); + security_release_secctx(&lc); *seclen = lc.len; return rc; } @@ -1994,13 +1994,9 @@ int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l) } EXPORT_SYMBOL(security_secctx_to_secid); -void security_release_secctx(char *secdata, u32 seclen) +void security_release_secctx(struct lsm_context *cp) { - struct lsm_context lc; - - lc.context = secdata; - lc.len = seclen; - call_one_void_hook(release_secctx, &lc); + call_one_void_hook(release_secctx, cp); } EXPORT_SYMBOL(security_release_secctx); From patchwork Fri May 31 23:10: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: 10970971 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 2FF2818A6 for ; Fri, 31 May 2019 23:19:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1FDA428D92 for ; Fri, 31 May 2019 23:19:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1486928D97; Fri, 31 May 2019 23:19:31 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 26EEE28D94 for ; Fri, 31 May 2019 23:19:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726847AbfEaXT3 (ORCPT ); Fri, 31 May 2019 19:19:29 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:34768 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726843AbfEaXT3 (ORCPT ); Fri, 31 May 2019 19:19:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344766; bh=20Rb5jYWo49Bap1qMEB12Igt97pOzw5rUDuKwPsIKtU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=hCVaMebSwxeFwYQ2t/R2ejB/D4ahLQSXyGfeqsf7HqlIVKXYoCfCS2+bPE+FGzvhAsdW2YucOq6qfLthKUtmBvFr2RMOLyzgege38bg1ZMFPiPGgvofVhi1ocTXPzB6DZtiwxKNVEUpwwKv7JkNpt6Rc8COk122ZAfKJ+mgGjMUwTlqQuJUqTe2mKsOEb46rPhcchoM9t5zwKFoRtVD5ehUNPJqCtlMKPUhtGixxpI3/pz+7Y2+cHvU2jLnP7tr+sC4VrVtTFsUC74kTxp+tKBwxiC3rzekIYdE3H9J7ZQpjHB0zfna0mWN415edY5XwPvDk/rhqvKro0tt2MgkHAQ== X-YMail-OSG: RzTUNEwVM1kXO3s1SYmRRBd2maF5r1EglNtG01Lgh7Bco.yfolYT5mZAV7ERMST RjCGWUooHOeTdDPTxSU7VN_ihYj1WSTsYJoGvn0RwUYaSEw0bA8WSXXS17.Lhvqa7HKe1BbaLkvy gSGBSp3TulW6iGdaAe7MIUzrXzt5mfk_cy7VJ3CeyVVatouZOMIHDLsSmd3nGv2V.lPEtXS4GoFQ 3twc9XFIfTg9tMi.feZTPosHCOvFPJd9agb_7mLdFJ0YYYBtBnnmh_5Q_0cUixeeNZwQooHDGGlk 1EskzUEIyz2YnNIXBUX1cCgZNZ7XAstDrhvn93772ftkXoOj7wQQ1zM1i79RCMogAqA2mzfaeIIx eVkgSGPac8ncTR5jvXMxhueRezK3r2DjyxEjd50NLD1xMc7H1RkQ2xfOh8Im54qaF2uY9W6pZWEL IRSMP31ABuxpz9UQX38pILDLdKPGZKsrm.7D41aigb9PRcltX8gzYvN8AB4.0B7xFIQD7bbjby61 iepkaIfccm6ggm.SSFQQjVitOkk8aFG66haPML5ZPtynRgOa4fkHlHihCkbmoFkPZOmUa.ZMsNE1 AcE1tOPvb5aDYPKzxgP8S3l5uG1rhLzOJLDVo62EtOty2fkF6tvbyuZ2PoDMnWmPGllZCglvCWts 2xtDXUp9cSmGduJlpiRTOvSU6vZ.CK7d1lkYQivSeLNGOW0ynkC3gE9qgelTBN54E3Xrk.Nfar6l mSq0Lz6gaH30.yF8z4IjSQ5mGC1CMpgx4kIUB5wrslVoufAO69NbRofwNA2GIK0yE0cWo71XeDNb HLi.G9S531tGl3ehXILj_DDRU_NTAYOzZV7xqNHWDOSu.54G_hd7Y1Nvtu_08Iuged2CA92bSyZe 5q12h8xdrP3TmR3X0CC2mOBCYjg4YA4PChgzAGH_RxjZ32NQ5kXZJke6DDneemTgSA4cw8GOPUQc WeiUOUGFTDA7yFrfz1IqXbBChRRKhB.RTy8nkLqCIFn9YgTJDSwwkgmKmfyID_ubTd3.18RF01g0 gJV0D_zZxpHjc5TRDLkfKCOP8D1JiVY4SHPx9WTFK4NBkU0TCHqnyflPPA7__0rOLqovNmAgpjKG h1CUEUX3rnAYnb2Kpltl8xdUZc4yvoULRfQybNScSkiceicc6CSvfOCdLcXpfhel6J9BZ9XRdMZA EOwZna9x2KO7T10gYt8sjRRqqI8y7EKxtv2voDCHoRQaZ658elNcnUbDlhUvRu9Yqk6uDsTaM5bw Wayrx0ajBZu_HvFJIGCGBq8Qn2SAUHfaEHwlQdn4.xGti.Lm2I4CTw7au3g-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:19:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp423.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID c6e11b7d380bc40fa0460f8b71bad1e7; Fri, 31 May 2019 23:19:24 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 48/58] LSM: Use lsm_context in security_secid_to_secctx Date: Fri, 31 May 2019 16:10:10 -0700 Message-Id: <20190531231020.628-49-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Convert security_secid_to_secctx 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. Add a flag for lsm_export to indicate that the caller of security_secid_to_secctx() is only interested in the length of the context. Signed-off-by: Casey Schaufler --- drivers/android/binder.c | 2 +- include/linux/security.h | 13 +++++++------ include/net/scm.h | 2 +- kernel/audit.c | 5 ++--- kernel/auditsc.c | 10 +++++----- net/ipv4/ip_sockglue.c | 2 +- net/netfilter/nf_conntrack_netlink.c | 11 ++++++----- net/netfilter/nf_conntrack_standalone.c | 2 +- net/netfilter/nfnetlink_queue.c | 2 +- net/netlabel/netlabel_unlabeled.c | 12 ++++-------- net/netlabel/netlabel_user.c | 3 +-- security/apparmor/secid.c | 3 +-- security/security.c | 13 ++----------- security/selinux/hooks.c | 3 +++ security/smack/smack_lsm.c | 2 +- 15 files changed, 37 insertions(+), 48 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index c2cfef13257c..58033c003cc2 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3121,7 +3121,7 @@ static void binder_transaction(struct binder_proc *proc, struct lsm_export le; security_task_getsecid(proc->tsk, &le); - ret = security_secid_to_secctx(&le, &lc.context, &lc.len); + ret = security_secid_to_secctx(&le, &lc); if (ret) { return_error = BR_FAILED_REPLY; return_error_param = ret; diff --git a/include/linux/security.h b/include/linux/security.h index 57ce9b824eef..9a9de2bafa55 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -83,10 +83,11 @@ struct lsm_export { u32 apparmor; u32 flags; }; -#define LSM_EXPORT_NONE 0x00 -#define LSM_EXPORT_SELINUX 0x01 -#define LSM_EXPORT_SMACK 0x02 -#define LSM_EXPORT_APPARMOR 0x04 +#define LSM_EXPORT_NONE 0x00000000 +#define LSM_EXPORT_SELINUX 0x00000001 +#define LSM_EXPORT_SMACK 0x00000002 +#define LSM_EXPORT_APPARMOR 0x00000004 +#define LSM_EXPORT_LENGTH 0x80000000 /* Only the length required */ static inline void lsm_export_init(struct lsm_export *l) { @@ -431,7 +432,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(struct lsm_export *l, char **secdata, u32 *seclen); +int security_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp); int security_secctx_to_secid(struct lsm_context *cp, struct lsm_export *l); void security_release_secctx(struct lsm_context *cp); @@ -1211,7 +1212,7 @@ static inline int security_ismaclabel(const char *name) } static inline int security_secid_to_secctx(struct lsm_export *l, - char **secdata, u32 *seclen) + struct lsm_seccontext *cp) { return -EOPNOTSUPP; } diff --git a/include/net/scm.h b/include/net/scm.h index 7e242ebdd258..b25ca3b6a514 100644 --- a/include/net/scm.h +++ b/include/net/scm.h @@ -96,7 +96,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->le, &lc.context, &lc.len); + err = security_secid_to_secctx(&scm->le, &lc); if (!err) { put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, diff --git a/kernel/audit.c b/kernel/audit.c index 269c76fefe40..203e5b14bea4 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -1428,8 +1428,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) } case AUDIT_SIGNAL_INFO: if (lsm_export_any(&audit_sig_lsm)) { - err = security_secid_to_secctx(&audit_sig_lsm, - &lc.context, &lc.len); + err = security_secid_to_secctx(&audit_sig_lsm, &lc); if (err) return err; } @@ -2076,7 +2075,7 @@ int audit_log_task_context(struct audit_buffer *ab) if (!lsm_export_any(&le)) return 0; - error = security_secid_to_secctx(&le, &lc.context, &lc.len); + error = security_secid_to_secctx(&le, &lc); if (error) { if (error != -EINVAL) goto error_path; diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 4dab81c7aca0..ceefd17467f9 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -938,7 +938,7 @@ static int audit_log_pid_context(struct audit_context *context, pid_t pid, unsigned int sessionid, struct lsm_export *l, char *comm) { - struct lsm_context lc = { .context = NULL, }; + struct lsm_context lc; struct audit_buffer *ab; int rc = 0; @@ -950,7 +950,7 @@ 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 (lsm_export_any(l)) { - if (security_secid_to_secctx(l, &lc.context, &lc.len)) { + if (security_secid_to_secctx(l, &lc)) { audit_log_format(ab, " obj=(none)"); rc = 1; } else { @@ -1190,8 +1190,8 @@ static void show_special(struct audit_context *context, int *call_panic) from_kgid(&init_user_ns, context->ipc.gid), context->ipc.mode); if (lsm_export_any(l)) { - struct lsm_context lc = { .context = NULL, }; - if (security_secid_to_secctx(l, &lc.context, &lc.len)) { + struct lsm_context lc; + if (security_secid_to_secctx(l, &lc)) { audit_log_format(ab, " osid=(unknown)"); *call_panic = 1; } else { @@ -1342,7 +1342,7 @@ static void audit_log_name(struct audit_context *context, struct audit_names *n, if (lsm_export_any(&n->olsm)) { struct lsm_context lc; - if (security_secid_to_secctx(&n->olsm, &lc.context, &lc.len)) { + if (security_secid_to_secctx(&n->olsm, &lc)) { audit_log_format(ab, " osid=(unknown)"); if (call_panic) *call_panic = 2; diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 18a7fab8b2d3..56035b53952d 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -138,7 +138,7 @@ static void ip_cmsg_recv_security(struct msghdr *msg, struct sk_buff *skb) if (err) return; - err = security_secid_to_secctx(&le, &lc.context, &lc.len); + err = security_secid_to_secctx(&le, &lc); if (err) return; diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 49bce1b085ce..ea83909af6db 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -337,7 +337,7 @@ static int ctnetlink_dump_secctx(struct sk_buff *skb, const struct nf_conn *ct) le.selinux = ct->secmark; le.smack = ct->secmark; - ret = security_secid_to_secctx(&le, &lc.context, &lc.len); + ret = security_secid_to_secctx(&le, &lc); if (ret) return 0; @@ -620,20 +620,21 @@ static inline size_t ctnetlink_acct_size(const struct nf_conn *ct) static inline int ctnetlink_secctx_size(const struct nf_conn *ct) { #ifdef CONFIG_NF_CONNTRACK_SECMARK - int len, ret; + int ret; struct lsm_export le; + struct lsm_context lc; lsm_export_init(&le); - le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; + le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK | LSM_EXPORT_LENGTH; le.selinux = ct->secmark; le.smack = ct->secmark; - ret = security_secid_to_secctx(&le, NULL, &len); + ret = security_secid_to_secctx(&le, &lc); if (ret) return 0; return nla_total_size(0) /* CTA_SECCTX */ - + nla_total_size(sizeof(char) * len); /* CTA_SECCTX_NAME */ + + nla_total_size(sizeof(char) * lc.len); /* CTA_SECCTX_NAME */ #else return 0; #endif diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 97d16a51504b..797abf443a34 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -182,7 +182,7 @@ static void ct_show_secctx(struct seq_file *s, const struct nf_conn *ct) le.selinux = ct->secmark; le.smack = ct->secmark; - ret = security_secid_to_secctx(&le, &lc.context, &lc.len); + ret = security_secid_to_secctx(&le, &lc); if (ret) return; diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index b70871693368..4a3d4b52caef 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -322,7 +322,7 @@ static u32 nfqnl_get_sk_secctx(struct sk_buff *skb, char **secdata) le.flags = LSM_EXPORT_SELINUX | LSM_EXPORT_SMACK; le.selinux = skb->secmark; le.smack = skb->secmark; - security_secid_to_secctx(&le, &lc.context, &lc.len); + security_secid_to_secctx(&le, &lc); *secdata = lc.context; } diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c index 4c4a8f6df261..336d315ee8eb 100644 --- a/net/netlabel/netlabel_unlabeled.c +++ b/net/netlabel/netlabel_unlabeled.c @@ -450,7 +450,7 @@ int netlbl_unlhsh_add(struct net *net, rcu_read_unlock(); if (audit_buf != NULL) { struct lsm_context lc; - if (security_secid_to_secctx(l, &lc.context, &lc.len) == 0) { + if (security_secid_to_secctx(l, &lc) == 0) { audit_log_format(audit_buf, " sec_obj=%s", lc.context); security_release_secctx(&lc); } @@ -504,8 +504,7 @@ static int netlbl_unlhsh_remove_addr4(struct net *net, if (dev != NULL) dev_put(dev); if (entry != NULL && - security_secid_to_secctx(&entry->le, - &lc.context, &lc.len) == 0) { + security_secid_to_secctx(&entry->le, &lc) == 0) { audit_log_format(audit_buf, " sec_obj=%s", lc.context); security_release_secctx(&lc); } @@ -544,8 +543,6 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, struct netlbl_unlhsh_addr6 *entry; struct audit_buffer *audit_buf; struct net_device *dev; - char *secctx; - u32 secctx_len; spin_lock(&netlbl_unlhsh_lock); list_entry = netlbl_af6list_remove(addr, mask, &iface->addr6_list); @@ -566,8 +563,7 @@ static int netlbl_unlhsh_remove_addr6(struct net *net, if (dev != NULL) dev_put(dev); if (entry != NULL && - security_secid_to_secctx(&entry->le, - &lc.context, &lc.len) == 0) { + security_secid_to_secctx(&entry->le, &lc) == 0) { audit_log_format(audit_buf, " sec_obj=%s", lc.context); security_release_secctx(&lc); } @@ -1137,7 +1133,7 @@ static int netlbl_unlabel_staticlist_gen(u32 cmd, lep = (struct lsm_export *)&addr6->le; } - ret_val = security_secid_to_secctx(lep, &lc.context, &lc.len); + ret_val = security_secid_to_secctx(lep, &lc); 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 0418f0935199..11ea98525c4e 100644 --- a/net/netlabel/netlabel_user.c +++ b/net/netlabel/netlabel_user.c @@ -112,8 +112,7 @@ struct audit_buffer *netlbl_audit_start_common(int type, audit_info->sessionid); if (lsm_export_any(&audit_info->le) && - security_secid_to_secctx(&audit_info->le, &lc.context, - &lc.len) == 0) { + security_secid_to_secctx(&audit_info->le, &lc) == 0) { audit_log_format(audit_buf, " subj=%s", lc.context); security_release_secctx(&lc); } diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 46c8b9a67ac7..9dc17903a936 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -92,8 +92,7 @@ int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) if (!label) return -EINVAL; - /* scaffolding check - Casey */ - if (cp) + if (!(l->flags & LSM_EXPORT_LENGTH)) len = aa_label_asxprint(&cp->context, root_ns, label, FLAG_SHOW_MODE | FLAG_VIEW_SUBNS | FLAG_HIDDEN_UNCONFINED | FLAG_ABS_ROOT, diff --git a/security/security.c b/security/security.c index 3da7302d20ec..6588172b3ec8 100644 --- a/security/security.c +++ b/security/security.c @@ -1972,18 +1972,9 @@ int security_ismaclabel(const char *name) } EXPORT_SYMBOL(security_ismaclabel); -int security_secid_to_secctx(struct lsm_export *l, char **secdata, u32 *seclen) +int security_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) { - 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); - *seclen = lc.len; - return rc; + return call_one_int_hook(secid_to_secctx, -EOPNOTSUPP, l, cp); } EXPORT_SYMBOL(security_secid_to_secctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 332296f69f76..7bf73493d10d 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -6306,6 +6306,9 @@ static int selinux_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) u32 secid; selinux_import_secid(l, &secid); + if (l->flags & LSM_EXPORT_LENGTH) + return security_sid_to_context(&selinux_state, secid, + NULL, &cp->len); return security_sid_to_context(&selinux_state, secid, &cp->context, &cp->len); } diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index cf27905ccaa5..1b5b3e421bff 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4442,7 +4442,7 @@ static int smack_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) smack_import_secid(l, &secid); skp = smack_from_secid(secid); - cp->context = skp->smk_known; + cp->context = (l->flags & LSM_EXPORT_LENGTH) ? NULL : skp->smk_known; cp->len = strlen(skp->smk_known); return 0; } From patchwork Fri May 31 23:10: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: 10970973 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 6693218EC for ; Fri, 31 May 2019 23:19:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5764F28D92 for ; Fri, 31 May 2019 23:19:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4B22D28D94; Fri, 31 May 2019 23:19:31 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 50ED528D96 for ; Fri, 31 May 2019 23:19:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726843AbfEaXTa (ORCPT ); Fri, 31 May 2019 19:19:30 -0400 Received: from sonic302-9.consmr.mail.bf2.yahoo.com ([74.6.135.48]:33136 "EHLO sonic302-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726851AbfEaXT3 (ORCPT ); Fri, 31 May 2019 19:19:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344766; bh=obxKrBiGm3LYlnlm6RakpP9K6J8LRUBE6b25/AUVMcY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=fXco0y+u+KxD8d8UCIDY3s3Yg3pEJN4D00iopRPSwEBZQKHnIr0/5Efb6GNzuXS8ulPFnVQZ30ym7Bc0T2mfKjqFmFt3U4JnDpP3jJMKB5t+JlhK1mH4pf0nQM/QW5oiCj0CZmeY1TFTX1D+xEgu6ZhoTqBvFxXkulHOc/zkWYTKtG/2fS9jlmQfTZmRgaVvYQTvyQFDXVDD7/Hw7a4INugMs/gJmSRPpl+3/Vbx92SkK1XSQEDukHy8wv8eRlCqQkGw9sFfXoJRaekGG39IIcIZMxpkjylPsVtxhkNuOflQ4OMfewwnLM64E8mStWRwr4vKKWROCX16aLC51ToPBw== X-YMail-OSG: VF327aUVM1nzGnIAwIrMvMuk9jtlIwoEuiCsVmFcCaWy.IMG3zKWpFn59BX6uQ6 tQhak2idhz6AygNNx2wdJnwxtJyBwM0U_caKtEUIaAkN5kvheMjZ4zg_9lzri6I_xsvwYpRtN5Ba F3XxmnfR8SyhQE5gxaq2xZ0SnEL.asgMspFMiSqjcbXJ_VkEgi_z8eKuAzMZCH8EXwlwzhXXK_wy W2F6dhKjgex2zO.grCdm3nVedUwe4Xz9kB2kSET1ZGaFG_Ce9r_GqfSGEL5YwmZ2WP4XM0ldD3yQ TiNTtTql77aspC9w7L6SAdJtULImUVxwEkgUnbYVYFY8iutRJj70OirS832ubXjQU4o4N0iD92x7 zaAiNK3tMi4ZliElIeXzFBaqy9bF_vyuUc95BSMXVh8RtoFbPYCLJdbx1YZdHFvppV.F0DOz9AcW lAViTxxvAH_q_Ehg5I7cW1HLDDlttPd1BNWdetkCNQ1PuOVBjkioTUHrWNfqcmRpcZndpW4e4vok TpoGoIKUMb6Y_ZNgkPMbEsTI4SK3XMOPnY5.k4.8RNaEfzVDD4GZOudIkB.FU7xZKeFoIvLPR4GA 5GPnMQCLpFa9h2XGyHl53EQ1jG0t.Iy0hXeBniEOrxTBPMCKukzmC6hubWibdzRUqIUhKfVQSb7M fF8wSyb2BqxKCTUJ11wQIbIkymvbTLkf7K3pcynTUd0GLTRqJiW_3gI6VSTxxK432msd8zYUdB0m 3ZRwdwBwn_JqjFJKa2LoxYdt39xle2T1t_4xV3S4T6HU_FqR1FwNthOMXQOzSGXGPlDC4_ZBbem5 F2NxKJs3fop0cByUBA4c_bfRLCsSaMm1o7GROyv53h6crGNFfh3lVtEsltCghDcSMcSO1OpXo2aQ dSIeUTefuVuKiQfp9VtOGrA_xrqmXQi3EpxctbLpPRwhdXQ33HraVN1OYbyQCKxiFGlmb5sEYi3_ G8hj23tYeRtyd54SGHQMRq2s1SPs8WKzfgVCtEy00FQxB6FVzG8RXptQUG4QhmwTqKXiBpD79DR8 gYElDDQR45J9iAzWkiETLAwzPJRpq02qzuCD9i5rsMAWlBZrHeRAG5T.YtnshgO9CZf33T_8ktlq frgZ1J3nkbOpyo1EPVNpUAzmt5vu3izvTFFgCFjsHJrT1M3OuiWkqTxSEm7AkqbSIRz3T.p3s74e oO.TEJlDv3vvV4ISuB3L23DAWFJpyVHhT5XSBpWQMgv_C_cms3kIZ4bbjvigpwGcKvYjDQ8CKFfJ 1_GCK52xNJyq3Ge8xIgDxpUrIxOmfg_mOmdDzwfG8Buq3HKv1hU1kgqNUQw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:19:26 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp423.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID c6e11b7d380bc40fa0460f8b71bad1e7; Fri, 31 May 2019 23:19:26 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 49/58] fs: remove lsm_context scaffolding Date: Fri, 31 May 2019 16:10:11 -0700 Message-Id: <20190531231020.628-50-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The conversion from secctx/seclen pairs to the lsm_context structure used scaffolding in kernfs and nfs. Replace the secctx/seclen pairs in the filesystem local datastructures with a lsm_context. Signed-off-by: Casey Schaufler --- fs/kernfs/dir.c | 9 +++------ fs/kernfs/inode.c | 13 +++++-------- fs/kernfs/kernfs-internal.h | 3 +-- fs/nfs/inode.c | 15 ++++++--------- fs/nfs/internal.h | 8 ++++---- fs/nfs/nfs4proc.c | 27 +++++++++++---------------- fs/nfs/nfs4xdr.c | 16 +++++++++------- include/linux/nfs4.h | 8 ++++---- 8 files changed, 43 insertions(+), 56 deletions(-) diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index 11672c075a8b..48506e856573 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -532,12 +532,9 @@ void kernfs_put(struct kernfs_node *kn) kfree_const(kn->name); if (kn->iattr) { - if (kn->iattr->ia_secdata) { - struct lsm_context lc; /* Scaffolding -Casey */ - lc.context = kn->iattr->ia_secdata; - lc.len = kn->iattr->ia_secdata_len; - security_release_secctx(&lc); - } + if (kn->iattr->ia_context.context) + security_release_secctx( + &kn->iattr->ia_context); simple_xattrs_free(&kn->iattr->xattrs); kmem_cache_free(kernfs_iattrs_cache, kn->iattr); } diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 45781f0da80f..4c7da446d210 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -141,11 +141,11 @@ static int kernfs_node_setsecdata(struct kernfs_iattrs *attrs, void **secdata, void *old_secdata; size_t old_secdata_len; - old_secdata = attrs->ia_secdata; - old_secdata_len = attrs->ia_secdata_len; + old_secdata = attrs->ia_context.context; + old_secdata_len = attrs->ia_context.len; - attrs->ia_secdata = *secdata; - attrs->ia_secdata_len = *secdata_len; + attrs->ia_context.context = *secdata; + attrs->ia_context.len = *secdata_len; *secdata = old_secdata; *secdata_len = old_secdata_len; @@ -184,7 +184,6 @@ 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) { @@ -193,9 +192,7 @@ static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) * persistent copy in kernfs_node. */ set_inode_attr(inode, &attrs->ia_iattr); - lc.context = attrs->ia_secdata; - lc.len = attrs->ia_secdata_len; - security_inode_notifysecctx(inode, &lc); + security_inode_notifysecctx(inode, &attrs->ia_context); } if (kernfs_type(kn) == KERNFS_DIR) diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index 0b7d197a904c..2a870795bb3e 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h @@ -21,8 +21,7 @@ struct kernfs_iattrs { struct iattr ia_iattr; - void *ia_secdata; - u32 ia_secdata_len; + struct lsm_context ia_context; struct simple_xattrs xattrs; }; diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 8d0be9767b14..a9a3ec40a90c 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -340,22 +340,19 @@ 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) { - lc.context = label->label; - lc.len = label->len; - error = security_inode_notifysecctx(inode, &lc); + error = security_inode_notifysecctx(inode, &label->context); if (error) printk(KERN_ERR "%s() %s %d " "security_inode_notifysecctx() %d\n", __func__, - (char *)label->label, - label->len, error); + label->context.context, + label->context.len, error); nfs_clear_label_invalid(inode); } } @@ -375,12 +372,12 @@ struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags) if (label == NULL) return ERR_PTR(-ENOMEM); - label->label = kzalloc(NFS4_MAXLABELLEN, flags); - if (label->label == NULL) { + label->context.context = kzalloc(NFS4_MAXLABELLEN, flags); + if (label->context.context == NULL) { kfree(label); return ERR_PTR(-ENOMEM); } - label->len = NFS4_MAXLABELLEN; + label->context.len = NFS4_MAXLABELLEN; return label; } diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index c7cf23ae6597..63de73024b5f 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -307,20 +307,20 @@ nfs4_label_copy(struct nfs4_label *dst, struct nfs4_label *src) if (!dst || !src) return NULL; - if (src->len > NFS4_MAXLABELLEN) + if (src->context.len > NFS4_MAXLABELLEN) return NULL; dst->lfs = src->lfs; dst->pi = src->pi; - dst->len = src->len; - memcpy(dst->label, src->label, src->len); + dst->context.len = src->context.len; + memcpy(dst->context.context, src->context.context, src->context.len); return dst; } static inline void nfs4_label_free(struct nfs4_label *label) { if (label) { - kfree(label->label); + kfree(label->context.context); kfree(label); } return; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 8dee01eda643..b2480d0341f1 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -113,7 +113,6 @@ 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) @@ -123,9 +122,7 @@ nfs4_label_init_security(struct inode *dir, struct dentry *dentry, return NULL; err = security_dentry_init_security(dentry, sattr->ia_mode, - &dentry->d_name, &lc); - label->label = lc.context; - label->len = lc.len; + &dentry->d_name, &label->context); if (err == 0) return label; @@ -134,13 +131,8 @@ nfs4_label_init_security(struct inode *dir, struct dentry *dentry, static inline void nfs4_label_release_security(struct nfs4_label *label) { - struct lsm_context lc; /* Scaffolding -Casey */ - - if (label) { - lc.context = label->label; - lc.len = label->len; - security_release_secctx(&lc); - } + if (label) + security_release_secctx(&label->context); } static inline u32 *nfs4_bitmask(struct nfs_server *server, struct nfs4_label *label) { @@ -3556,7 +3548,9 @@ nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr, int *opened) { struct nfs4_state *state; - struct nfs4_label l = {0, 0, 0, NULL}, *label = NULL; + struct nfs4_label *label = NULL; + struct nfs4_label l = {0, 0, + .context = { .context = NULL, .len = 0, }, }; label = nfs4_label_init_security(dir, ctx->dentry, attr, &l); @@ -5595,7 +5589,8 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf, { struct nfs_server *server = NFS_SERVER(inode); struct nfs_fattr fattr; - struct nfs4_label label = {0, 0, buflen, buf}; + struct nfs4_label label = {0, 0, + .context = { .context = buf, .len = buflen, }, }; u32 bitmask[3] = { 0, 0, FATTR4_WORD2_SECURITY_LABEL }; struct nfs4_getattr_arg arg = { @@ -5621,7 +5616,7 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf, return ret; if (!(fattr.valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL)) return -ENOENT; - if (buflen < label.len) + if (buflen < label.context.len) return -ERANGE; return 0; } @@ -5713,8 +5708,8 @@ nfs4_set_security_label(struct inode *inode, const void *buf, size_t buflen) ilabel.pi = 0; ilabel.lfs = 0; - ilabel.label = (char *)buf; - ilabel.len = buflen; + ilabel.context.context = (char *)buf; + ilabel.context.len = buflen; olabel = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL); if (IS_ERR(olabel)) { diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index cfcabc33e24d..85a527ccd6d7 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -1141,7 +1141,7 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, } if (label && (attrmask[2] & FATTR4_WORD2_SECURITY_LABEL)) { - len += 4 + 4 + 4 + (XDR_QUADLEN(label->len) << 2); + len += 4 + 4 + 4 + (XDR_QUADLEN(label->context.len) << 2); bmval[2] |= FATTR4_WORD2_SECURITY_LABEL; } @@ -1175,8 +1175,9 @@ static void encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, if (bmval[2] & FATTR4_WORD2_SECURITY_LABEL) { *p++ = cpu_to_be32(label->lfs); *p++ = cpu_to_be32(label->pi); - *p++ = cpu_to_be32(label->len); - p = xdr_encode_opaque_fixed(p, label->label, label->len); + *p++ = cpu_to_be32(label->context.len); + p = xdr_encode_opaque_fixed(p, label->context.context, + label->context.len); } if (bmval[2] & FATTR4_WORD2_MODE_UMASK) { *p++ = cpu_to_be32(iap->ia_mode & S_IALLUGO); @@ -4163,8 +4164,8 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, return -EIO; if (len < NFS4_MAXLABELLEN) { if (label) { - memcpy(label->label, p, len); - label->len = len; + memcpy(label->context.context, p, len); + label->context.len = len; label->pi = pi; label->lfs = lfs; status = NFS_ATTR_FATTR_V4_SECURITY_LABEL; @@ -4174,9 +4175,10 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, printk(KERN_WARNING "%s: label too long (%u)!\n", __func__, len); } - if (label && label->label) + if (label && label->context.context) dprintk("%s: label=%s, len=%d, PI=%d, LFS=%d\n", __func__, - (char *)label->label, label->len, label->pi, label->lfs); + (char *)label->context.context, label->context.len, + label->pi, label->lfs); return status; } diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 22494d170619..1189aad71592 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h @@ -15,6 +15,7 @@ #include #include +#include #include enum nfs4_acl_whotype { @@ -43,10 +44,9 @@ struct nfs4_acl { #define NFS4_MAXLABELLEN 2048 struct nfs4_label { - uint32_t lfs; - uint32_t pi; - u32 len; - char *label; + uint32_t lfs; + uint32_t pi; + struct lsm_context context; }; typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; From patchwork Fri May 31 23:10: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: 10970977 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 2BE56912 for ; Fri, 31 May 2019 23:19:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 18BF528D92 for ; Fri, 31 May 2019 23:19:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0C07028D97; Fri, 31 May 2019 23:19:46 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,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 4E74328D92 for ; Fri, 31 May 2019 23:19:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726819AbfEaXTp (ORCPT ); Fri, 31 May 2019 19:19:45 -0400 Received: from sonic305-9.consmr.mail.bf2.yahoo.com ([74.6.133.48]:39183 "EHLO sonic305-9.consmr.mail.bf2.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726816AbfEaXTp (ORCPT ); Fri, 31 May 2019 19:19:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1559344783; bh=BDqvrOe/Zpr49BPyFqMi2sAByPPxYi6emNEKjjpBQB4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject; b=maUgdWKbW4OqfAWJZ4rENyhsMB5rIYXhMiUC9EjuHVyRU0BRuJXr70knY2CIoD6ixpf4whPxdXG8MO0eJJGGpm3phkJN9V6YRB5GVRhqOz9kFO8XQTkGJC6AX+vgrQHfe2fMKsppVnvp0ouyQC4wXKyIO4c+DUEZK4eexVI3Ic/wwA1SZ4mx9Ni4VxEe9maDq8/zi4uVd6T1pQaYLV04AenSkkdIQn5RmCE0MRWa8g/GsDgM+EZ6MsnrlmOL3WfxCJyfGUw6/zC5g1N9/EueLNGiPQoRBE/A0OEn8mB5U/96ZtjymV1tr+zXwZIhxkFpO9cXZnuYIgvbTZkEbmo2NQ== X-YMail-OSG: uTUMZ0QVM1mxFjEqTnDfHx0vvZeKYYJcFjpc2c.pyEJMqktM7ig2yiA.EomJsvM 12FWCLzCURYcNeL3TfXegh2FaFk1uUckRrwIyDJNjxMrcrcewN_gYKVBidc7VqnTDTZBsrfSELdj b49QvmhIqlKRXrIddzk5SJD.JYIqqsMNllhBHD1W8QpQa3LW9igkVEXNWrgTouUwJ30zYD4o2Eth xwEd2Gz407bulZ3SY217VO0RaUHNpX_TKPewZ0rVjQbEz4sITqzveaVi9TpY3D2BFCdXoGL5AGeH PK5IXd_ZppMO_NWf9G2YRkBnu3opiAp9POoF0FQgfYERnRb8rBpoxkBJImty4db4t171y0k7HaiF M4oFgNXkVszhhj1haovjoD2uQcefAQzVIQfz7xu1KGgOMZF_vbwV8IntFFWivy8_DGNBSvXxdBjY a2jJnllkko883JxcA08Hd5zC79g_RMHzNpQSVKfgE4c2_8rk9rfJohBVVP5SqUl4tCdITb6ccroh f2_upb6oB5e.DtoxsDFGV8LFKthXDu3vDWl4vDi1cRnC2p_OB5EW3bXjq82bvSxy5NjHJjetjpPI xNLk_KJrDbO3skv7EWpEcOfQM2nObtKbyR3UbVnQktQZOlykrX4a2WAhRh_UQxbf3ssa33W9kiKl LW2oaiMuUpNftl4U677SdrBU3f8R3sA1XCnvimAV.lGPYzNGAkSXNWB1DemzQKWTBYutKHpi_D16 vYImLEc5NtOm89rIxENF.GRJjMMtiKBre5pB6AbLdX8zVnDMJ7JNBRxTp6iErHBMHz6XFfGLMOO2 5pRhNSETyWQCPoUiDEUzqrWx9BY4InZ8c4cKYmsnDtLJM2TUzi6g8X8JRp1YZBjanqWQ7YhoMqGh dD5FGe6EZBlKO4ALjy6VmsjrFSaM4x5YUFUs.fkWuUjaWDRZWzB.FfeS9gNK37C5dzV3ZTX5aR4L kbRpVohX15oSx5dBi69bzreQ7o.RcyMd0jW1SY5eoRep6cS9Bh4adrnVQzj6rZMOos82lbWl9.Lu b3EhQmjctAWGu3tO2JdNQyoTvuEERdUcJVNq8IJ.OSKeoTOos69PHTbo8typrI9OJe3NPPdnv1Fx 2GPAPcVeBwHNyMFo3ka.i5Tdh4Dmw2hQobeTTx5UkC.PsbH266ZOSyhOCdQwKumm3EQdPzcr2v7V ue9tPwHbgkR0T4PSgwLWr9G1abrzzYhlJoi187pCZ3c1FVBEQMkcaZFQCh2ZE3yLrrZGHNM1bCZn XHK5BCXOmIuB7q0gLtFLEjOP3rYNJ89MfTjw2.M7Jks2N3xYxTo7Mek5hLA-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.bf2.yahoo.com with HTTP; Fri, 31 May 2019 23:19:43 +0000 Received: from c-73-223-4-185.hsd1.ca.comcast.net (EHLO localhost.localdomain) ([73.223.4.185]) by smtp418.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID fca7bfb5824f109da6d86634398938ee; Fri, 31 May 2019 23:19:41 +0000 (UTC) From: Casey Schaufler To: casey.schaufler@intel.com, jmorris@namei.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org Cc: casey@schaufler-ca.com, keescook@chromium.org, john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp, paul@paul-moore.com, sds@tycho.nsa.gov Subject: [PATCH 50/58] LSM: Add the release function to the lsm_context Date: Fri, 31 May 2019 16:10:12 -0700 Message-Id: <20190531231020.628-51-casey@schaufler-ca.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20190531231020.628-1-casey@schaufler-ca.com> References: <20190531231020.628-1-casey@schaufler-ca.com> Sender: selinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In order to ensure that the release function for a lsm_context matches the LSM that allocated it an element is added to the lsm_context structure to contain a pointer to it. This function is called in security_release_secctx instead of relying on a value in a hook list. Signed-off-by: Casey Schaufler --- include/linux/lsm_hooks.h | 6 ------ include/linux/security.h | 1 + security/apparmor/lsm.c | 1 - security/apparmor/secid.c | 11 ++++++----- security/security.c | 5 ++++- security/selinux/hooks.c | 14 ++++++++------ security/smack/smack_lsm.c | 16 ++++++++-------- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index 3a779a0f9e15..d1235a3cd8e9 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -1326,10 +1326,6 @@ * @cp contains the security context. * @l contains the pointer to the generated security data. * - * @release_secctx: - * Release the security context. - * @secdata contains the security context. - * * Security hooks for Audit * * @audit_rule_init: @@ -1662,7 +1658,6 @@ 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)(struct lsm_context *cp); void (*inode_invalidate_secctx)(struct inode *inode); int (*inode_notifysecctx)(struct inode *inode, struct lsm_context *cp); @@ -1939,7 +1934,6 @@ struct security_hook_heads { struct hlist_head ismaclabel; struct hlist_head secid_to_secctx; struct hlist_head secctx_to_secid; - struct hlist_head release_secctx; struct hlist_head inode_invalidate_secctx; struct hlist_head inode_notifysecctx; struct hlist_head inode_setsecctx; diff --git a/include/linux/security.h b/include/linux/security.h index 9a9de2bafa55..94c714310ab7 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -121,6 +121,7 @@ static inline bool lsm_export_equal(struct lsm_export *l, struct lsm_export *m) struct lsm_context { char *context; u32 len; + void (*release)(struct lsm_context *cp); /* frees .context */ }; static inline void lsm_context_init(struct lsm_context *cp) diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 76c409737370..771b0ae24a5f 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -1225,7 +1225,6 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(secid_to_secctx, apparmor_secid_to_secctx), LSM_HOOK_INIT(secctx_to_secid, apparmor_secctx_to_secid), - LSM_HOOK_INIT(release_secctx, apparmor_release_secctx), }; /* diff --git a/security/apparmor/secid.c b/security/apparmor/secid.c index 9dc17903a936..30fd4ad80948 100644 --- a/security/apparmor/secid.c +++ b/security/apparmor/secid.c @@ -81,6 +81,11 @@ static inline void aa_export_secid(struct lsm_export *l, u32 secid) l->apparmor = secid; } +void apparmor_release_secctx(struct lsm_context *cp) +{ + kfree(cp->context); +} + 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 */ @@ -105,6 +110,7 @@ int apparmor_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) return -ENOMEM; cp->len = len; + cp->release = apparmor_release_secctx; return 0; } @@ -122,11 +128,6 @@ int apparmor_secctx_to_secid(const struct lsm_context *cp, struct lsm_export *l) return 0; } -void apparmor_release_secctx(struct lsm_context *cp) -{ - kfree(cp->context); -} - /** * aa_alloc_secid - allocate a new secid for a profile * @label: the label to allocate a secid for diff --git a/security/security.c b/security/security.c index 6588172b3ec8..c8ce190dcdda 100644 --- a/security/security.c +++ b/security/security.c @@ -1987,7 +1987,10 @@ EXPORT_SYMBOL(security_secctx_to_secid); void security_release_secctx(struct lsm_context *cp) { - call_one_void_hook(release_secctx, cp); + if (WARN_ON(cp->release == NULL)) + return; + cp->release(cp); + lsm_context_init(cp); } EXPORT_SYMBOL(security_release_secctx); diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 7bf73493d10d..0e347a26c3d8 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2812,6 +2812,11 @@ static void selinux_inode_free_security(struct inode *inode) inode_free_security(inode); } +static void selinux_release_secctx(struct lsm_context *cp) +{ + kfree(cp->context); +} + static int selinux_dentry_init_security(struct dentry *dentry, int mode, const struct qstr *name, struct lsm_context *cp) @@ -2826,6 +2831,7 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode, if (rc) return rc; + cp->release = selinux_release_secctx; return security_sid_to_context(&selinux_state, newsid, &cp->context, &cp->len); } @@ -6306,6 +6312,7 @@ static int selinux_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) u32 secid; selinux_import_secid(l, &secid); + cp->release = selinux_release_secctx; if (l->flags & LSM_EXPORT_LENGTH) return security_sid_to_context(&selinux_state, secid, NULL, &cp->len); @@ -6325,11 +6332,6 @@ static int selinux_secctx_to_secid(const struct lsm_context *cp, return rc; } -static void selinux_release_secctx(struct lsm_context *cp) -{ - kfree(cp->context); -} - static void selinux_inode_invalidate_secctx(struct inode *inode) { struct inode_security_struct *isec = selinux_inode(inode); @@ -6367,6 +6369,7 @@ static int selinux_inode_getsecctx(struct inode *inode, struct lsm_context *cp) if (len < 0) return len; cp->len = len; + cp->release = selinux_release_secctx; return 0; } #ifdef CONFIG_KEYS @@ -6781,7 +6784,6 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(ismaclabel, selinux_ismaclabel), LSM_HOOK_INIT(secid_to_secctx, selinux_secid_to_secctx), LSM_HOOK_INIT(secctx_to_secid, selinux_secctx_to_secid), - LSM_HOOK_INIT(release_secctx, selinux_release_secctx), LSM_HOOK_INIT(inode_invalidate_secctx, selinux_inode_invalidate_secctx), LSM_HOOK_INIT(inode_notifysecctx, selinux_inode_notifysecctx), LSM_HOOK_INIT(inode_setsecctx, selinux_inode_setsecctx), diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 1b5b3e421bff..e00346799cdf 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4425,6 +4425,12 @@ static int smack_ismaclabel(const char *name) return (strcmp(name, XATTR_SMACK_SUFFIX) == 0); } +/* + * The smack_release_secctx hook does nothing + */ +static void smack_release_secctx(struct lsm_context *cp) +{ +} /** * smack_secid_to_secctx - return the smack label for a secid @@ -4444,6 +4450,7 @@ static int smack_secid_to_secctx(struct lsm_export *l, struct lsm_context *cp) cp->context = (l->flags & LSM_EXPORT_LENGTH) ? NULL : skp->smk_known; cp->len = strlen(skp->smk_known); + cp->release = smack_release_secctx; return 0; } @@ -4467,13 +4474,6 @@ static int smack_secctx_to_secid(const struct lsm_context *cp, return 0; } -/* - * The smack_release_secctx hook does nothing - */ -static void smack_release_secctx(struct lsm_context *cp) -{ -} - static int smack_inode_notifysecctx(struct inode *inode, struct lsm_context *cp) { return smack_inode_setsecurity(inode, XATTR_SMACK_SUFFIX, cp->context, @@ -4491,6 +4491,7 @@ static int smack_inode_getsecctx(struct inode *inode, struct lsm_context *cp) cp->context = skp->smk_known; cp->len = strlen(skp->smk_known); + cp->release = smack_release_secctx; return 0; } @@ -4713,7 +4714,6 @@ 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),