1 // SPDX-License-Identifier: GPL-2.0-only
3 * NSA Security-Enhanced Linux (SELinux) security module
5 * This file contains the SELinux hook function implementations.
12 * Copyright (C) 2001,2002 Networks Associates Technology, Inc.
15 * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
17 * Copyright (C) 2006, 2007, 2009 Hewlett-Packard Development Company, L.P.
19 * Copyright (C) 2007 Hitachi Software Engineering Co., Ltd.
21 * Copyright (C) 2016 Mellanox Technologies
24 #include <linux/init.h>
26 #include <linux/kernel.h>
27 #include <linux/kernel_read_file.h>
28 #include <linux/errno.h>
29 #include <linux/sched/signal.h>
30 #include <linux/sched/task.h>
31 #include <linux/lsm_hooks.h>
32 #include <linux/xattr.h>
33 #include <linux/capability.h>
34 #include <linux/unistd.h>
36 #include <linux/mman.h>
37 #include <linux/slab.h>
38 #include <linux/pagemap.h>
39 #include <linux/proc_fs.h>
40 #include <linux/swap.h>
41 #include <linux/spinlock.h>
42 #include <linux/syscalls.h>
43 #include <linux/dcache.h>
44 #include <linux/file.h>
45 #include <linux/fdtable.h>
46 #include <linux/namei.h>
47 #include <linux/mount.h>
48 #include <linux/fs_context.h>
49 #include <linux/fs_parser.h>
50 #include <linux/netfilter_ipv4.h>
51 #include <linux/netfilter_ipv6.h>
52 #include <linux/tty.h>
54 #include <net/ip.h> /* for local_port_range[] */
55 #include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */
56 #include <net/inet_connection_sock.h>
57 #include <net/net_namespace.h>
58 #include <net/netlabel.h>
59 #include <linux/uaccess.h>
60 #include <asm/ioctls.h>
61 #include <linux/atomic.h>
62 #include <linux/bitops.h>
63 #include <linux/interrupt.h>
64 #include <linux/netdevice.h> /* for network interface checks */
65 #include <net/netlink.h>
66 #include <linux/tcp.h>
67 #include <linux/udp.h>
68 #include <linux/dccp.h>
69 #include <linux/sctp.h>
70 #include <net/sctp/structs.h>
71 #include <linux/quota.h>
72 #include <linux/un.h> /* for Unix socket types */
73 #include <net/af_unix.h> /* for Unix socket types */
74 #include <linux/parser.h>
75 #include <linux/nfs_mount.h>
77 #include <linux/hugetlb.h>
78 #include <linux/personality.h>
79 #include <linux/audit.h>
80 #include <linux/string.h>
81 #include <linux/mutex.h>
82 #include <linux/posix-timers.h>
83 #include <linux/syslog.h>
84 #include <linux/user_namespace.h>
85 #include <linux/export.h>
86 #include <linux/msg.h>
87 #include <linux/shm.h>
88 #include <linux/bpf.h>
89 #include <linux/kernfs.h>
90 #include <linux/stringhash.h> /* for hashlen_string() */
91 #include <uapi/linux/mount.h>
92 #include <linux/fsnotify.h>
93 #include <linux/fanotify.h>
94 #include <linux/io_uring.h>
103 #include "netlabel.h"
107 struct selinux_state selinux_state;
109 /* SECMARK reference count */
110 static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0);
112 #ifdef CONFIG_SECURITY_SELINUX_DEVELOP
113 static int selinux_enforcing_boot __initdata;
115 static int __init enforcing_setup(char *str)
117 unsigned long enforcing;
118 if (!kstrtoul(str, 0, &enforcing))
119 selinux_enforcing_boot = enforcing ? 1 : 0;
122 __setup("enforcing=", enforcing_setup);
124 #define selinux_enforcing_boot 1
127 int selinux_enabled_boot __initdata = 1;
128 #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM
129 static int __init selinux_enabled_setup(char *str)
131 unsigned long enabled;
132 if (!kstrtoul(str, 0, &enabled))
133 selinux_enabled_boot = enabled ? 1 : 0;
136 __setup("selinux=", selinux_enabled_setup);
139 static int __init checkreqprot_setup(char *str)
141 unsigned long checkreqprot;
143 if (!kstrtoul(str, 0, &checkreqprot)) {
145 pr_err("SELinux: checkreqprot set to 1 via kernel parameter. This is no longer supported.\n");
149 __setup("checkreqprot=", checkreqprot_setup);
152 * selinux_secmark_enabled - Check to see if SECMARK is currently enabled
155 * This function checks the SECMARK reference counter to see if any SECMARK
156 * targets are currently configured, if the reference counter is greater than
157 * zero SECMARK is considered to be enabled. Returns true (1) if SECMARK is
158 * enabled, false (0) if SECMARK is disabled. If the always_check_network
159 * policy capability is enabled, SECMARK is always considered enabled.
162 static int selinux_secmark_enabled(void)
164 return (selinux_policycap_alwaysnetwork() ||
165 atomic_read(&selinux_secmark_refcount));
169 * selinux_peerlbl_enabled - Check to see if peer labeling is currently enabled
172 * This function checks if NetLabel or labeled IPSEC is enabled. Returns true
173 * (1) if any are enabled or false (0) if neither are enabled. If the
174 * always_check_network policy capability is enabled, peer labeling
175 * is always considered enabled.
178 static int selinux_peerlbl_enabled(void)
180 return (selinux_policycap_alwaysnetwork() ||
181 netlbl_enabled() || selinux_xfrm_enabled());
184 static int selinux_netcache_avc_callback(u32 event)
186 if (event == AVC_CALLBACK_RESET) {
195 static int selinux_lsm_notifier_avc_callback(u32 event)
197 if (event == AVC_CALLBACK_RESET) {
199 call_blocking_lsm_notifier(LSM_POLICY_CHANGE, NULL);
206 * initialise the security for the init task
208 static void cred_init_security(void)
210 struct task_security_struct *tsec;
212 tsec = selinux_cred(unrcu_pointer(current->real_cred));
213 tsec->osid = tsec->sid = SECINITSID_KERNEL;
217 * get the security ID of a set of credentials
219 static inline u32 cred_sid(const struct cred *cred)
221 const struct task_security_struct *tsec;
223 tsec = selinux_cred(cred);
228 * get the objective security ID of a task
230 static inline u32 task_sid_obj(const struct task_struct *task)
235 sid = cred_sid(__task_cred(task));
240 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry);
243 * Try reloading inode security labels that have been marked as invalid. The
244 * @may_sleep parameter indicates when sleeping and thus reloading labels is
245 * allowed; when set to false, returns -ECHILD when the label is
246 * invalid. The @dentry parameter should be set to a dentry of the inode.
248 static int __inode_security_revalidate(struct inode *inode,
249 struct dentry *dentry,
252 struct inode_security_struct *isec = selinux_inode(inode);
254 might_sleep_if(may_sleep);
256 if (selinux_initialized() &&
257 isec->initialized != LABEL_INITIALIZED) {
262 * Try reloading the inode security label. This will fail if
263 * @opt_dentry is NULL and no dentry for this inode can be
264 * found; in that case, continue using the old label.
266 inode_doinit_with_dentry(inode, dentry);
271 static struct inode_security_struct *inode_security_novalidate(struct inode *inode)
273 return selinux_inode(inode);
276 static struct inode_security_struct *inode_security_rcu(struct inode *inode, bool rcu)
280 error = __inode_security_revalidate(inode, NULL, !rcu);
282 return ERR_PTR(error);
283 return selinux_inode(inode);
287 * Get the security label of an inode.
289 static struct inode_security_struct *inode_security(struct inode *inode)
291 __inode_security_revalidate(inode, NULL, true);
292 return selinux_inode(inode);
295 static struct inode_security_struct *backing_inode_security_novalidate(struct dentry *dentry)
297 struct inode *inode = d_backing_inode(dentry);
299 return selinux_inode(inode);
303 * Get the security label of a dentry's backing inode.
305 static struct inode_security_struct *backing_inode_security(struct dentry *dentry)
307 struct inode *inode = d_backing_inode(dentry);
309 __inode_security_revalidate(inode, dentry, true);
310 return selinux_inode(inode);
313 static void inode_free_security(struct inode *inode)
315 struct inode_security_struct *isec = selinux_inode(inode);
316 struct superblock_security_struct *sbsec;
320 sbsec = selinux_superblock(inode->i_sb);
322 * As not all inode security structures are in a list, we check for
323 * empty list outside of the lock to make sure that we won't waste
324 * time taking a lock doing nothing.
326 * The list_del_init() function can be safely called more than once.
327 * It should not be possible for this function to be called with
328 * concurrent list_add(), but for better safety against future changes
329 * in the code, we use list_empty_careful() here.
331 if (!list_empty_careful(&isec->list)) {
332 spin_lock(&sbsec->isec_lock);
333 list_del_init(&isec->list);
334 spin_unlock(&sbsec->isec_lock);
338 struct selinux_mnt_opts {
345 static void selinux_free_mnt_opts(void *mnt_opts)
359 #define A(s, has_arg) {#s, sizeof(#s) - 1, Opt_##s, has_arg}
360 static const struct {
369 A(rootcontext, true),
374 static int match_opt_prefix(char *s, int l, char **arg)
378 for (i = 0; i < ARRAY_SIZE(tokens); i++) {
379 size_t len = tokens[i].len;
380 if (len > l || memcmp(s, tokens[i].name, len))
382 if (tokens[i].has_arg) {
383 if (len == l || s[len] != '=')
388 return tokens[i].opt;
393 #define SEL_MOUNT_FAIL_MSG "SELinux: duplicate or incompatible mount options\n"
395 static int may_context_mount_sb_relabel(u32 sid,
396 struct superblock_security_struct *sbsec,
397 const struct cred *cred)
399 const struct task_security_struct *tsec = selinux_cred(cred);
402 rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
403 FILESYSTEM__RELABELFROM, NULL);
407 rc = avc_has_perm(tsec->sid, sid, SECCLASS_FILESYSTEM,
408 FILESYSTEM__RELABELTO, NULL);
412 static int may_context_mount_inode_relabel(u32 sid,
413 struct superblock_security_struct *sbsec,
414 const struct cred *cred)
416 const struct task_security_struct *tsec = selinux_cred(cred);
418 rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
419 FILESYSTEM__RELABELFROM, NULL);
423 rc = avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM,
424 FILESYSTEM__ASSOCIATE, NULL);
428 static int selinux_is_genfs_special_handling(struct super_block *sb)
430 /* Special handling. Genfs but also in-core setxattr handler */
431 return !strcmp(sb->s_type->name, "sysfs") ||
432 !strcmp(sb->s_type->name, "pstore") ||
433 !strcmp(sb->s_type->name, "debugfs") ||
434 !strcmp(sb->s_type->name, "tracefs") ||
435 !strcmp(sb->s_type->name, "rootfs") ||
436 (selinux_policycap_cgroupseclabel() &&
437 (!strcmp(sb->s_type->name, "cgroup") ||
438 !strcmp(sb->s_type->name, "cgroup2")));
441 static int selinux_is_sblabel_mnt(struct super_block *sb)
443 struct superblock_security_struct *sbsec = selinux_superblock(sb);
446 * IMPORTANT: Double-check logic in this function when adding a new
447 * SECURITY_FS_USE_* definition!
449 BUILD_BUG_ON(SECURITY_FS_USE_MAX != 7);
451 switch (sbsec->behavior) {
452 case SECURITY_FS_USE_XATTR:
453 case SECURITY_FS_USE_TRANS:
454 case SECURITY_FS_USE_TASK:
455 case SECURITY_FS_USE_NATIVE:
458 case SECURITY_FS_USE_GENFS:
459 return selinux_is_genfs_special_handling(sb);
461 /* Never allow relabeling on context mounts */
462 case SECURITY_FS_USE_MNTPOINT:
463 case SECURITY_FS_USE_NONE:
469 static int sb_check_xattr_support(struct super_block *sb)
471 struct superblock_security_struct *sbsec = selinux_superblock(sb);
472 struct dentry *root = sb->s_root;
473 struct inode *root_inode = d_backing_inode(root);
478 * Make sure that the xattr handler exists and that no
479 * error other than -ENODATA is returned by getxattr on
480 * the root directory. -ENODATA is ok, as this may be
481 * the first boot of the SELinux kernel before we have
482 * assigned xattr values to the filesystem.
484 if (!(root_inode->i_opflags & IOP_XATTR)) {
485 pr_warn("SELinux: (dev %s, type %s) has no xattr support\n",
486 sb->s_id, sb->s_type->name);
490 rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0);
491 if (rc < 0 && rc != -ENODATA) {
492 if (rc == -EOPNOTSUPP) {
493 pr_warn("SELinux: (dev %s, type %s) has no security xattr handler\n",
494 sb->s_id, sb->s_type->name);
497 pr_warn("SELinux: (dev %s, type %s) getxattr errno %d\n",
498 sb->s_id, sb->s_type->name, -rc);
505 /* No xattr support - try to fallback to genfs if possible. */
506 rc = security_genfs_sid(sb->s_type->name, "/",
511 pr_warn("SELinux: (dev %s, type %s) falling back to genfs\n",
512 sb->s_id, sb->s_type->name);
513 sbsec->behavior = SECURITY_FS_USE_GENFS;
518 static int sb_finish_set_opts(struct super_block *sb)
520 struct superblock_security_struct *sbsec = selinux_superblock(sb);
521 struct dentry *root = sb->s_root;
522 struct inode *root_inode = d_backing_inode(root);
525 if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
526 rc = sb_check_xattr_support(sb);
531 sbsec->flags |= SE_SBINITIALIZED;
534 * Explicitly set or clear SBLABEL_MNT. It's not sufficient to simply
535 * leave the flag untouched because sb_clone_mnt_opts might be handing
536 * us a superblock that needs the flag to be cleared.
538 if (selinux_is_sblabel_mnt(sb))
539 sbsec->flags |= SBLABEL_MNT;
541 sbsec->flags &= ~SBLABEL_MNT;
543 /* Initialize the root inode. */
544 rc = inode_doinit_with_dentry(root_inode, root);
546 /* Initialize any other inodes associated with the superblock, e.g.
547 inodes created prior to initial policy load or inodes created
548 during get_sb by a pseudo filesystem that directly
550 spin_lock(&sbsec->isec_lock);
551 while (!list_empty(&sbsec->isec_head)) {
552 struct inode_security_struct *isec =
553 list_first_entry(&sbsec->isec_head,
554 struct inode_security_struct, list);
555 struct inode *inode = isec->inode;
556 list_del_init(&isec->list);
557 spin_unlock(&sbsec->isec_lock);
558 inode = igrab(inode);
560 if (!IS_PRIVATE(inode))
561 inode_doinit_with_dentry(inode, NULL);
564 spin_lock(&sbsec->isec_lock);
566 spin_unlock(&sbsec->isec_lock);
570 static int bad_option(struct superblock_security_struct *sbsec, char flag,
571 u32 old_sid, u32 new_sid)
573 char mnt_flags = sbsec->flags & SE_MNTMASK;
575 /* check if the old mount command had the same options */
576 if (sbsec->flags & SE_SBINITIALIZED)
577 if (!(sbsec->flags & flag) ||
578 (old_sid != new_sid))
581 /* check if we were passed the same options twice,
582 * aka someone passed context=a,context=b
584 if (!(sbsec->flags & SE_SBINITIALIZED))
585 if (mnt_flags & flag)
591 * Allow filesystems with binary mount data to explicitly set mount point
592 * labeling information.
594 static int selinux_set_mnt_opts(struct super_block *sb,
596 unsigned long kern_flags,
597 unsigned long *set_kern_flags)
599 const struct cred *cred = current_cred();
600 struct superblock_security_struct *sbsec = selinux_superblock(sb);
601 struct dentry *root = sb->s_root;
602 struct selinux_mnt_opts *opts = mnt_opts;
603 struct inode_security_struct *root_isec;
604 u32 fscontext_sid = 0, context_sid = 0, rootcontext_sid = 0;
605 u32 defcontext_sid = 0;
609 * Specifying internal flags without providing a place to
610 * place the results is not allowed
612 if (kern_flags && !set_kern_flags)
615 mutex_lock(&sbsec->lock);
617 if (!selinux_initialized()) {
619 /* Defer initialization until selinux_complete_init,
620 after the initial policy is loaded and the security
621 server is ready to handle calls. */
622 if (kern_flags & SECURITY_LSM_NATIVE_LABELS) {
623 sbsec->flags |= SE_SBNATIVE;
624 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
629 pr_warn("SELinux: Unable to set superblock options "
630 "before the security server is initialized\n");
635 * Binary mount data FS will come through this function twice. Once
636 * from an explicit call and once from the generic calls from the vfs.
637 * Since the generic VFS calls will not contain any security mount data
638 * we need to skip the double mount verification.
640 * This does open a hole in which we will not notice if the first
641 * mount using this sb set explicit options and a second mount using
642 * this sb does not set any security options. (The first options
643 * will be used for both mounts)
645 if ((sbsec->flags & SE_SBINITIALIZED) && (sb->s_type->fs_flags & FS_BINARY_MOUNTDATA)
649 root_isec = backing_inode_security_novalidate(root);
652 * parse the mount options, check if they are valid sids.
653 * also check if someone is trying to mount the same sb more
654 * than once with different security options.
657 if (opts->fscontext_sid) {
658 fscontext_sid = opts->fscontext_sid;
659 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid,
661 goto out_double_mount;
662 sbsec->flags |= FSCONTEXT_MNT;
664 if (opts->context_sid) {
665 context_sid = opts->context_sid;
666 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid,
668 goto out_double_mount;
669 sbsec->flags |= CONTEXT_MNT;
671 if (opts->rootcontext_sid) {
672 rootcontext_sid = opts->rootcontext_sid;
673 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid,
675 goto out_double_mount;
676 sbsec->flags |= ROOTCONTEXT_MNT;
678 if (opts->defcontext_sid) {
679 defcontext_sid = opts->defcontext_sid;
680 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid,
682 goto out_double_mount;
683 sbsec->flags |= DEFCONTEXT_MNT;
687 if (sbsec->flags & SE_SBINITIALIZED) {
688 /* previously mounted with options, but not on this attempt? */
689 if ((sbsec->flags & SE_MNTMASK) && !opts)
690 goto out_double_mount;
695 if (strcmp(sb->s_type->name, "proc") == 0)
696 sbsec->flags |= SE_SBPROC | SE_SBGENFS;
698 if (!strcmp(sb->s_type->name, "debugfs") ||
699 !strcmp(sb->s_type->name, "tracefs") ||
700 !strcmp(sb->s_type->name, "binder") ||
701 !strcmp(sb->s_type->name, "bpf") ||
702 !strcmp(sb->s_type->name, "pstore") ||
703 !strcmp(sb->s_type->name, "securityfs"))
704 sbsec->flags |= SE_SBGENFS;
706 if (!strcmp(sb->s_type->name, "sysfs") ||
707 !strcmp(sb->s_type->name, "cgroup") ||
708 !strcmp(sb->s_type->name, "cgroup2"))
709 sbsec->flags |= SE_SBGENFS | SE_SBGENFS_XATTR;
711 if (!sbsec->behavior) {
713 * Determine the labeling behavior to use for this
716 rc = security_fs_use(sb);
718 pr_warn("%s: security_fs_use(%s) returned %d\n",
719 __func__, sb->s_type->name, rc);
725 * If this is a user namespace mount and the filesystem type is not
726 * explicitly whitelisted, then no contexts are allowed on the command
727 * line and security labels must be ignored.
729 if (sb->s_user_ns != &init_user_ns &&
730 strcmp(sb->s_type->name, "tmpfs") &&
731 strcmp(sb->s_type->name, "ramfs") &&
732 strcmp(sb->s_type->name, "devpts") &&
733 strcmp(sb->s_type->name, "overlay")) {
734 if (context_sid || fscontext_sid || rootcontext_sid ||
739 if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
740 sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
741 rc = security_transition_sid(current_sid(),
744 &sbsec->mntpoint_sid);
751 /* sets the context of the superblock for the fs being mounted. */
753 rc = may_context_mount_sb_relabel(fscontext_sid, sbsec, cred);
757 sbsec->sid = fscontext_sid;
761 * Switch to using mount point labeling behavior.
762 * sets the label used on all file below the mountpoint, and will set
763 * the superblock context if not already set.
765 if (sbsec->flags & SE_SBNATIVE) {
767 * This means we are initializing a superblock that has been
768 * mounted before the SELinux was initialized and the
769 * filesystem requested native labeling. We had already
770 * returned SECURITY_LSM_NATIVE_LABELS in *set_kern_flags
771 * in the original mount attempt, so now we just need to set
772 * the SECURITY_FS_USE_NATIVE behavior.
774 sbsec->behavior = SECURITY_FS_USE_NATIVE;
775 } else if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !context_sid) {
776 sbsec->behavior = SECURITY_FS_USE_NATIVE;
777 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
781 if (!fscontext_sid) {
782 rc = may_context_mount_sb_relabel(context_sid, sbsec,
786 sbsec->sid = context_sid;
788 rc = may_context_mount_inode_relabel(context_sid, sbsec,
793 if (!rootcontext_sid)
794 rootcontext_sid = context_sid;
796 sbsec->mntpoint_sid = context_sid;
797 sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
800 if (rootcontext_sid) {
801 rc = may_context_mount_inode_relabel(rootcontext_sid, sbsec,
806 root_isec->sid = rootcontext_sid;
807 root_isec->initialized = LABEL_INITIALIZED;
810 if (defcontext_sid) {
811 if (sbsec->behavior != SECURITY_FS_USE_XATTR &&
812 sbsec->behavior != SECURITY_FS_USE_NATIVE) {
814 pr_warn("SELinux: defcontext option is "
815 "invalid for this filesystem type\n");
819 if (defcontext_sid != sbsec->def_sid) {
820 rc = may_context_mount_inode_relabel(defcontext_sid,
826 sbsec->def_sid = defcontext_sid;
830 rc = sb_finish_set_opts(sb);
832 mutex_unlock(&sbsec->lock);
836 pr_warn("SELinux: mount invalid. Same superblock, different "
837 "security settings for (dev %s, type %s)\n", sb->s_id,
842 static int selinux_cmp_sb_context(const struct super_block *oldsb,
843 const struct super_block *newsb)
845 struct superblock_security_struct *old = selinux_superblock(oldsb);
846 struct superblock_security_struct *new = selinux_superblock(newsb);
847 char oldflags = old->flags & SE_MNTMASK;
848 char newflags = new->flags & SE_MNTMASK;
850 if (oldflags != newflags)
852 if ((oldflags & FSCONTEXT_MNT) && old->sid != new->sid)
854 if ((oldflags & CONTEXT_MNT) && old->mntpoint_sid != new->mntpoint_sid)
856 if ((oldflags & DEFCONTEXT_MNT) && old->def_sid != new->def_sid)
858 if (oldflags & ROOTCONTEXT_MNT) {
859 struct inode_security_struct *oldroot = backing_inode_security(oldsb->s_root);
860 struct inode_security_struct *newroot = backing_inode_security(newsb->s_root);
861 if (oldroot->sid != newroot->sid)
866 pr_warn("SELinux: mount invalid. Same superblock, "
867 "different security settings for (dev %s, "
868 "type %s)\n", newsb->s_id, newsb->s_type->name);
872 static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
873 struct super_block *newsb,
874 unsigned long kern_flags,
875 unsigned long *set_kern_flags)
878 const struct superblock_security_struct *oldsbsec =
879 selinux_superblock(oldsb);
880 struct superblock_security_struct *newsbsec = selinux_superblock(newsb);
882 int set_fscontext = (oldsbsec->flags & FSCONTEXT_MNT);
883 int set_context = (oldsbsec->flags & CONTEXT_MNT);
884 int set_rootcontext = (oldsbsec->flags & ROOTCONTEXT_MNT);
887 * Specifying internal flags without providing a place to
888 * place the results is not allowed.
890 if (kern_flags && !set_kern_flags)
893 mutex_lock(&newsbsec->lock);
896 * if the parent was able to be mounted it clearly had no special lsm
897 * mount options. thus we can safely deal with this superblock later
899 if (!selinux_initialized()) {
900 if (kern_flags & SECURITY_LSM_NATIVE_LABELS) {
901 newsbsec->flags |= SE_SBNATIVE;
902 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
907 /* how can we clone if the old one wasn't set up?? */
908 BUG_ON(!(oldsbsec->flags & SE_SBINITIALIZED));
910 /* if fs is reusing a sb, make sure that the contexts match */
911 if (newsbsec->flags & SE_SBINITIALIZED) {
912 mutex_unlock(&newsbsec->lock);
913 if ((kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context)
914 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
915 return selinux_cmp_sb_context(oldsb, newsb);
918 newsbsec->flags = oldsbsec->flags;
920 newsbsec->sid = oldsbsec->sid;
921 newsbsec->def_sid = oldsbsec->def_sid;
922 newsbsec->behavior = oldsbsec->behavior;
924 if (newsbsec->behavior == SECURITY_FS_USE_NATIVE &&
925 !(kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context) {
926 rc = security_fs_use(newsb);
931 if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !set_context) {
932 newsbsec->behavior = SECURITY_FS_USE_NATIVE;
933 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
937 u32 sid = oldsbsec->mntpoint_sid;
941 if (!set_rootcontext) {
942 struct inode_security_struct *newisec = backing_inode_security(newsb->s_root);
945 newsbsec->mntpoint_sid = sid;
947 if (set_rootcontext) {
948 const struct inode_security_struct *oldisec = backing_inode_security(oldsb->s_root);
949 struct inode_security_struct *newisec = backing_inode_security(newsb->s_root);
951 newisec->sid = oldisec->sid;
954 sb_finish_set_opts(newsb);
956 mutex_unlock(&newsbsec->lock);
961 * NOTE: the caller is responsible for freeing the memory even if on error.
963 static int selinux_add_opt(int token, const char *s, void **mnt_opts)
965 struct selinux_mnt_opts *opts = *mnt_opts;
969 if (token == Opt_seclabel)
970 /* eaten and completely ignored */
975 if (!selinux_initialized()) {
976 pr_warn("SELinux: Unable to set superblock options before the security server is initialized\n");
981 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
989 if (opts->context_sid || opts->defcontext_sid)
991 dst_sid = &opts->context_sid;
994 if (opts->fscontext_sid)
996 dst_sid = &opts->fscontext_sid;
998 case Opt_rootcontext:
999 if (opts->rootcontext_sid)
1001 dst_sid = &opts->rootcontext_sid;
1003 case Opt_defcontext:
1004 if (opts->context_sid || opts->defcontext_sid)
1006 dst_sid = &opts->defcontext_sid;
1012 rc = security_context_str_to_sid(s, dst_sid, GFP_KERNEL);
1014 pr_warn("SELinux: security_context_str_to_sid (%s) failed with errno=%d\n",
1019 pr_warn(SEL_MOUNT_FAIL_MSG);
1023 static int show_sid(struct seq_file *m, u32 sid)
1025 char *context = NULL;
1029 rc = security_sid_to_context(sid, &context, &len);
1031 bool has_comma = strchr(context, ',');
1036 seq_escape(m, context, "\"\n\\");
1044 static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb)
1046 struct superblock_security_struct *sbsec = selinux_superblock(sb);
1049 if (!(sbsec->flags & SE_SBINITIALIZED))
1052 if (!selinux_initialized())
1055 if (sbsec->flags & FSCONTEXT_MNT) {
1057 seq_puts(m, FSCONTEXT_STR);
1058 rc = show_sid(m, sbsec->sid);
1062 if (sbsec->flags & CONTEXT_MNT) {
1064 seq_puts(m, CONTEXT_STR);
1065 rc = show_sid(m, sbsec->mntpoint_sid);
1069 if (sbsec->flags & DEFCONTEXT_MNT) {
1071 seq_puts(m, DEFCONTEXT_STR);
1072 rc = show_sid(m, sbsec->def_sid);
1076 if (sbsec->flags & ROOTCONTEXT_MNT) {
1077 struct dentry *root = sb->s_root;
1078 struct inode_security_struct *isec = backing_inode_security(root);
1080 seq_puts(m, ROOTCONTEXT_STR);
1081 rc = show_sid(m, isec->sid);
1085 if (sbsec->flags & SBLABEL_MNT) {
1087 seq_puts(m, SECLABEL_STR);
1092 static inline u16 inode_mode_to_security_class(umode_t mode)
1094 switch (mode & S_IFMT) {
1096 return SECCLASS_SOCK_FILE;
1098 return SECCLASS_LNK_FILE;
1100 return SECCLASS_FILE;
1102 return SECCLASS_BLK_FILE;
1104 return SECCLASS_DIR;
1106 return SECCLASS_CHR_FILE;
1108 return SECCLASS_FIFO_FILE;
1112 return SECCLASS_FILE;
1115 static inline int default_protocol_stream(int protocol)
1117 return (protocol == IPPROTO_IP || protocol == IPPROTO_TCP ||
1118 protocol == IPPROTO_MPTCP);
1121 static inline int default_protocol_dgram(int protocol)
1123 return (protocol == IPPROTO_IP || protocol == IPPROTO_UDP);
1126 static inline u16 socket_type_to_security_class(int family, int type, int protocol)
1128 int extsockclass = selinux_policycap_extsockclass();
1134 case SOCK_SEQPACKET:
1135 return SECCLASS_UNIX_STREAM_SOCKET;
1138 return SECCLASS_UNIX_DGRAM_SOCKET;
1145 case SOCK_SEQPACKET:
1146 if (default_protocol_stream(protocol))
1147 return SECCLASS_TCP_SOCKET;
1148 else if (extsockclass && protocol == IPPROTO_SCTP)
1149 return SECCLASS_SCTP_SOCKET;
1151 return SECCLASS_RAWIP_SOCKET;
1153 if (default_protocol_dgram(protocol))
1154 return SECCLASS_UDP_SOCKET;
1155 else if (extsockclass && (protocol == IPPROTO_ICMP ||
1156 protocol == IPPROTO_ICMPV6))
1157 return SECCLASS_ICMP_SOCKET;
1159 return SECCLASS_RAWIP_SOCKET;
1161 return SECCLASS_DCCP_SOCKET;
1163 return SECCLASS_RAWIP_SOCKET;
1169 return SECCLASS_NETLINK_ROUTE_SOCKET;
1170 case NETLINK_SOCK_DIAG:
1171 return SECCLASS_NETLINK_TCPDIAG_SOCKET;
1173 return SECCLASS_NETLINK_NFLOG_SOCKET;
1175 return SECCLASS_NETLINK_XFRM_SOCKET;
1176 case NETLINK_SELINUX:
1177 return SECCLASS_NETLINK_SELINUX_SOCKET;
1179 return SECCLASS_NETLINK_ISCSI_SOCKET;
1181 return SECCLASS_NETLINK_AUDIT_SOCKET;
1182 case NETLINK_FIB_LOOKUP:
1183 return SECCLASS_NETLINK_FIB_LOOKUP_SOCKET;
1184 case NETLINK_CONNECTOR:
1185 return SECCLASS_NETLINK_CONNECTOR_SOCKET;
1186 case NETLINK_NETFILTER:
1187 return SECCLASS_NETLINK_NETFILTER_SOCKET;
1188 case NETLINK_DNRTMSG:
1189 return SECCLASS_NETLINK_DNRT_SOCKET;
1190 case NETLINK_KOBJECT_UEVENT:
1191 return SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET;
1192 case NETLINK_GENERIC:
1193 return SECCLASS_NETLINK_GENERIC_SOCKET;
1194 case NETLINK_SCSITRANSPORT:
1195 return SECCLASS_NETLINK_SCSITRANSPORT_SOCKET;
1197 return SECCLASS_NETLINK_RDMA_SOCKET;
1198 case NETLINK_CRYPTO:
1199 return SECCLASS_NETLINK_CRYPTO_SOCKET;
1201 return SECCLASS_NETLINK_SOCKET;
1204 return SECCLASS_PACKET_SOCKET;
1206 return SECCLASS_KEY_SOCKET;
1208 return SECCLASS_APPLETALK_SOCKET;
1214 return SECCLASS_AX25_SOCKET;
1216 return SECCLASS_IPX_SOCKET;
1218 return SECCLASS_NETROM_SOCKET;
1220 return SECCLASS_ATMPVC_SOCKET;
1222 return SECCLASS_X25_SOCKET;
1224 return SECCLASS_ROSE_SOCKET;
1226 return SECCLASS_DECNET_SOCKET;
1228 return SECCLASS_ATMSVC_SOCKET;
1230 return SECCLASS_RDS_SOCKET;
1232 return SECCLASS_IRDA_SOCKET;
1234 return SECCLASS_PPPOX_SOCKET;
1236 return SECCLASS_LLC_SOCKET;
1238 return SECCLASS_CAN_SOCKET;
1240 return SECCLASS_TIPC_SOCKET;
1242 return SECCLASS_BLUETOOTH_SOCKET;
1244 return SECCLASS_IUCV_SOCKET;
1246 return SECCLASS_RXRPC_SOCKET;
1248 return SECCLASS_ISDN_SOCKET;
1250 return SECCLASS_PHONET_SOCKET;
1252 return SECCLASS_IEEE802154_SOCKET;
1254 return SECCLASS_CAIF_SOCKET;
1256 return SECCLASS_ALG_SOCKET;
1258 return SECCLASS_NFC_SOCKET;
1260 return SECCLASS_VSOCK_SOCKET;
1262 return SECCLASS_KCM_SOCKET;
1264 return SECCLASS_QIPCRTR_SOCKET;
1266 return SECCLASS_SMC_SOCKET;
1268 return SECCLASS_XDP_SOCKET;
1270 return SECCLASS_MCTP_SOCKET;
1272 #error New address family defined, please update this function.
1277 return SECCLASS_SOCKET;
1280 static int selinux_genfs_get_sid(struct dentry *dentry,
1286 struct super_block *sb = dentry->d_sb;
1287 char *buffer, *path;
1289 buffer = (char *)__get_free_page(GFP_KERNEL);
1293 path = dentry_path_raw(dentry, buffer, PAGE_SIZE);
1297 if (flags & SE_SBPROC) {
1298 /* each process gets a /proc/PID/ entry. Strip off the
1299 * PID part to get a valid selinux labeling.
1300 * e.g. /proc/1/net/rpc/nfs -> /net/rpc/nfs */
1301 while (path[1] >= '0' && path[1] <= '9') {
1306 rc = security_genfs_sid(sb->s_type->name,
1308 if (rc == -ENOENT) {
1309 /* No match in policy, mark as unlabeled. */
1310 *sid = SECINITSID_UNLABELED;
1314 free_page((unsigned long)buffer);
1318 static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
1319 u32 def_sid, u32 *sid)
1321 #define INITCONTEXTLEN 255
1326 len = INITCONTEXTLEN;
1327 context = kmalloc(len + 1, GFP_NOFS);
1331 context[len] = '\0';
1332 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
1333 if (rc == -ERANGE) {
1336 /* Need a larger buffer. Query for the right size. */
1337 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
1342 context = kmalloc(len + 1, GFP_NOFS);
1346 context[len] = '\0';
1347 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
1352 if (rc != -ENODATA) {
1353 pr_warn("SELinux: %s: getxattr returned %d for dev=%s ino=%ld\n",
1354 __func__, -rc, inode->i_sb->s_id, inode->i_ino);
1361 rc = security_context_to_sid_default(context, rc, sid,
1364 char *dev = inode->i_sb->s_id;
1365 unsigned long ino = inode->i_ino;
1367 if (rc == -EINVAL) {
1368 pr_notice_ratelimited("SELinux: inode=%lu on dev=%s was found to have an invalid context=%s. This indicates you may need to relabel the inode or the filesystem in question.\n",
1371 pr_warn("SELinux: %s: context_to_sid(%s) returned %d for dev=%s ino=%ld\n",
1372 __func__, context, -rc, dev, ino);
1379 /* The inode's security attributes must be initialized before first use. */
1380 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry)
1382 struct superblock_security_struct *sbsec = NULL;
1383 struct inode_security_struct *isec = selinux_inode(inode);
1384 u32 task_sid, sid = 0;
1386 struct dentry *dentry;
1389 if (isec->initialized == LABEL_INITIALIZED)
1392 spin_lock(&isec->lock);
1393 if (isec->initialized == LABEL_INITIALIZED)
1396 if (isec->sclass == SECCLASS_FILE)
1397 isec->sclass = inode_mode_to_security_class(inode->i_mode);
1399 sbsec = selinux_superblock(inode->i_sb);
1400 if (!(sbsec->flags & SE_SBINITIALIZED)) {
1401 /* Defer initialization until selinux_complete_init,
1402 after the initial policy is loaded and the security
1403 server is ready to handle calls. */
1404 spin_lock(&sbsec->isec_lock);
1405 if (list_empty(&isec->list))
1406 list_add(&isec->list, &sbsec->isec_head);
1407 spin_unlock(&sbsec->isec_lock);
1411 sclass = isec->sclass;
1412 task_sid = isec->task_sid;
1414 isec->initialized = LABEL_PENDING;
1415 spin_unlock(&isec->lock);
1417 switch (sbsec->behavior) {
1419 * In case of SECURITY_FS_USE_NATIVE we need to re-fetch the labels
1420 * via xattr when called from delayed_superblock_init().
1422 case SECURITY_FS_USE_NATIVE:
1423 case SECURITY_FS_USE_XATTR:
1424 if (!(inode->i_opflags & IOP_XATTR)) {
1425 sid = sbsec->def_sid;
1428 /* Need a dentry, since the xattr API requires one.
1429 Life would be simpler if we could just pass the inode. */
1431 /* Called from d_instantiate or d_splice_alias. */
1432 dentry = dget(opt_dentry);
1435 * Called from selinux_complete_init, try to find a dentry.
1436 * Some filesystems really want a connected one, so try
1437 * that first. We could split SECURITY_FS_USE_XATTR in
1438 * two, depending upon that...
1440 dentry = d_find_alias(inode);
1442 dentry = d_find_any_alias(inode);
1446 * this is can be hit on boot when a file is accessed
1447 * before the policy is loaded. When we load policy we
1448 * may find inodes that have no dentry on the
1449 * sbsec->isec_head list. No reason to complain as these
1450 * will get fixed up the next time we go through
1451 * inode_doinit with a dentry, before these inodes could
1452 * be used again by userspace.
1457 rc = inode_doinit_use_xattr(inode, dentry, sbsec->def_sid,
1463 case SECURITY_FS_USE_TASK:
1466 case SECURITY_FS_USE_TRANS:
1467 /* Default to the fs SID. */
1470 /* Try to obtain a transition SID. */
1471 rc = security_transition_sid(task_sid, sid,
1472 sclass, NULL, &sid);
1476 case SECURITY_FS_USE_MNTPOINT:
1477 sid = sbsec->mntpoint_sid;
1480 /* Default to the fs superblock SID. */
1483 if ((sbsec->flags & SE_SBGENFS) &&
1484 (!S_ISLNK(inode->i_mode) ||
1485 selinux_policycap_genfs_seclabel_symlinks())) {
1486 /* We must have a dentry to determine the label on
1489 /* Called from d_instantiate or
1490 * d_splice_alias. */
1491 dentry = dget(opt_dentry);
1493 /* Called from selinux_complete_init, try to
1494 * find a dentry. Some filesystems really want
1495 * a connected one, so try that first.
1497 dentry = d_find_alias(inode);
1499 dentry = d_find_any_alias(inode);
1502 * This can be hit on boot when a file is accessed
1503 * before the policy is loaded. When we load policy we
1504 * may find inodes that have no dentry on the
1505 * sbsec->isec_head list. No reason to complain as
1506 * these will get fixed up the next time we go through
1507 * inode_doinit() with a dentry, before these inodes
1508 * could be used again by userspace.
1512 rc = selinux_genfs_get_sid(dentry, sclass,
1513 sbsec->flags, &sid);
1519 if ((sbsec->flags & SE_SBGENFS_XATTR) &&
1520 (inode->i_opflags & IOP_XATTR)) {
1521 rc = inode_doinit_use_xattr(inode, dentry,
1534 spin_lock(&isec->lock);
1535 if (isec->initialized == LABEL_PENDING) {
1537 isec->initialized = LABEL_INVALID;
1540 isec->initialized = LABEL_INITIALIZED;
1545 spin_unlock(&isec->lock);
1549 spin_lock(&isec->lock);
1550 if (isec->initialized == LABEL_PENDING) {
1551 isec->initialized = LABEL_INVALID;
1554 spin_unlock(&isec->lock);
1558 /* Convert a Linux signal to an access vector. */
1559 static inline u32 signal_to_av(int sig)
1565 /* Commonly granted from child to parent. */
1566 perm = PROCESS__SIGCHLD;
1569 /* Cannot be caught or ignored */
1570 perm = PROCESS__SIGKILL;
1573 /* Cannot be caught or ignored */
1574 perm = PROCESS__SIGSTOP;
1577 /* All other signals. */
1578 perm = PROCESS__SIGNAL;
1585 #if CAP_LAST_CAP > 63
1586 #error Fix SELinux to handle capabilities > 63.
1589 /* Check whether a task is allowed to use a capability. */
1590 static int cred_has_capability(const struct cred *cred,
1591 int cap, unsigned int opts, bool initns)
1593 struct common_audit_data ad;
1594 struct av_decision avd;
1596 u32 sid = cred_sid(cred);
1597 u32 av = CAP_TO_MASK(cap);
1600 ad.type = LSM_AUDIT_DATA_CAP;
1603 switch (CAP_TO_INDEX(cap)) {
1605 sclass = initns ? SECCLASS_CAPABILITY : SECCLASS_CAP_USERNS;
1608 sclass = initns ? SECCLASS_CAPABILITY2 : SECCLASS_CAP2_USERNS;
1611 pr_err("SELinux: out of range capability %d\n", cap);
1616 rc = avc_has_perm_noaudit(sid, sid, sclass, av, 0, &avd);
1617 if (!(opts & CAP_OPT_NOAUDIT)) {
1618 int rc2 = avc_audit(sid, sid, sclass, av, &avd, rc, &ad);
1625 /* Check whether a task has a particular permission to an inode.
1626 The 'adp' parameter is optional and allows other audit
1627 data to be passed (e.g. the dentry). */
1628 static int inode_has_perm(const struct cred *cred,
1629 struct inode *inode,
1631 struct common_audit_data *adp)
1633 struct inode_security_struct *isec;
1636 validate_creds(cred);
1638 if (unlikely(IS_PRIVATE(inode)))
1641 sid = cred_sid(cred);
1642 isec = selinux_inode(inode);
1644 return avc_has_perm(sid, isec->sid, isec->sclass, perms, adp);
1647 /* Same as inode_has_perm, but pass explicit audit data containing
1648 the dentry to help the auditing code to more easily generate the
1649 pathname if needed. */
1650 static inline int dentry_has_perm(const struct cred *cred,
1651 struct dentry *dentry,
1654 struct inode *inode = d_backing_inode(dentry);
1655 struct common_audit_data ad;
1657 ad.type = LSM_AUDIT_DATA_DENTRY;
1658 ad.u.dentry = dentry;
1659 __inode_security_revalidate(inode, dentry, true);
1660 return inode_has_perm(cred, inode, av, &ad);
1663 /* Same as inode_has_perm, but pass explicit audit data containing
1664 the path to help the auditing code to more easily generate the
1665 pathname if needed. */
1666 static inline int path_has_perm(const struct cred *cred,
1667 const struct path *path,
1670 struct inode *inode = d_backing_inode(path->dentry);
1671 struct common_audit_data ad;
1673 ad.type = LSM_AUDIT_DATA_PATH;
1675 __inode_security_revalidate(inode, path->dentry, true);
1676 return inode_has_perm(cred, inode, av, &ad);
1679 /* Same as path_has_perm, but uses the inode from the file struct. */
1680 static inline int file_path_has_perm(const struct cred *cred,
1684 struct common_audit_data ad;
1686 ad.type = LSM_AUDIT_DATA_FILE;
1688 return inode_has_perm(cred, file_inode(file), av, &ad);
1691 #ifdef CONFIG_BPF_SYSCALL
1692 static int bpf_fd_pass(struct file *file, u32 sid);
1695 /* Check whether a task can use an open file descriptor to
1696 access an inode in a given way. Check access to the
1697 descriptor itself, and then use dentry_has_perm to
1698 check a particular permission to the file.
1699 Access to the descriptor is implicitly granted if it
1700 has the same SID as the process. If av is zero, then
1701 access to the file is not checked, e.g. for cases
1702 where only the descriptor is affected like seek. */
1703 static int file_has_perm(const struct cred *cred,
1707 struct file_security_struct *fsec = selinux_file(file);
1708 struct inode *inode = file_inode(file);
1709 struct common_audit_data ad;
1710 u32 sid = cred_sid(cred);
1713 ad.type = LSM_AUDIT_DATA_FILE;
1716 if (sid != fsec->sid) {
1717 rc = avc_has_perm(sid, fsec->sid,
1725 #ifdef CONFIG_BPF_SYSCALL
1726 rc = bpf_fd_pass(file, cred_sid(cred));
1731 /* av is zero if only checking access to the descriptor. */
1734 rc = inode_has_perm(cred, inode, av, &ad);
1741 * Determine the label for an inode that might be unioned.
1744 selinux_determine_inode_label(const struct task_security_struct *tsec,
1746 const struct qstr *name, u16 tclass,
1749 const struct superblock_security_struct *sbsec =
1750 selinux_superblock(dir->i_sb);
1752 if ((sbsec->flags & SE_SBINITIALIZED) &&
1753 (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) {
1754 *_new_isid = sbsec->mntpoint_sid;
1755 } else if ((sbsec->flags & SBLABEL_MNT) &&
1757 *_new_isid = tsec->create_sid;
1759 const struct inode_security_struct *dsec = inode_security(dir);
1760 return security_transition_sid(tsec->sid,
1768 /* Check whether a task can create a file. */
1769 static int may_create(struct inode *dir,
1770 struct dentry *dentry,
1773 const struct task_security_struct *tsec = selinux_cred(current_cred());
1774 struct inode_security_struct *dsec;
1775 struct superblock_security_struct *sbsec;
1777 struct common_audit_data ad;
1780 dsec = inode_security(dir);
1781 sbsec = selinux_superblock(dir->i_sb);
1785 ad.type = LSM_AUDIT_DATA_DENTRY;
1786 ad.u.dentry = dentry;
1788 rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR,
1789 DIR__ADD_NAME | DIR__SEARCH,
1794 rc = selinux_determine_inode_label(tsec, dir, &dentry->d_name, tclass,
1799 rc = avc_has_perm(sid, newsid, tclass, FILE__CREATE, &ad);
1803 return avc_has_perm(newsid, sbsec->sid,
1804 SECCLASS_FILESYSTEM,
1805 FILESYSTEM__ASSOCIATE, &ad);
1809 #define MAY_UNLINK 1
1812 /* Check whether a task can link, unlink, or rmdir a file/directory. */
1813 static int may_link(struct inode *dir,
1814 struct dentry *dentry,
1818 struct inode_security_struct *dsec, *isec;
1819 struct common_audit_data ad;
1820 u32 sid = current_sid();
1824 dsec = inode_security(dir);
1825 isec = backing_inode_security(dentry);
1827 ad.type = LSM_AUDIT_DATA_DENTRY;
1828 ad.u.dentry = dentry;
1831 av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME);
1832 rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR, av, &ad);
1847 pr_warn("SELinux: %s: unrecognized kind %d\n",
1852 rc = avc_has_perm(sid, isec->sid, isec->sclass, av, &ad);
1856 static inline int may_rename(struct inode *old_dir,
1857 struct dentry *old_dentry,
1858 struct inode *new_dir,
1859 struct dentry *new_dentry)
1861 struct inode_security_struct *old_dsec, *new_dsec, *old_isec, *new_isec;
1862 struct common_audit_data ad;
1863 u32 sid = current_sid();
1865 int old_is_dir, new_is_dir;
1868 old_dsec = inode_security(old_dir);
1869 old_isec = backing_inode_security(old_dentry);
1870 old_is_dir = d_is_dir(old_dentry);
1871 new_dsec = inode_security(new_dir);
1873 ad.type = LSM_AUDIT_DATA_DENTRY;
1875 ad.u.dentry = old_dentry;
1876 rc = avc_has_perm(sid, old_dsec->sid, SECCLASS_DIR,
1877 DIR__REMOVE_NAME | DIR__SEARCH, &ad);
1880 rc = avc_has_perm(sid, old_isec->sid,
1881 old_isec->sclass, FILE__RENAME, &ad);
1884 if (old_is_dir && new_dir != old_dir) {
1885 rc = avc_has_perm(sid, old_isec->sid,
1886 old_isec->sclass, DIR__REPARENT, &ad);
1891 ad.u.dentry = new_dentry;
1892 av = DIR__ADD_NAME | DIR__SEARCH;
1893 if (d_is_positive(new_dentry))
1894 av |= DIR__REMOVE_NAME;
1895 rc = avc_has_perm(sid, new_dsec->sid, SECCLASS_DIR, av, &ad);
1898 if (d_is_positive(new_dentry)) {
1899 new_isec = backing_inode_security(new_dentry);
1900 new_is_dir = d_is_dir(new_dentry);
1901 rc = avc_has_perm(sid, new_isec->sid,
1903 (new_is_dir ? DIR__RMDIR : FILE__UNLINK), &ad);
1911 /* Check whether a task can perform a filesystem operation. */
1912 static int superblock_has_perm(const struct cred *cred,
1913 struct super_block *sb,
1915 struct common_audit_data *ad)
1917 struct superblock_security_struct *sbsec;
1918 u32 sid = cred_sid(cred);
1920 sbsec = selinux_superblock(sb);
1921 return avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad);
1924 /* Convert a Linux mode and permission mask to an access vector. */
1925 static inline u32 file_mask_to_av(int mode, int mask)
1929 if (!S_ISDIR(mode)) {
1930 if (mask & MAY_EXEC)
1931 av |= FILE__EXECUTE;
1932 if (mask & MAY_READ)
1935 if (mask & MAY_APPEND)
1937 else if (mask & MAY_WRITE)
1941 if (mask & MAY_EXEC)
1943 if (mask & MAY_WRITE)
1945 if (mask & MAY_READ)
1952 /* Convert a Linux file to an access vector. */
1953 static inline u32 file_to_av(struct file *file)
1957 if (file->f_mode & FMODE_READ)
1959 if (file->f_mode & FMODE_WRITE) {
1960 if (file->f_flags & O_APPEND)
1967 * Special file opened with flags 3 for ioctl-only use.
1976 * Convert a file to an access vector and include the correct
1979 static inline u32 open_file_to_av(struct file *file)
1981 u32 av = file_to_av(file);
1982 struct inode *inode = file_inode(file);
1984 if (selinux_policycap_openperm() &&
1985 inode->i_sb->s_magic != SOCKFS_MAGIC)
1991 /* Hook functions begin here. */
1993 static int selinux_binder_set_context_mgr(const struct cred *mgr)
1995 return avc_has_perm(current_sid(), cred_sid(mgr), SECCLASS_BINDER,
1996 BINDER__SET_CONTEXT_MGR, NULL);
1999 static int selinux_binder_transaction(const struct cred *from,
2000 const struct cred *to)
2002 u32 mysid = current_sid();
2003 u32 fromsid = cred_sid(from);
2004 u32 tosid = cred_sid(to);
2007 if (mysid != fromsid) {
2008 rc = avc_has_perm(mysid, fromsid, SECCLASS_BINDER,
2009 BINDER__IMPERSONATE, NULL);
2014 return avc_has_perm(fromsid, tosid,
2015 SECCLASS_BINDER, BINDER__CALL, NULL);
2018 static int selinux_binder_transfer_binder(const struct cred *from,
2019 const struct cred *to)
2021 return avc_has_perm(cred_sid(from), cred_sid(to),
2022 SECCLASS_BINDER, BINDER__TRANSFER,
2026 static int selinux_binder_transfer_file(const struct cred *from,
2027 const struct cred *to,
2030 u32 sid = cred_sid(to);
2031 struct file_security_struct *fsec = selinux_file(file);
2032 struct dentry *dentry = file->f_path.dentry;
2033 struct inode_security_struct *isec;
2034 struct common_audit_data ad;
2037 ad.type = LSM_AUDIT_DATA_PATH;
2038 ad.u.path = file->f_path;
2040 if (sid != fsec->sid) {
2041 rc = avc_has_perm(sid, fsec->sid,
2049 #ifdef CONFIG_BPF_SYSCALL
2050 rc = bpf_fd_pass(file, sid);
2055 if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
2058 isec = backing_inode_security(dentry);
2059 return avc_has_perm(sid, isec->sid, isec->sclass, file_to_av(file),
2063 static int selinux_ptrace_access_check(struct task_struct *child,
2066 u32 sid = current_sid();
2067 u32 csid = task_sid_obj(child);
2069 if (mode & PTRACE_MODE_READ)
2070 return avc_has_perm(sid, csid, SECCLASS_FILE, FILE__READ,
2073 return avc_has_perm(sid, csid, SECCLASS_PROCESS, PROCESS__PTRACE,
2077 static int selinux_ptrace_traceme(struct task_struct *parent)
2079 return avc_has_perm(task_sid_obj(parent), task_sid_obj(current),
2080 SECCLASS_PROCESS, PROCESS__PTRACE, NULL);
2083 static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
2084 kernel_cap_t *inheritable, kernel_cap_t *permitted)
2086 return avc_has_perm(current_sid(), task_sid_obj(target),
2087 SECCLASS_PROCESS, PROCESS__GETCAP, NULL);
2090 static int selinux_capset(struct cred *new, const struct cred *old,
2091 const kernel_cap_t *effective,
2092 const kernel_cap_t *inheritable,
2093 const kernel_cap_t *permitted)
2095 return avc_has_perm(cred_sid(old), cred_sid(new), SECCLASS_PROCESS,
2096 PROCESS__SETCAP, NULL);
2100 * (This comment used to live with the selinux_task_setuid hook,
2101 * which was removed).
2103 * Since setuid only affects the current process, and since the SELinux
2104 * controls are not based on the Linux identity attributes, SELinux does not
2105 * need to control this operation. However, SELinux does control the use of
2106 * the CAP_SETUID and CAP_SETGID capabilities using the capable hook.
2109 static int selinux_capable(const struct cred *cred, struct user_namespace *ns,
2110 int cap, unsigned int opts)
2112 return cred_has_capability(cred, cap, opts, ns == &init_user_ns);
2115 static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb)
2117 const struct cred *cred = current_cred();
2132 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAMOD, NULL);
2140 case Q_XGETNEXTQUOTA:
2141 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAGET, NULL);
2144 rc = 0; /* let the kernel handle invalid cmds */
2150 static int selinux_quota_on(struct dentry *dentry)
2152 const struct cred *cred = current_cred();
2154 return dentry_has_perm(cred, dentry, FILE__QUOTAON);
2157 static int selinux_syslog(int type)
2160 case SYSLOG_ACTION_READ_ALL: /* Read last kernel messages */
2161 case SYSLOG_ACTION_SIZE_BUFFER: /* Return size of the log buffer */
2162 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
2163 SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, NULL);
2164 case SYSLOG_ACTION_CONSOLE_OFF: /* Disable logging to console */
2165 case SYSLOG_ACTION_CONSOLE_ON: /* Enable logging to console */
2166 /* Set level of messages printed to console */
2167 case SYSLOG_ACTION_CONSOLE_LEVEL:
2168 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
2169 SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE,
2172 /* All other syslog types */
2173 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
2174 SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, NULL);
2178 * Check that a process has enough memory to allocate a new virtual
2179 * mapping. 0 means there is enough memory for the allocation to
2180 * succeed and -ENOMEM implies there is not.
2182 * Do not audit the selinux permission check, as this is applied to all
2183 * processes that allocate mappings.
2185 static int selinux_vm_enough_memory(struct mm_struct *mm, long pages)
2187 int rc, cap_sys_admin = 0;
2189 rc = cred_has_capability(current_cred(), CAP_SYS_ADMIN,
2190 CAP_OPT_NOAUDIT, true);
2194 return cap_sys_admin;
2197 /* binprm security operations */
2199 static u32 ptrace_parent_sid(void)
2202 struct task_struct *tracer;
2205 tracer = ptrace_parent(current);
2207 sid = task_sid_obj(tracer);
2213 static int check_nnp_nosuid(const struct linux_binprm *bprm,
2214 const struct task_security_struct *old_tsec,
2215 const struct task_security_struct *new_tsec)
2217 int nnp = (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS);
2218 int nosuid = !mnt_may_suid(bprm->file->f_path.mnt);
2222 if (!nnp && !nosuid)
2223 return 0; /* neither NNP nor nosuid */
2225 if (new_tsec->sid == old_tsec->sid)
2226 return 0; /* No change in credentials */
2229 * If the policy enables the nnp_nosuid_transition policy capability,
2230 * then we permit transitions under NNP or nosuid if the
2231 * policy allows the corresponding permission between
2232 * the old and new contexts.
2234 if (selinux_policycap_nnp_nosuid_transition()) {
2237 av |= PROCESS2__NNP_TRANSITION;
2239 av |= PROCESS2__NOSUID_TRANSITION;
2240 rc = avc_has_perm(old_tsec->sid, new_tsec->sid,
2241 SECCLASS_PROCESS2, av, NULL);
2247 * We also permit NNP or nosuid transitions to bounded SIDs,
2248 * i.e. SIDs that are guaranteed to only be allowed a subset
2249 * of the permissions of the current SID.
2251 rc = security_bounded_transition(old_tsec->sid,
2257 * On failure, preserve the errno values for NNP vs nosuid.
2258 * NNP: Operation not permitted for caller.
2259 * nosuid: Permission denied to file.
2266 static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)
2268 const struct task_security_struct *old_tsec;
2269 struct task_security_struct *new_tsec;
2270 struct inode_security_struct *isec;
2271 struct common_audit_data ad;
2272 struct inode *inode = file_inode(bprm->file);
2275 /* SELinux context only depends on initial program or script and not
2276 * the script interpreter */
2278 old_tsec = selinux_cred(current_cred());
2279 new_tsec = selinux_cred(bprm->cred);
2280 isec = inode_security(inode);
2282 /* Default to the current task SID. */
2283 new_tsec->sid = old_tsec->sid;
2284 new_tsec->osid = old_tsec->sid;
2286 /* Reset fs, key, and sock SIDs on execve. */
2287 new_tsec->create_sid = 0;
2288 new_tsec->keycreate_sid = 0;
2289 new_tsec->sockcreate_sid = 0;
2291 if (old_tsec->exec_sid) {
2292 new_tsec->sid = old_tsec->exec_sid;
2293 /* Reset exec SID on execve. */
2294 new_tsec->exec_sid = 0;
2296 /* Fail on NNP or nosuid if not an allowed transition. */
2297 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec);
2301 /* Check for a default transition on this program. */
2302 rc = security_transition_sid(old_tsec->sid,
2303 isec->sid, SECCLASS_PROCESS, NULL,
2309 * Fallback to old SID on NNP or nosuid if not an allowed
2312 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec);
2314 new_tsec->sid = old_tsec->sid;
2317 ad.type = LSM_AUDIT_DATA_FILE;
2318 ad.u.file = bprm->file;
2320 if (new_tsec->sid == old_tsec->sid) {
2321 rc = avc_has_perm(old_tsec->sid, isec->sid,
2322 SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, &ad);
2326 /* Check permissions for the transition. */
2327 rc = avc_has_perm(old_tsec->sid, new_tsec->sid,
2328 SECCLASS_PROCESS, PROCESS__TRANSITION, &ad);
2332 rc = avc_has_perm(new_tsec->sid, isec->sid,
2333 SECCLASS_FILE, FILE__ENTRYPOINT, &ad);
2337 /* Check for shared state */
2338 if (bprm->unsafe & LSM_UNSAFE_SHARE) {
2339 rc = avc_has_perm(old_tsec->sid, new_tsec->sid,
2340 SECCLASS_PROCESS, PROCESS__SHARE,
2346 /* Make sure that anyone attempting to ptrace over a task that
2347 * changes its SID has the appropriate permit */
2348 if (bprm->unsafe & LSM_UNSAFE_PTRACE) {
2349 u32 ptsid = ptrace_parent_sid();
2351 rc = avc_has_perm(ptsid, new_tsec->sid,
2353 PROCESS__PTRACE, NULL);
2359 /* Clear any possibly unsafe personality bits on exec: */
2360 bprm->per_clear |= PER_CLEAR_ON_SETID;
2362 /* Enable secure mode for SIDs transitions unless
2363 the noatsecure permission is granted between
2364 the two SIDs, i.e. ahp returns 0. */
2365 rc = avc_has_perm(old_tsec->sid, new_tsec->sid,
2366 SECCLASS_PROCESS, PROCESS__NOATSECURE,
2368 bprm->secureexec |= !!rc;
2374 static int match_file(const void *p, struct file *file, unsigned fd)
2376 return file_has_perm(p, file, file_to_av(file)) ? fd + 1 : 0;
2379 /* Derived from fs/exec.c:flush_old_files. */
2380 static inline void flush_unauthorized_files(const struct cred *cred,
2381 struct files_struct *files)
2383 struct file *file, *devnull = NULL;
2384 struct tty_struct *tty;
2388 tty = get_current_tty();
2390 spin_lock(&tty->files_lock);
2391 if (!list_empty(&tty->tty_files)) {
2392 struct tty_file_private *file_priv;
2394 /* Revalidate access to controlling tty.
2395 Use file_path_has_perm on the tty path directly
2396 rather than using file_has_perm, as this particular
2397 open file may belong to another process and we are
2398 only interested in the inode-based check here. */
2399 file_priv = list_first_entry(&tty->tty_files,
2400 struct tty_file_private, list);
2401 file = file_priv->file;
2402 if (file_path_has_perm(cred, file, FILE__READ | FILE__WRITE))
2405 spin_unlock(&tty->files_lock);
2408 /* Reset controlling tty. */
2412 /* Revalidate access to inherited open files. */
2413 n = iterate_fd(files, 0, match_file, cred);
2414 if (!n) /* none found? */
2417 devnull = dentry_open(&selinux_null, O_RDWR, cred);
2418 if (IS_ERR(devnull))
2420 /* replace all the matching ones with this */
2422 replace_fd(n - 1, devnull, 0);
2423 } while ((n = iterate_fd(files, n, match_file, cred)) != 0);
2429 * Prepare a process for imminent new credential changes due to exec
2431 static void selinux_bprm_committing_creds(struct linux_binprm *bprm)
2433 struct task_security_struct *new_tsec;
2434 struct rlimit *rlim, *initrlim;
2437 new_tsec = selinux_cred(bprm->cred);
2438 if (new_tsec->sid == new_tsec->osid)
2441 /* Close files for which the new task SID is not authorized. */
2442 flush_unauthorized_files(bprm->cred, current->files);
2444 /* Always clear parent death signal on SID transitions. */
2445 current->pdeath_signal = 0;
2447 /* Check whether the new SID can inherit resource limits from the old
2448 * SID. If not, reset all soft limits to the lower of the current
2449 * task's hard limit and the init task's soft limit.
2451 * Note that the setting of hard limits (even to lower them) can be
2452 * controlled by the setrlimit check. The inclusion of the init task's
2453 * soft limit into the computation is to avoid resetting soft limits
2454 * higher than the default soft limit for cases where the default is
2455 * lower than the hard limit, e.g. RLIMIT_CORE or RLIMIT_STACK.
2457 rc = avc_has_perm(new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS,
2458 PROCESS__RLIMITINH, NULL);
2460 /* protect against do_prlimit() */
2462 for (i = 0; i < RLIM_NLIMITS; i++) {
2463 rlim = current->signal->rlim + i;
2464 initrlim = init_task.signal->rlim + i;
2465 rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur);
2467 task_unlock(current);
2468 if (IS_ENABLED(CONFIG_POSIX_TIMERS))
2469 update_rlimit_cpu(current, rlimit(RLIMIT_CPU));
2474 * Clean up the process immediately after the installation of new credentials
2477 static void selinux_bprm_committed_creds(struct linux_binprm *bprm)
2479 const struct task_security_struct *tsec = selinux_cred(current_cred());
2489 /* Check whether the new SID can inherit signal state from the old SID.
2490 * If not, clear itimers to avoid subsequent signal generation and
2491 * flush and unblock signals.
2493 * This must occur _after_ the task SID has been updated so that any
2494 * kill done after the flush will be checked against the new SID.
2496 rc = avc_has_perm(osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL);
2500 spin_lock_irq(&unrcu_pointer(current->sighand)->siglock);
2501 if (!fatal_signal_pending(current)) {
2502 flush_sigqueue(¤t->pending);
2503 flush_sigqueue(¤t->signal->shared_pending);
2504 flush_signal_handlers(current, 1);
2505 sigemptyset(¤t->blocked);
2506 recalc_sigpending();
2508 spin_unlock_irq(&unrcu_pointer(current->sighand)->siglock);
2511 /* Wake up the parent if it is waiting so that it can recheck
2512 * wait permission to the new task SID. */
2513 read_lock(&tasklist_lock);
2514 __wake_up_parent(current, unrcu_pointer(current->real_parent));
2515 read_unlock(&tasklist_lock);
2518 /* superblock security operations */
2520 static int selinux_sb_alloc_security(struct super_block *sb)
2522 struct superblock_security_struct *sbsec = selinux_superblock(sb);
2524 mutex_init(&sbsec->lock);
2525 INIT_LIST_HEAD(&sbsec->isec_head);
2526 spin_lock_init(&sbsec->isec_lock);
2527 sbsec->sid = SECINITSID_UNLABELED;
2528 sbsec->def_sid = SECINITSID_FILE;
2529 sbsec->mntpoint_sid = SECINITSID_UNLABELED;
2534 static inline int opt_len(const char *s)
2536 bool open_quote = false;
2540 for (len = 0; (c = s[len]) != '\0'; len++) {
2542 open_quote = !open_quote;
2543 if (c == ',' && !open_quote)
2549 static int selinux_sb_eat_lsm_opts(char *options, void **mnt_opts)
2551 char *from = options;
2557 int len = opt_len(from);
2561 token = match_opt_prefix(from, len, &arg);
2563 if (token != Opt_error) {
2568 for (p = q = arg; p < from + len; p++) {
2573 arg = kmemdup_nul(arg, q - arg, GFP_KERNEL);
2579 rc = selinux_add_opt(token, arg, mnt_opts);
2586 if (!first) { // copy with preceding comma
2591 memmove(to, from, len);
2604 selinux_free_mnt_opts(*mnt_opts);
2610 static int selinux_sb_mnt_opts_compat(struct super_block *sb, void *mnt_opts)
2612 struct selinux_mnt_opts *opts = mnt_opts;
2613 struct superblock_security_struct *sbsec = selinux_superblock(sb);
2616 * Superblock not initialized (i.e. no options) - reject if any
2617 * options specified, otherwise accept.
2619 if (!(sbsec->flags & SE_SBINITIALIZED))
2620 return opts ? 1 : 0;
2623 * Superblock initialized and no options specified - reject if
2624 * superblock has any options set, otherwise accept.
2627 return (sbsec->flags & SE_MNTMASK) ? 1 : 0;
2629 if (opts->fscontext_sid) {
2630 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid,
2631 opts->fscontext_sid))
2634 if (opts->context_sid) {
2635 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid,
2639 if (opts->rootcontext_sid) {
2640 struct inode_security_struct *root_isec;
2642 root_isec = backing_inode_security(sb->s_root);
2643 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid,
2644 opts->rootcontext_sid))
2647 if (opts->defcontext_sid) {
2648 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid,
2649 opts->defcontext_sid))
2655 static int selinux_sb_remount(struct super_block *sb, void *mnt_opts)
2657 struct selinux_mnt_opts *opts = mnt_opts;
2658 struct superblock_security_struct *sbsec = selinux_superblock(sb);
2660 if (!(sbsec->flags & SE_SBINITIALIZED))
2666 if (opts->fscontext_sid) {
2667 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid,
2668 opts->fscontext_sid))
2669 goto out_bad_option;
2671 if (opts->context_sid) {
2672 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid,
2674 goto out_bad_option;
2676 if (opts->rootcontext_sid) {
2677 struct inode_security_struct *root_isec;
2678 root_isec = backing_inode_security(sb->s_root);
2679 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid,
2680 opts->rootcontext_sid))
2681 goto out_bad_option;
2683 if (opts->defcontext_sid) {
2684 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid,
2685 opts->defcontext_sid))
2686 goto out_bad_option;
2691 pr_warn("SELinux: unable to change security options "
2692 "during remount (dev %s, type=%s)\n", sb->s_id,
2697 static int selinux_sb_kern_mount(struct super_block *sb)
2699 const struct cred *cred = current_cred();
2700 struct common_audit_data ad;
2702 ad.type = LSM_AUDIT_DATA_DENTRY;
2703 ad.u.dentry = sb->s_root;
2704 return superblock_has_perm(cred, sb, FILESYSTEM__MOUNT, &ad);
2707 static int selinux_sb_statfs(struct dentry *dentry)
2709 const struct cred *cred = current_cred();
2710 struct common_audit_data ad;
2712 ad.type = LSM_AUDIT_DATA_DENTRY;
2713 ad.u.dentry = dentry->d_sb->s_root;
2714 return superblock_has_perm(cred, dentry->d_sb, FILESYSTEM__GETATTR, &ad);
2717 static int selinux_mount(const char *dev_name,
2718 const struct path *path,
2720 unsigned long flags,
2723 const struct cred *cred = current_cred();
2725 if (flags & MS_REMOUNT)
2726 return superblock_has_perm(cred, path->dentry->d_sb,
2727 FILESYSTEM__REMOUNT, NULL);
2729 return path_has_perm(cred, path, FILE__MOUNTON);
2732 static int selinux_move_mount(const struct path *from_path,
2733 const struct path *to_path)
2735 const struct cred *cred = current_cred();
2737 return path_has_perm(cred, to_path, FILE__MOUNTON);
2740 static int selinux_umount(struct vfsmount *mnt, int flags)
2742 const struct cred *cred = current_cred();
2744 return superblock_has_perm(cred, mnt->mnt_sb,
2745 FILESYSTEM__UNMOUNT, NULL);
2748 static int selinux_fs_context_dup(struct fs_context *fc,
2749 struct fs_context *src_fc)
2751 const struct selinux_mnt_opts *src = src_fc->security;
2756 fc->security = kmemdup(src, sizeof(*src), GFP_KERNEL);
2757 return fc->security ? 0 : -ENOMEM;
2760 static const struct fs_parameter_spec selinux_fs_parameters[] = {
2761 fsparam_string(CONTEXT_STR, Opt_context),
2762 fsparam_string(DEFCONTEXT_STR, Opt_defcontext),
2763 fsparam_string(FSCONTEXT_STR, Opt_fscontext),
2764 fsparam_string(ROOTCONTEXT_STR, Opt_rootcontext),
2765 fsparam_flag (SECLABEL_STR, Opt_seclabel),
2769 static int selinux_fs_context_parse_param(struct fs_context *fc,
2770 struct fs_parameter *param)
2772 struct fs_parse_result result;
2775 opt = fs_parse(fc, selinux_fs_parameters, param, &result);
2779 return selinux_add_opt(opt, param->string, &fc->security);
2782 /* inode security operations */
2784 static int selinux_inode_alloc_security(struct inode *inode)
2786 struct inode_security_struct *isec = selinux_inode(inode);
2787 u32 sid = current_sid();
2789 spin_lock_init(&isec->lock);
2790 INIT_LIST_HEAD(&isec->list);
2791 isec->inode = inode;
2792 isec->sid = SECINITSID_UNLABELED;
2793 isec->sclass = SECCLASS_FILE;
2794 isec->task_sid = sid;
2795 isec->initialized = LABEL_INVALID;
2800 static void selinux_inode_free_security(struct inode *inode)
2802 inode_free_security(inode);
2805 static int selinux_dentry_init_security(struct dentry *dentry, int mode,
2806 const struct qstr *name,
2807 const char **xattr_name, void **ctx,
2813 rc = selinux_determine_inode_label(selinux_cred(current_cred()),
2814 d_inode(dentry->d_parent), name,
2815 inode_mode_to_security_class(mode),
2821 *xattr_name = XATTR_NAME_SELINUX;
2823 return security_sid_to_context(newsid, (char **)ctx,
2827 static int selinux_dentry_create_files_as(struct dentry *dentry, int mode,
2829 const struct cred *old,
2834 struct task_security_struct *tsec;
2836 rc = selinux_determine_inode_label(selinux_cred(old),
2837 d_inode(dentry->d_parent), name,
2838 inode_mode_to_security_class(mode),
2843 tsec = selinux_cred(new);
2844 tsec->create_sid = newsid;
2848 static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
2849 const struct qstr *qstr,
2851 void **value, size_t *len)
2853 const struct task_security_struct *tsec = selinux_cred(current_cred());
2854 struct superblock_security_struct *sbsec;
2859 sbsec = selinux_superblock(dir->i_sb);
2861 newsid = tsec->create_sid;
2863 rc = selinux_determine_inode_label(tsec, dir, qstr,
2864 inode_mode_to_security_class(inode->i_mode),
2869 /* Possibly defer initialization to selinux_complete_init. */
2870 if (sbsec->flags & SE_SBINITIALIZED) {
2871 struct inode_security_struct *isec = selinux_inode(inode);
2872 isec->sclass = inode_mode_to_security_class(inode->i_mode);
2874 isec->initialized = LABEL_INITIALIZED;
2877 if (!selinux_initialized() ||
2878 !(sbsec->flags & SBLABEL_MNT))
2882 *name = XATTR_SELINUX_SUFFIX;
2885 rc = security_sid_to_context_force(newsid,
2896 static int selinux_inode_init_security_anon(struct inode *inode,
2897 const struct qstr *name,
2898 const struct inode *context_inode)
2900 const struct task_security_struct *tsec = selinux_cred(current_cred());
2901 struct common_audit_data ad;
2902 struct inode_security_struct *isec;
2905 if (unlikely(!selinux_initialized()))
2908 isec = selinux_inode(inode);
2911 * We only get here once per ephemeral inode. The inode has
2912 * been initialized via inode_alloc_security but is otherwise
2916 if (context_inode) {
2917 struct inode_security_struct *context_isec =
2918 selinux_inode(context_inode);
2919 if (context_isec->initialized != LABEL_INITIALIZED) {
2920 pr_err("SELinux: context_inode is not initialized");
2924 isec->sclass = context_isec->sclass;
2925 isec->sid = context_isec->sid;
2927 isec->sclass = SECCLASS_ANON_INODE;
2928 rc = security_transition_sid(
2929 tsec->sid, tsec->sid,
2930 isec->sclass, name, &isec->sid);
2935 isec->initialized = LABEL_INITIALIZED;
2937 * Now that we've initialized security, check whether we're
2938 * allowed to actually create this type of anonymous inode.
2941 ad.type = LSM_AUDIT_DATA_ANONINODE;
2942 ad.u.anonclass = name ? (const char *)name->name : "?";
2944 return avc_has_perm(tsec->sid,
2951 static int selinux_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode)
2953 return may_create(dir, dentry, SECCLASS_FILE);
2956 static int selinux_inode_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
2958 return may_link(dir, old_dentry, MAY_LINK);
2961 static int selinux_inode_unlink(struct inode *dir, struct dentry *dentry)
2963 return may_link(dir, dentry, MAY_UNLINK);
2966 static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const char *name)
2968 return may_create(dir, dentry, SECCLASS_LNK_FILE);
2971 static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mask)
2973 return may_create(dir, dentry, SECCLASS_DIR);
2976 static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry)
2978 return may_link(dir, dentry, MAY_RMDIR);
2981 static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
2983 return may_create(dir, dentry, inode_mode_to_security_class(mode));
2986 static int selinux_inode_rename(struct inode *old_inode, struct dentry *old_dentry,
2987 struct inode *new_inode, struct dentry *new_dentry)
2989 return may_rename(old_inode, old_dentry, new_inode, new_dentry);
2992 static int selinux_inode_readlink(struct dentry *dentry)
2994 const struct cred *cred = current_cred();
2996 return dentry_has_perm(cred, dentry, FILE__READ);
2999 static int selinux_inode_follow_link(struct dentry *dentry, struct inode *inode,
3002 const struct cred *cred = current_cred();
3003 struct common_audit_data ad;
3004 struct inode_security_struct *isec;
3007 validate_creds(cred);
3009 ad.type = LSM_AUDIT_DATA_DENTRY;
3010 ad.u.dentry = dentry;
3011 sid = cred_sid(cred);
3012 isec = inode_security_rcu(inode, rcu);
3014 return PTR_ERR(isec);
3016 return avc_has_perm(sid, isec->sid, isec->sclass, FILE__READ, &ad);
3019 static noinline int audit_inode_permission(struct inode *inode,
3020 u32 perms, u32 audited, u32 denied,
3023 struct common_audit_data ad;
3024 struct inode_security_struct *isec = selinux_inode(inode);
3026 ad.type = LSM_AUDIT_DATA_INODE;
3029 return slow_avc_audit(current_sid(), isec->sid, isec->sclass, perms,
3030 audited, denied, result, &ad);
3033 static int selinux_inode_permission(struct inode *inode, int mask)
3035 const struct cred *cred = current_cred();
3038 bool no_block = mask & MAY_NOT_BLOCK;
3039 struct inode_security_struct *isec;
3041 struct av_decision avd;
3043 u32 audited, denied;
3045 from_access = mask & MAY_ACCESS;
3046 mask &= (MAY_READ|MAY_WRITE|MAY_EXEC|MAY_APPEND);
3048 /* No permission to check. Existence test. */
3052 validate_creds(cred);
3054 if (unlikely(IS_PRIVATE(inode)))
3057 perms = file_mask_to_av(inode->i_mode, mask);
3059 sid = cred_sid(cred);
3060 isec = inode_security_rcu(inode, no_block);
3062 return PTR_ERR(isec);
3064 rc = avc_has_perm_noaudit(sid, isec->sid, isec->sclass, perms, 0,
3066 audited = avc_audit_required(perms, &avd, rc,
3067 from_access ? FILE__AUDIT_ACCESS : 0,
3069 if (likely(!audited))
3072 rc2 = audit_inode_permission(inode, perms, audited, denied, rc);
3078 static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
3080 const struct cred *cred = current_cred();
3081 struct inode *inode = d_backing_inode(dentry);
3082 unsigned int ia_valid = iattr->ia_valid;
3083 __u32 av = FILE__WRITE;
3085 /* ATTR_FORCE is just used for ATTR_KILL_S[UG]ID. */
3086 if (ia_valid & ATTR_FORCE) {
3087 ia_valid &= ~(ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_MODE |
3093 if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID |
3094 ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))
3095 return dentry_has_perm(cred, dentry, FILE__SETATTR);
3097 if (selinux_policycap_openperm() &&
3098 inode->i_sb->s_magic != SOCKFS_MAGIC &&
3099 (ia_valid & ATTR_SIZE) &&
3100 !(ia_valid & ATTR_FILE))
3103 return dentry_has_perm(cred, dentry, av);
3106 static int selinux_inode_getattr(const struct path *path)
3108 return path_has_perm(current_cred(), path, FILE__GETATTR);
3111 static bool has_cap_mac_admin(bool audit)
3113 const struct cred *cred = current_cred();
3114 unsigned int opts = audit ? CAP_OPT_NONE : CAP_OPT_NOAUDIT;
3116 if (cap_capable(cred, &init_user_ns, CAP_MAC_ADMIN, opts))
3118 if (cred_has_capability(cred, CAP_MAC_ADMIN, opts, true))
3123 static int selinux_inode_setxattr(struct mnt_idmap *idmap,
3124 struct dentry *dentry, const char *name,
3125 const void *value, size_t size, int flags)
3127 struct inode *inode = d_backing_inode(dentry);
3128 struct inode_security_struct *isec;
3129 struct superblock_security_struct *sbsec;
3130 struct common_audit_data ad;
3131 u32 newsid, sid = current_sid();
3134 if (strcmp(name, XATTR_NAME_SELINUX)) {
3135 rc = cap_inode_setxattr(dentry, name, value, size, flags);
3139 /* Not an attribute we recognize, so just check the
3140 ordinary setattr permission. */
3141 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3144 if (!selinux_initialized())
3145 return (inode_owner_or_capable(idmap, inode) ? 0 : -EPERM);
3147 sbsec = selinux_superblock(inode->i_sb);
3148 if (!(sbsec->flags & SBLABEL_MNT))
3151 if (!inode_owner_or_capable(idmap, inode))
3154 ad.type = LSM_AUDIT_DATA_DENTRY;
3155 ad.u.dentry = dentry;
3157 isec = backing_inode_security(dentry);
3158 rc = avc_has_perm(sid, isec->sid, isec->sclass,
3159 FILE__RELABELFROM, &ad);
3163 rc = security_context_to_sid(value, size, &newsid,
3165 if (rc == -EINVAL) {
3166 if (!has_cap_mac_admin(true)) {
3167 struct audit_buffer *ab;
3170 /* We strip a nul only if it is at the end, otherwise the
3171 * context contains a nul and we should audit that */
3173 const char *str = value;
3175 if (str[size - 1] == '\0')
3176 audit_size = size - 1;
3182 ab = audit_log_start(audit_context(),
3183 GFP_ATOMIC, AUDIT_SELINUX_ERR);
3186 audit_log_format(ab, "op=setxattr invalid_context=");
3187 audit_log_n_untrustedstring(ab, value, audit_size);
3192 rc = security_context_to_sid_force(value,
3198 rc = avc_has_perm(sid, newsid, isec->sclass,
3199 FILE__RELABELTO, &ad);
3203 rc = security_validate_transition(isec->sid, newsid,
3208 return avc_has_perm(newsid,
3210 SECCLASS_FILESYSTEM,
3211 FILESYSTEM__ASSOCIATE,
3215 static int selinux_inode_set_acl(struct mnt_idmap *idmap,
3216 struct dentry *dentry, const char *acl_name,
3217 struct posix_acl *kacl)
3219 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3222 static int selinux_inode_get_acl(struct mnt_idmap *idmap,
3223 struct dentry *dentry, const char *acl_name)
3225 return dentry_has_perm(current_cred(), dentry, FILE__GETATTR);
3228 static int selinux_inode_remove_acl(struct mnt_idmap *idmap,
3229 struct dentry *dentry, const char *acl_name)
3231 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3234 static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,
3235 const void *value, size_t size,
3238 struct inode *inode = d_backing_inode(dentry);
3239 struct inode_security_struct *isec;
3243 if (strcmp(name, XATTR_NAME_SELINUX)) {
3244 /* Not an attribute we recognize, so nothing to do. */
3248 if (!selinux_initialized()) {
3249 /* If we haven't even been initialized, then we can't validate
3250 * against a policy, so leave the label as invalid. It may
3251 * resolve to a valid label on the next revalidation try if
3252 * we've since initialized.
3257 rc = security_context_to_sid_force(value, size,
3260 pr_err("SELinux: unable to map context to SID"
3261 "for (%s, %lu), rc=%d\n",
3262 inode->i_sb->s_id, inode->i_ino, -rc);
3266 isec = backing_inode_security(dentry);
3267 spin_lock(&isec->lock);
3268 isec->sclass = inode_mode_to_security_class(inode->i_mode);
3270 isec->initialized = LABEL_INITIALIZED;
3271 spin_unlock(&isec->lock);
3274 static int selinux_inode_getxattr(struct dentry *dentry, const char *name)
3276 const struct cred *cred = current_cred();
3278 return dentry_has_perm(cred, dentry, FILE__GETATTR);
3281 static int selinux_inode_listxattr(struct dentry *dentry)
3283 const struct cred *cred = current_cred();
3285 return dentry_has_perm(cred, dentry, FILE__GETATTR);
3288 static int selinux_inode_removexattr(struct mnt_idmap *idmap,
3289 struct dentry *dentry, const char *name)
3291 if (strcmp(name, XATTR_NAME_SELINUX)) {
3292 int rc = cap_inode_removexattr(idmap, dentry, name);
3296 /* Not an attribute we recognize, so just check the
3297 ordinary setattr permission. */
3298 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3301 if (!selinux_initialized())
3304 /* No one is allowed to remove a SELinux security label.
3305 You can change the label, but all data must be labeled. */
3309 static int selinux_path_notify(const struct path *path, u64 mask,
3310 unsigned int obj_type)
3315 struct common_audit_data ad;
3317 ad.type = LSM_AUDIT_DATA_PATH;
3321 * Set permission needed based on the type of mark being set.
3322 * Performs an additional check for sb watches.
3325 case FSNOTIFY_OBJ_TYPE_VFSMOUNT:
3326 perm = FILE__WATCH_MOUNT;
3328 case FSNOTIFY_OBJ_TYPE_SB:
3329 perm = FILE__WATCH_SB;
3330 ret = superblock_has_perm(current_cred(), path->dentry->d_sb,
3331 FILESYSTEM__WATCH, &ad);
3335 case FSNOTIFY_OBJ_TYPE_INODE:
3342 /* blocking watches require the file:watch_with_perm permission */
3343 if (mask & (ALL_FSNOTIFY_PERM_EVENTS))
3344 perm |= FILE__WATCH_WITH_PERM;
3346 /* watches on read-like events need the file:watch_reads permission */
3347 if (mask & (FS_ACCESS | FS_ACCESS_PERM | FS_CLOSE_NOWRITE))
3348 perm |= FILE__WATCH_READS;
3350 return path_has_perm(current_cred(), path, perm);
3354 * Copy the inode security context value to the user.
3356 * Permission check is handled by selinux_inode_getxattr hook.
3358 static int selinux_inode_getsecurity(struct mnt_idmap *idmap,
3359 struct inode *inode, const char *name,
3360 void **buffer, bool alloc)
3364 char *context = NULL;
3365 struct inode_security_struct *isec;
3368 * If we're not initialized yet, then we can't validate contexts, so
3369 * just let vfs_getxattr fall back to using the on-disk xattr.
3371 if (!selinux_initialized() ||
3372 strcmp(name, XATTR_SELINUX_SUFFIX))
3376 * If the caller has CAP_MAC_ADMIN, then get the raw context
3377 * value even if it is not defined by current policy; otherwise,
3378 * use the in-core value under current policy.
3379 * Use the non-auditing forms of the permission checks since
3380 * getxattr may be called by unprivileged processes commonly
3381 * and lack of permission just means that we fall back to the
3382 * in-core context value, not a denial.
3384 isec = inode_security(inode);
3385 if (has_cap_mac_admin(false))
3386 error = security_sid_to_context_force(isec->sid, &context,
3389 error = security_sid_to_context(isec->sid,
3403 static int selinux_inode_setsecurity(struct inode *inode, const char *name,
3404 const void *value, size_t size, int flags)
3406 struct inode_security_struct *isec = inode_security_novalidate(inode);
3407 struct superblock_security_struct *sbsec;
3411 if (strcmp(name, XATTR_SELINUX_SUFFIX))
3414 sbsec = selinux_superblock(inode->i_sb);
3415 if (!(sbsec->flags & SBLABEL_MNT))
3418 if (!value || !size)
3421 rc = security_context_to_sid(value, size, &newsid,
3426 spin_lock(&isec->lock);
3427 isec->sclass = inode_mode_to_security_class(inode->i_mode);
3429 isec->initialized = LABEL_INITIALIZED;
3430 spin_unlock(&isec->lock);
3434 static int selinux_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size)
3436 const int len = sizeof(XATTR_NAME_SELINUX);
3438 if (!selinux_initialized())
3441 if (buffer && len <= buffer_size)
3442 memcpy(buffer, XATTR_NAME_SELINUX, len);
3446 static void selinux_inode_getsecid(struct inode *inode, u32 *secid)
3448 struct inode_security_struct *isec = inode_security_novalidate(inode);
3452 static int selinux_inode_copy_up(struct dentry *src, struct cred **new)
3455 struct task_security_struct *tsec;
3456 struct cred *new_creds = *new;
3458 if (new_creds == NULL) {
3459 new_creds = prepare_creds();
3464 tsec = selinux_cred(new_creds);
3465 /* Get label from overlay inode and set it in create_sid */
3466 selinux_inode_getsecid(d_inode(src), &sid);
3467 tsec->create_sid = sid;
3472 static int selinux_inode_copy_up_xattr(const char *name)
3474 /* The copy_up hook above sets the initial context on an inode, but we
3475 * don't then want to overwrite it by blindly copying all the lower
3476 * xattrs up. Instead, we have to filter out SELinux-related xattrs.
3478 if (strcmp(name, XATTR_NAME_SELINUX) == 0)
3479 return 1; /* Discard */
3481 * Any other attribute apart from SELINUX is not claimed, supported
3487 /* kernfs node operations */
3489 static int selinux_kernfs_init_security(struct kernfs_node *kn_dir,
3490 struct kernfs_node *kn)
3492 const struct task_security_struct *tsec = selinux_cred(current_cred());
3493 u32 parent_sid, newsid, clen;
3497 rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, NULL, 0);
3504 context = kmalloc(clen, GFP_KERNEL);
3508 rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, context, clen);
3514 rc = security_context_to_sid(context, clen, &parent_sid,
3520 if (tsec->create_sid) {
3521 newsid = tsec->create_sid;
3523 u16 secclass = inode_mode_to_security_class(kn->mode);
3527 q.hash_len = hashlen_string(kn_dir, kn->name);
3529 rc = security_transition_sid(tsec->sid,
3530 parent_sid, secclass, &q,
3536 rc = security_sid_to_context_force(newsid,
3541 rc = kernfs_xattr_set(kn, XATTR_NAME_SELINUX, context, clen,
3548 /* file security operations */
3550 static int selinux_revalidate_file_permission(struct file *file, int mask)
3552 const struct cred *cred = current_cred();
3553 struct inode *inode = file_inode(file);
3555 /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
3556 if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE))
3559 return file_has_perm(cred, file,
3560 file_mask_to_av(inode->i_mode, mask));
3563 static int selinux_file_permission(struct file *file, int mask)
3565 struct inode *inode = file_inode(file);
3566 struct file_security_struct *fsec = selinux_file(file);
3567 struct inode_security_struct *isec;
3568 u32 sid = current_sid();
3571 /* No permission to check. Existence test. */
3574 isec = inode_security(inode);
3575 if (sid == fsec->sid && fsec->isid == isec->sid &&
3576 fsec->pseqno == avc_policy_seqno())
3577 /* No change since file_open check. */
3580 return selinux_revalidate_file_permission(file, mask);
3583 static int selinux_file_alloc_security(struct file *file)
3585 struct file_security_struct *fsec = selinux_file(file);
3586 u32 sid = current_sid();
3589 fsec->fown_sid = sid;
3595 * Check whether a task has the ioctl permission and cmd
3596 * operation to an inode.
3598 static int ioctl_has_perm(const struct cred *cred, struct file *file,
3599 u32 requested, u16 cmd)
3601 struct common_audit_data ad;
3602 struct file_security_struct *fsec = selinux_file(file);
3603 struct inode *inode = file_inode(file);
3604 struct inode_security_struct *isec;
3605 struct lsm_ioctlop_audit ioctl;
3606 u32 ssid = cred_sid(cred);
3608 u8 driver = cmd >> 8;
3609 u8 xperm = cmd & 0xff;
3611 ad.type = LSM_AUDIT_DATA_IOCTL_OP;
3614 ad.u.op->path = file->f_path;
3616 if (ssid != fsec->sid) {
3617 rc = avc_has_perm(ssid, fsec->sid,
3625 if (unlikely(IS_PRIVATE(inode)))
3628 isec = inode_security(inode);
3629 rc = avc_has_extended_perms(ssid, isec->sid, isec->sclass,
3630 requested, driver, xperm, &ad);
3635 static int selinux_file_ioctl(struct file *file, unsigned int cmd,
3638 const struct cred *cred = current_cred();
3645 case FS_IOC_GETFLAGS:
3646 case FS_IOC_GETVERSION:
3647 error = file_has_perm(cred, file, FILE__GETATTR);
3650 case FS_IOC_SETFLAGS:
3651 case FS_IOC_SETVERSION:
3652 error = file_has_perm(cred, file, FILE__SETATTR);
3655 /* sys_ioctl() checks */
3658 error = file_has_perm(cred, file, 0);
3663 error = cred_has_capability(cred, CAP_SYS_TTY_CONFIG,
3664 CAP_OPT_NONE, true);
3669 if (!selinux_policycap_ioctl_skip_cloexec())
3670 error = ioctl_has_perm(cred, file, FILE__IOCTL, (u16) cmd);
3673 /* default case assumes that the command will go
3674 * to the file's ioctl() function.
3677 error = ioctl_has_perm(cred, file, FILE__IOCTL, (u16) cmd);
3682 static int default_noexec __ro_after_init;
3684 static int file_map_prot_check(struct file *file, unsigned long prot, int shared)
3686 const struct cred *cred = current_cred();
3687 u32 sid = cred_sid(cred);
3690 if (default_noexec &&
3691 (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) ||
3692 (!shared && (prot & PROT_WRITE)))) {
3694 * We are making executable an anonymous mapping or a
3695 * private file mapping that will also be writable.
3696 * This has an additional check.
3698 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,
3699 PROCESS__EXECMEM, NULL);
3705 /* read access is always possible with a mapping */
3706 u32 av = FILE__READ;
3708 /* write access only matters if the mapping is shared */
3709 if (shared && (prot & PROT_WRITE))
3712 if (prot & PROT_EXEC)
3713 av |= FILE__EXECUTE;
3715 return file_has_perm(cred, file, av);
3722 static int selinux_mmap_addr(unsigned long addr)
3726 if (addr < CONFIG_LSM_MMAP_MIN_ADDR) {
3727 u32 sid = current_sid();
3728 rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT,
3729 MEMPROTECT__MMAP_ZERO, NULL);
3735 static int selinux_mmap_file(struct file *file,
3736 unsigned long reqprot __always_unused,
3737 unsigned long prot, unsigned long flags)
3739 struct common_audit_data ad;
3743 ad.type = LSM_AUDIT_DATA_FILE;
3745 rc = inode_has_perm(current_cred(), file_inode(file),
3751 return file_map_prot_check(file, prot,
3752 (flags & MAP_TYPE) == MAP_SHARED);
3755 static int selinux_file_mprotect(struct vm_area_struct *vma,
3756 unsigned long reqprot __always_unused,
3759 const struct cred *cred = current_cred();
3760 u32 sid = cred_sid(cred);
3762 if (default_noexec &&
3763 (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
3765 if (vma_is_initial_heap(vma)) {
3766 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,
3767 PROCESS__EXECHEAP, NULL);
3768 } else if (!vma->vm_file && (vma_is_initial_stack(vma) ||
3769 vma_is_stack_for_current(vma))) {
3770 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,
3771 PROCESS__EXECSTACK, NULL);
3772 } else if (vma->vm_file && vma->anon_vma) {
3774 * We are making executable a file mapping that has
3775 * had some COW done. Since pages might have been
3776 * written, check ability to execute the possibly
3777 * modified content. This typically should only
3778 * occur for text relocations.
3780 rc = file_has_perm(cred, vma->vm_file, FILE__EXECMOD);
3786 return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
3789 static int selinux_file_lock(struct file *file, unsigned int cmd)
3791 const struct cred *cred = current_cred();
3793 return file_has_perm(cred, file, FILE__LOCK);
3796 static int selinux_file_fcntl(struct file *file, unsigned int cmd,
3799 const struct cred *cred = current_cred();
3804 if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) {
3805 err = file_has_perm(cred, file, FILE__WRITE);
3814 case F_GETOWNER_UIDS:
3815 /* Just check FD__USE permission */
3816 err = file_has_perm(cred, file, 0);
3824 #if BITS_PER_LONG == 32
3829 err = file_has_perm(cred, file, FILE__LOCK);
3836 static void selinux_file_set_fowner(struct file *file)
3838 struct file_security_struct *fsec;
3840 fsec = selinux_file(file);
3841 fsec->fown_sid = current_sid();
3844 static int selinux_file_send_sigiotask(struct task_struct *tsk,
3845 struct fown_struct *fown, int signum)
3848 u32 sid = task_sid_obj(tsk);
3850 struct file_security_struct *fsec;
3852 /* struct fown_struct is never outside the context of a struct file */
3853 file = container_of(fown, struct file, f_owner);
3855 fsec = selinux_file(file);
3858 perm = signal_to_av(SIGIO); /* as per send_sigio_to_task */
3860 perm = signal_to_av(signum);
3862 return avc_has_perm(fsec->fown_sid, sid,
3863 SECCLASS_PROCESS, perm, NULL);
3866 static int selinux_file_receive(struct file *file)
3868 const struct cred *cred = current_cred();
3870 return file_has_perm(cred, file, file_to_av(file));
3873 static int selinux_file_open(struct file *file)
3875 struct file_security_struct *fsec;
3876 struct inode_security_struct *isec;
3878 fsec = selinux_file(file);
3879 isec = inode_security(file_inode(file));
3881 * Save inode label and policy sequence number
3882 * at open-time so that selinux_file_permission
3883 * can determine whether revalidation is necessary.
3884 * Task label is already saved in the file security
3885 * struct as its SID.
3887 fsec->isid = isec->sid;
3888 fsec->pseqno = avc_policy_seqno();
3890 * Since the inode label or policy seqno may have changed
3891 * between the selinux_inode_permission check and the saving
3892 * of state above, recheck that access is still permitted.
3893 * Otherwise, access might never be revalidated against the
3894 * new inode label or new policy.
3895 * This check is not redundant - do not remove.
3897 return file_path_has_perm(file->f_cred, file, open_file_to_av(file));
3900 /* task security operations */
3902 static int selinux_task_alloc(struct task_struct *task,
3903 unsigned long clone_flags)
3905 u32 sid = current_sid();
3907 return avc_has_perm(sid, sid, SECCLASS_PROCESS, PROCESS__FORK, NULL);
3911 * prepare a new set of credentials for modification
3913 static int selinux_cred_prepare(struct cred *new, const struct cred *old,
3916 const struct task_security_struct *old_tsec = selinux_cred(old);
3917 struct task_security_struct *tsec = selinux_cred(new);
3924 * transfer the SELinux data to a blank set of creds
3926 static void selinux_cred_transfer(struct cred *new, const struct cred *old)
3928 const struct task_security_struct *old_tsec = selinux_cred(old);
3929 struct task_security_struct *tsec = selinux_cred(new);
3934 static void selinux_cred_getsecid(const struct cred *c, u32 *secid)
3936 *secid = cred_sid(c);
3940 * set the security data for a kernel service
3941 * - all the creation contexts are set to unlabelled
3943 static int selinux_kernel_act_as(struct cred *new, u32 secid)
3945 struct task_security_struct *tsec = selinux_cred(new);
3946 u32 sid = current_sid();
3949 ret = avc_has_perm(sid, secid,
3950 SECCLASS_KERNEL_SERVICE,
3951 KERNEL_SERVICE__USE_AS_OVERRIDE,
3955 tsec->create_sid = 0;
3956 tsec->keycreate_sid = 0;
3957 tsec->sockcreate_sid = 0;
3963 * set the file creation context in a security record to the same as the
3964 * objective context of the specified inode
3966 static int selinux_kernel_create_files_as(struct cred *new, struct inode *inode)
3968 struct inode_security_struct *isec = inode_security(inode);
3969 struct task_security_struct *tsec = selinux_cred(new);
3970 u32 sid = current_sid();
3973 ret = avc_has_perm(sid, isec->sid,
3974 SECCLASS_KERNEL_SERVICE,
3975 KERNEL_SERVICE__CREATE_FILES_AS,
3979 tsec->create_sid = isec->sid;
3983 static int selinux_kernel_module_request(char *kmod_name)
3985 struct common_audit_data ad;
3987 ad.type = LSM_AUDIT_DATA_KMOD;
3988 ad.u.kmod_name = kmod_name;
3990 return avc_has_perm(current_sid(), SECINITSID_KERNEL, SECCLASS_SYSTEM,
3991 SYSTEM__MODULE_REQUEST, &ad);
3994 static int selinux_kernel_module_from_file(struct file *file)
3996 struct common_audit_data ad;
3997 struct inode_security_struct *isec;
3998 struct file_security_struct *fsec;
3999 u32 sid = current_sid();
4004 return avc_has_perm(sid, sid, SECCLASS_SYSTEM,
4005 SYSTEM__MODULE_LOAD, NULL);
4009 ad.type = LSM_AUDIT_DATA_FILE;
4012 fsec = selinux_file(file);
4013 if (sid != fsec->sid) {
4014 rc = avc_has_perm(sid, fsec->sid, SECCLASS_FD, FD__USE, &ad);
4019 isec = inode_security(file_inode(file));
4020 return avc_has_perm(sid, isec->sid, SECCLASS_SYSTEM,
4021 SYSTEM__MODULE_LOAD, &ad);
4024 static int selinux_kernel_read_file(struct file *file,
4025 enum kernel_read_file_id id,
4031 case READING_MODULE:
4032 rc = selinux_kernel_module_from_file(contents ? file : NULL);
4041 static int selinux_kernel_load_data(enum kernel_load_data_id id, bool contents)
4046 case LOADING_MODULE:
4047 rc = selinux_kernel_module_from_file(NULL);
4056 static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)
4058 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4059 PROCESS__SETPGID, NULL);
4062 static int selinux_task_getpgid(struct task_struct *p)
4064 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4065 PROCESS__GETPGID, NULL);
4068 static int selinux_task_getsid(struct task_struct *p)
4070 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4071 PROCESS__GETSESSION, NULL);
4074 static void selinux_current_getsecid_subj(u32 *secid)
4076 *secid = current_sid();
4079 static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid)
4081 *secid = task_sid_obj(p);
4084 static int selinux_task_setnice(struct task_struct *p, int nice)
4086 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4087 PROCESS__SETSCHED, NULL);
4090 static int selinux_task_setioprio(struct task_struct *p, int ioprio)
4092 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4093 PROCESS__SETSCHED, NULL);
4096 static int selinux_task_getioprio(struct task_struct *p)
4098 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4099 PROCESS__GETSCHED, NULL);
4102 static int selinux_task_prlimit(const struct cred *cred, const struct cred *tcred,
4109 if (flags & LSM_PRLIMIT_WRITE)
4110 av |= PROCESS__SETRLIMIT;
4111 if (flags & LSM_PRLIMIT_READ)
4112 av |= PROCESS__GETRLIMIT;
4113 return avc_has_perm(cred_sid(cred), cred_sid(tcred),
4114 SECCLASS_PROCESS, av, NULL);
4117 static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource,
4118 struct rlimit *new_rlim)
4120 struct rlimit *old_rlim = p->signal->rlim + resource;
4122 /* Control the ability to change the hard limit (whether
4123 lowering or raising it), so that the hard limit can
4124 later be used as a safe reset point for the soft limit
4125 upon context transitions. See selinux_bprm_committing_creds. */
4126 if (old_rlim->rlim_max != new_rlim->rlim_max)
4127 return avc_has_perm(current_sid(), task_sid_obj(p),
4128 SECCLASS_PROCESS, PROCESS__SETRLIMIT, NULL);
4133 static int selinux_task_setscheduler(struct task_struct *p)
4135 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4136 PROCESS__SETSCHED, NULL);
4139 static int selinux_task_getscheduler(struct task_struct *p)
4141 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4142 PROCESS__GETSCHED, NULL);
4145 static int selinux_task_movememory(struct task_struct *p)
4147 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4148 PROCESS__SETSCHED, NULL);
4151 static int selinux_task_kill(struct task_struct *p, struct kernel_siginfo *info,
4152 int sig, const struct cred *cred)
4158 perm = PROCESS__SIGNULL; /* null signal; existence test */
4160 perm = signal_to_av(sig);
4162 secid = current_sid();
4164 secid = cred_sid(cred);
4165 return avc_has_perm(secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL);
4168 static void selinux_task_to_inode(struct task_struct *p,
4169 struct inode *inode)
4171 struct inode_security_struct *isec = selinux_inode(inode);
4172 u32 sid = task_sid_obj(p);
4174 spin_lock(&isec->lock);
4175 isec->sclass = inode_mode_to_security_class(inode->i_mode);
4177 isec->initialized = LABEL_INITIALIZED;
4178 spin_unlock(&isec->lock);
4181 static int selinux_userns_create(const struct cred *cred)
4183 u32 sid = current_sid();
4185 return avc_has_perm(sid, sid, SECCLASS_USER_NAMESPACE,
4186 USER_NAMESPACE__CREATE, NULL);
4189 /* Returns error only if unable to parse addresses */
4190 static int selinux_parse_skb_ipv4(struct sk_buff *skb,
4191 struct common_audit_data *ad, u8 *proto)
4193 int offset, ihlen, ret = -EINVAL;
4194 struct iphdr _iph, *ih;
4196 offset = skb_network_offset(skb);
4197 ih = skb_header_pointer(skb, offset, sizeof(_iph), &_iph);
4201 ihlen = ih->ihl * 4;
4202 if (ihlen < sizeof(_iph))
4205 ad->u.net->v4info.saddr = ih->saddr;
4206 ad->u.net->v4info.daddr = ih->daddr;
4210 *proto = ih->protocol;
4212 switch (ih->protocol) {
4214 struct tcphdr _tcph, *th;
4216 if (ntohs(ih->frag_off) & IP_OFFSET)
4220 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4224 ad->u.net->sport = th->source;
4225 ad->u.net->dport = th->dest;
4230 struct udphdr _udph, *uh;
4232 if (ntohs(ih->frag_off) & IP_OFFSET)
4236 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4240 ad->u.net->sport = uh->source;
4241 ad->u.net->dport = uh->dest;
4245 case IPPROTO_DCCP: {
4246 struct dccp_hdr _dccph, *dh;
4248 if (ntohs(ih->frag_off) & IP_OFFSET)
4252 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4256 ad->u.net->sport = dh->dccph_sport;
4257 ad->u.net->dport = dh->dccph_dport;
4261 #if IS_ENABLED(CONFIG_IP_SCTP)
4262 case IPPROTO_SCTP: {
4263 struct sctphdr _sctph, *sh;
4265 if (ntohs(ih->frag_off) & IP_OFFSET)
4269 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4273 ad->u.net->sport = sh->source;
4274 ad->u.net->dport = sh->dest;
4285 #if IS_ENABLED(CONFIG_IPV6)
4287 /* Returns error only if unable to parse addresses */
4288 static int selinux_parse_skb_ipv6(struct sk_buff *skb,
4289 struct common_audit_data *ad, u8 *proto)
4292 int ret = -EINVAL, offset;
4293 struct ipv6hdr _ipv6h, *ip6;
4296 offset = skb_network_offset(skb);
4297 ip6 = skb_header_pointer(skb, offset, sizeof(_ipv6h), &_ipv6h);
4301 ad->u.net->v6info.saddr = ip6->saddr;
4302 ad->u.net->v6info.daddr = ip6->daddr;
4305 nexthdr = ip6->nexthdr;
4306 offset += sizeof(_ipv6h);
4307 offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off);
4316 struct tcphdr _tcph, *th;
4318 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4322 ad->u.net->sport = th->source;
4323 ad->u.net->dport = th->dest;
4328 struct udphdr _udph, *uh;
4330 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4334 ad->u.net->sport = uh->source;
4335 ad->u.net->dport = uh->dest;
4339 case IPPROTO_DCCP: {
4340 struct dccp_hdr _dccph, *dh;
4342 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4346 ad->u.net->sport = dh->dccph_sport;
4347 ad->u.net->dport = dh->dccph_dport;
4351 #if IS_ENABLED(CONFIG_IP_SCTP)
4352 case IPPROTO_SCTP: {
4353 struct sctphdr _sctph, *sh;
4355 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4359 ad->u.net->sport = sh->source;
4360 ad->u.net->dport = sh->dest;
4364 /* includes fragments */
4374 static int selinux_parse_skb(struct sk_buff *skb, struct common_audit_data *ad,
4375 char **_addrp, int src, u8 *proto)
4380 switch (ad->u.net->family) {
4382 ret = selinux_parse_skb_ipv4(skb, ad, proto);
4385 addrp = (char *)(src ? &ad->u.net->v4info.saddr :
4386 &ad->u.net->v4info.daddr);
4389 #if IS_ENABLED(CONFIG_IPV6)
4391 ret = selinux_parse_skb_ipv6(skb, ad, proto);
4394 addrp = (char *)(src ? &ad->u.net->v6info.saddr :
4395 &ad->u.net->v6info.daddr);
4405 "SELinux: failure in selinux_parse_skb(),"
4406 " unable to parse packet\n");
4416 * selinux_skb_peerlbl_sid - Determine the peer label of a packet
4418 * @family: protocol family
4419 * @sid: the packet's peer label SID
4422 * Check the various different forms of network peer labeling and determine
4423 * the peer label/SID for the packet; most of the magic actually occurs in
4424 * the security server function security_net_peersid_cmp(). The function
4425 * returns zero if the value in @sid is valid (although it may be SECSID_NULL)
4426 * or -EACCES if @sid is invalid due to inconsistencies with the different
4430 static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid)
4437 err = selinux_xfrm_skb_sid(skb, &xfrm_sid);
4440 err = selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid);
4444 err = security_net_peersid_resolve(nlbl_sid,
4445 nlbl_type, xfrm_sid, sid);
4446 if (unlikely(err)) {
4448 "SELinux: failure in selinux_skb_peerlbl_sid(),"
4449 " unable to determine packet's peer label\n");
4457 * selinux_conn_sid - Determine the child socket label for a connection
4458 * @sk_sid: the parent socket's SID
4459 * @skb_sid: the packet's SID
4460 * @conn_sid: the resulting connection SID
4462 * If @skb_sid is valid then the user:role:type information from @sk_sid is
4463 * combined with the MLS information from @skb_sid in order to create
4464 * @conn_sid. If @skb_sid is not valid then @conn_sid is simply a copy
4465 * of @sk_sid. Returns zero on success, negative values on failure.
4468 static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid)
4472 if (skb_sid != SECSID_NULL)
4473 err = security_sid_mls_copy(sk_sid, skb_sid,
4481 /* socket security operations */
4483 static int socket_sockcreate_sid(const struct task_security_struct *tsec,
4484 u16 secclass, u32 *socksid)
4486 if (tsec->sockcreate_sid > SECSID_NULL) {
4487 *socksid = tsec->sockcreate_sid;
4491 return security_transition_sid(tsec->sid, tsec->sid,
4492 secclass, NULL, socksid);
4495 static int sock_has_perm(struct sock *sk, u32 perms)
4497 struct sk_security_struct *sksec = sk->sk_security;
4498 struct common_audit_data ad;
4499 struct lsm_network_audit net = {0,};
4501 if (sksec->sid == SECINITSID_KERNEL)
4504 ad.type = LSM_AUDIT_DATA_NET;
4508 return avc_has_perm(current_sid(), sksec->sid, sksec->sclass, perms,
4512 static int selinux_socket_create(int family, int type,
4513 int protocol, int kern)
4515 const struct task_security_struct *tsec = selinux_cred(current_cred());
4523 secclass = socket_type_to_security_class(family, type, protocol);
4524 rc = socket_sockcreate_sid(tsec, secclass, &newsid);
4528 return avc_has_perm(tsec->sid, newsid, secclass, SOCKET__CREATE, NULL);
4531 static int selinux_socket_post_create(struct socket *sock, int family,
4532 int type, int protocol, int kern)
4534 const struct task_security_struct *tsec = selinux_cred(current_cred());
4535 struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(sock));
4536 struct sk_security_struct *sksec;
4537 u16 sclass = socket_type_to_security_class(family, type, protocol);
4538 u32 sid = SECINITSID_KERNEL;
4542 err = socket_sockcreate_sid(tsec, sclass, &sid);
4547 isec->sclass = sclass;
4549 isec->initialized = LABEL_INITIALIZED;
4552 sksec = sock->sk->sk_security;
4553 sksec->sclass = sclass;
4555 /* Allows detection of the first association on this socket */
4556 if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4557 sksec->sctp_assoc_state = SCTP_ASSOC_UNSET;
4559 err = selinux_netlbl_socket_post_create(sock->sk, family);
4565 static int selinux_socket_socketpair(struct socket *socka,
4566 struct socket *sockb)
4568 struct sk_security_struct *sksec_a = socka->sk->sk_security;
4569 struct sk_security_struct *sksec_b = sockb->sk->sk_security;
4571 sksec_a->peer_sid = sksec_b->sid;
4572 sksec_b->peer_sid = sksec_a->sid;
4577 /* Range of port numbers used to automatically bind.
4578 Need to determine whether we should perform a name_bind
4579 permission check between the socket and the port number. */
4581 static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)
4583 struct sock *sk = sock->sk;
4584 struct sk_security_struct *sksec = sk->sk_security;
4588 err = sock_has_perm(sk, SOCKET__BIND);
4592 /* If PF_INET or PF_INET6, check name_bind permission for the port. */
4593 family = sk->sk_family;
4594 if (family == PF_INET || family == PF_INET6) {
4596 struct common_audit_data ad;
4597 struct lsm_network_audit net = {0,};
4598 struct sockaddr_in *addr4 = NULL;
4599 struct sockaddr_in6 *addr6 = NULL;
4601 unsigned short snum;
4605 * sctp_bindx(3) calls via selinux_sctp_bind_connect()
4606 * that validates multiple binding addresses. Because of this
4607 * need to check address->sa_family as it is possible to have
4608 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4610 if (addrlen < offsetofend(struct sockaddr, sa_family))
4612 family_sa = address->sa_family;
4613 switch (family_sa) {
4616 if (addrlen < sizeof(struct sockaddr_in))
4618 addr4 = (struct sockaddr_in *)address;
4619 if (family_sa == AF_UNSPEC) {
4620 /* see __inet_bind(), we only want to allow
4621 * AF_UNSPEC if the address is INADDR_ANY
4623 if (addr4->sin_addr.s_addr != htonl(INADDR_ANY))
4625 family_sa = AF_INET;
4627 snum = ntohs(addr4->sin_port);
4628 addrp = (char *)&addr4->sin_addr.s_addr;
4631 if (addrlen < SIN6_LEN_RFC2133)
4633 addr6 = (struct sockaddr_in6 *)address;
4634 snum = ntohs(addr6->sin6_port);
4635 addrp = (char *)&addr6->sin6_addr.s6_addr;
4641 ad.type = LSM_AUDIT_DATA_NET;
4643 ad.u.net->sport = htons(snum);
4644 ad.u.net->family = family_sa;
4649 inet_get_local_port_range(sock_net(sk), &low, &high);
4651 if (inet_port_requires_bind_service(sock_net(sk), snum) ||
4652 snum < low || snum > high) {
4653 err = sel_netport_sid(sk->sk_protocol,
4657 err = avc_has_perm(sksec->sid, sid,
4659 SOCKET__NAME_BIND, &ad);
4665 switch (sksec->sclass) {
4666 case SECCLASS_TCP_SOCKET:
4667 node_perm = TCP_SOCKET__NODE_BIND;
4670 case SECCLASS_UDP_SOCKET:
4671 node_perm = UDP_SOCKET__NODE_BIND;
4674 case SECCLASS_DCCP_SOCKET:
4675 node_perm = DCCP_SOCKET__NODE_BIND;
4678 case SECCLASS_SCTP_SOCKET:
4679 node_perm = SCTP_SOCKET__NODE_BIND;
4683 node_perm = RAWIP_SOCKET__NODE_BIND;
4687 err = sel_netnode_sid(addrp, family_sa, &sid);
4691 if (family_sa == AF_INET)
4692 ad.u.net->v4info.saddr = addr4->sin_addr.s_addr;
4694 ad.u.net->v6info.saddr = addr6->sin6_addr;
4696 err = avc_has_perm(sksec->sid, sid,
4697 sksec->sclass, node_perm, &ad);
4704 /* Note that SCTP services expect -EINVAL, others -EAFNOSUPPORT. */
4705 if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4707 return -EAFNOSUPPORT;
4710 /* This supports connect(2) and SCTP connect services such as sctp_connectx(3)
4711 * and sctp_sendmsg(3) as described in Documentation/security/SCTP.rst
4713 static int selinux_socket_connect_helper(struct socket *sock,
4714 struct sockaddr *address, int addrlen)
4716 struct sock *sk = sock->sk;
4717 struct sk_security_struct *sksec = sk->sk_security;
4720 err = sock_has_perm(sk, SOCKET__CONNECT);
4723 if (addrlen < offsetofend(struct sockaddr, sa_family))
4726 /* connect(AF_UNSPEC) has special handling, as it is a documented
4727 * way to disconnect the socket
4729 if (address->sa_family == AF_UNSPEC)
4733 * If a TCP, DCCP or SCTP socket, check name_connect permission
4736 if (sksec->sclass == SECCLASS_TCP_SOCKET ||
4737 sksec->sclass == SECCLASS_DCCP_SOCKET ||
4738 sksec->sclass == SECCLASS_SCTP_SOCKET) {
4739 struct common_audit_data ad;
4740 struct lsm_network_audit net = {0,};
4741 struct sockaddr_in *addr4 = NULL;
4742 struct sockaddr_in6 *addr6 = NULL;
4743 unsigned short snum;
4746 /* sctp_connectx(3) calls via selinux_sctp_bind_connect()
4747 * that validates multiple connect addresses. Because of this
4748 * need to check address->sa_family as it is possible to have
4749 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4751 switch (address->sa_family) {
4753 addr4 = (struct sockaddr_in *)address;
4754 if (addrlen < sizeof(struct sockaddr_in))
4756 snum = ntohs(addr4->sin_port);
4759 addr6 = (struct sockaddr_in6 *)address;
4760 if (addrlen < SIN6_LEN_RFC2133)
4762 snum = ntohs(addr6->sin6_port);
4765 /* Note that SCTP services expect -EINVAL, whereas
4766 * others expect -EAFNOSUPPORT.
4768 if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4771 return -EAFNOSUPPORT;
4774 err = sel_netport_sid(sk->sk_protocol, snum, &sid);
4778 switch (sksec->sclass) {
4779 case SECCLASS_TCP_SOCKET:
4780 perm = TCP_SOCKET__NAME_CONNECT;
4782 case SECCLASS_DCCP_SOCKET:
4783 perm = DCCP_SOCKET__NAME_CONNECT;
4785 case SECCLASS_SCTP_SOCKET:
4786 perm = SCTP_SOCKET__NAME_CONNECT;
4790 ad.type = LSM_AUDIT_DATA_NET;
4792 ad.u.net->dport = htons(snum);
4793 ad.u.net->family = address->sa_family;
4794 err = avc_has_perm(sksec->sid, sid, sksec->sclass, perm, &ad);
4802 /* Supports connect(2), see comments in selinux_socket_connect_helper() */
4803 static int selinux_socket_connect(struct socket *sock,
4804 struct sockaddr *address, int addrlen)
4807 struct sock *sk = sock->sk;
4809 err = selinux_socket_connect_helper(sock, address, addrlen);
4813 return selinux_netlbl_socket_connect(sk, address);
4816 static int selinux_socket_listen(struct socket *sock, int backlog)
4818 return sock_has_perm(sock->sk, SOCKET__LISTEN);
4821 static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
4824 struct inode_security_struct *isec;
4825 struct inode_security_struct *newisec;
4829 err = sock_has_perm(sock->sk, SOCKET__ACCEPT);
4833 isec = inode_security_novalidate(SOCK_INODE(sock));
4834 spin_lock(&isec->lock);
4835 sclass = isec->sclass;
4837 spin_unlock(&isec->lock);
4839 newisec = inode_security_novalidate(SOCK_INODE(newsock));
4840 newisec->sclass = sclass;
4842 newisec->initialized = LABEL_INITIALIZED;
4847 static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg,
4850 return sock_has_perm(sock->sk, SOCKET__WRITE);
4853 static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg,
4854 int size, int flags)
4856 return sock_has_perm(sock->sk, SOCKET__READ);
4859 static int selinux_socket_getsockname(struct socket *sock)
4861 return sock_has_perm(sock->sk, SOCKET__GETATTR);
4864 static int selinux_socket_getpeername(struct socket *sock)
4866 return sock_has_perm(sock->sk, SOCKET__GETATTR);
4869 static int selinux_socket_setsockopt(struct socket *sock, int level, int optname)
4873 err = sock_has_perm(sock->sk, SOCKET__SETOPT);
4877 return selinux_netlbl_socket_setsockopt(sock, level, optname);
4880 static int selinux_socket_getsockopt(struct socket *sock, int level,
4883 return sock_has_perm(sock->sk, SOCKET__GETOPT);
4886 static int selinux_socket_shutdown(struct socket *sock, int how)
4888 return sock_has_perm(sock->sk, SOCKET__SHUTDOWN);
4891 static int selinux_socket_unix_stream_connect(struct sock *sock,
4895 struct sk_security_struct *sksec_sock = sock->sk_security;
4896 struct sk_security_struct *sksec_other = other->sk_security;
4897 struct sk_security_struct *sksec_new = newsk->sk_security;
4898 struct common_audit_data ad;
4899 struct lsm_network_audit net = {0,};
4902 ad.type = LSM_AUDIT_DATA_NET;
4904 ad.u.net->sk = other;
4906 err = avc_has_perm(sksec_sock->sid, sksec_other->sid,
4907 sksec_other->sclass,
4908 UNIX_STREAM_SOCKET__CONNECTTO, &ad);
4912 /* server child socket */
4913 sksec_new->peer_sid = sksec_sock->sid;
4914 err = security_sid_mls_copy(sksec_other->sid,
4915 sksec_sock->sid, &sksec_new->sid);
4919 /* connecting socket */
4920 sksec_sock->peer_sid = sksec_new->sid;
4925 static int selinux_socket_unix_may_send(struct socket *sock,
4926 struct socket *other)
4928 struct sk_security_struct *ssec = sock->sk->sk_security;
4929 struct sk_security_struct *osec = other->sk->sk_security;
4930 struct common_audit_data ad;
4931 struct lsm_network_audit net = {0,};
4933 ad.type = LSM_AUDIT_DATA_NET;
4935 ad.u.net->sk = other->sk;
4937 return avc_has_perm(ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO,
4941 static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex,
4942 char *addrp, u16 family, u32 peer_sid,
4943 struct common_audit_data *ad)
4949 err = sel_netif_sid(ns, ifindex, &if_sid);
4952 err = avc_has_perm(peer_sid, if_sid,
4953 SECCLASS_NETIF, NETIF__INGRESS, ad);
4957 err = sel_netnode_sid(addrp, family, &node_sid);
4960 return avc_has_perm(peer_sid, node_sid,
4961 SECCLASS_NODE, NODE__RECVFROM, ad);
4964 static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb,
4968 struct sk_security_struct *sksec = sk->sk_security;
4969 u32 sk_sid = sksec->sid;
4970 struct common_audit_data ad;
4971 struct lsm_network_audit net = {0,};
4974 ad.type = LSM_AUDIT_DATA_NET;
4976 ad.u.net->netif = skb->skb_iif;
4977 ad.u.net->family = family;
4978 err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
4982 if (selinux_secmark_enabled()) {
4983 err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET,
4989 err = selinux_netlbl_sock_rcv_skb(sksec, skb, family, &ad);
4992 err = selinux_xfrm_sock_rcv_skb(sksec->sid, skb, &ad);
4997 static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
5000 struct sk_security_struct *sksec = sk->sk_security;
5001 u16 family = sk->sk_family;
5002 u32 sk_sid = sksec->sid;
5003 struct common_audit_data ad;
5004 struct lsm_network_audit net = {0,};
5009 if (family != PF_INET && family != PF_INET6)
5012 /* Handle mapped IPv4 packets arriving via IPv6 sockets */
5013 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5016 /* If any sort of compatibility mode is enabled then handoff processing
5017 * to the selinux_sock_rcv_skb_compat() function to deal with the
5018 * special handling. We do this in an attempt to keep this function
5019 * as fast and as clean as possible. */
5020 if (!selinux_policycap_netpeer())
5021 return selinux_sock_rcv_skb_compat(sk, skb, family);
5023 secmark_active = selinux_secmark_enabled();
5024 peerlbl_active = selinux_peerlbl_enabled();
5025 if (!secmark_active && !peerlbl_active)
5028 ad.type = LSM_AUDIT_DATA_NET;
5030 ad.u.net->netif = skb->skb_iif;
5031 ad.u.net->family = family;
5032 err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
5036 if (peerlbl_active) {
5039 err = selinux_skb_peerlbl_sid(skb, family, &peer_sid);
5042 err = selinux_inet_sys_rcv_skb(sock_net(sk), skb->skb_iif,
5043 addrp, family, peer_sid, &ad);
5045 selinux_netlbl_err(skb, family, err, 0);
5048 err = avc_has_perm(sk_sid, peer_sid, SECCLASS_PEER,
5051 selinux_netlbl_err(skb, family, err, 0);
5056 if (secmark_active) {
5057 err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET,
5066 static int selinux_socket_getpeersec_stream(struct socket *sock,
5067 sockptr_t optval, sockptr_t optlen,
5071 char *scontext = NULL;
5073 struct sk_security_struct *sksec = sock->sk->sk_security;
5074 u32 peer_sid = SECSID_NULL;
5076 if (sksec->sclass == SECCLASS_UNIX_STREAM_SOCKET ||
5077 sksec->sclass == SECCLASS_TCP_SOCKET ||
5078 sksec->sclass == SECCLASS_SCTP_SOCKET)
5079 peer_sid = sksec->peer_sid;
5080 if (peer_sid == SECSID_NULL)
5081 return -ENOPROTOOPT;
5083 err = security_sid_to_context(peer_sid, &scontext,
5087 if (scontext_len > len) {
5092 if (copy_to_sockptr(optval, scontext, scontext_len))
5095 if (copy_to_sockptr(optlen, &scontext_len, sizeof(scontext_len)))
5101 static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid)
5103 u32 peer_secid = SECSID_NULL;
5105 struct inode_security_struct *isec;
5107 if (skb && skb->protocol == htons(ETH_P_IP))
5109 else if (skb && skb->protocol == htons(ETH_P_IPV6))
5112 family = sock->sk->sk_family;
5116 if (sock && family == PF_UNIX) {
5117 isec = inode_security_novalidate(SOCK_INODE(sock));
5118 peer_secid = isec->sid;
5120 selinux_skb_peerlbl_sid(skb, family, &peer_secid);
5123 *secid = peer_secid;
5124 if (peer_secid == SECSID_NULL)
5129 static int selinux_sk_alloc_security(struct sock *sk, int family, gfp_t priority)
5131 struct sk_security_struct *sksec;
5133 sksec = kzalloc(sizeof(*sksec), priority);
5137 sksec->peer_sid = SECINITSID_UNLABELED;
5138 sksec->sid = SECINITSID_UNLABELED;
5139 sksec->sclass = SECCLASS_SOCKET;
5140 selinux_netlbl_sk_security_reset(sksec);
5141 sk->sk_security = sksec;
5146 static void selinux_sk_free_security(struct sock *sk)
5148 struct sk_security_struct *sksec = sk->sk_security;
5150 sk->sk_security = NULL;
5151 selinux_netlbl_sk_security_free(sksec);
5155 static void selinux_sk_clone_security(const struct sock *sk, struct sock *newsk)
5157 struct sk_security_struct *sksec = sk->sk_security;
5158 struct sk_security_struct *newsksec = newsk->sk_security;
5160 newsksec->sid = sksec->sid;
5161 newsksec->peer_sid = sksec->peer_sid;
5162 newsksec->sclass = sksec->sclass;
5164 selinux_netlbl_sk_security_reset(newsksec);
5167 static void selinux_sk_getsecid(struct sock *sk, u32 *secid)
5170 *secid = SECINITSID_ANY_SOCKET;
5172 struct sk_security_struct *sksec = sk->sk_security;
5174 *secid = sksec->sid;
5178 static void selinux_sock_graft(struct sock *sk, struct socket *parent)
5180 struct inode_security_struct *isec =
5181 inode_security_novalidate(SOCK_INODE(parent));
5182 struct sk_security_struct *sksec = sk->sk_security;
5184 if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 ||
5185 sk->sk_family == PF_UNIX)
5186 isec->sid = sksec->sid;
5187 sksec->sclass = isec->sclass;
5191 * Determines peer_secid for the asoc and updates socket's peer label
5192 * if it's the first association on the socket.
5194 static int selinux_sctp_process_new_assoc(struct sctp_association *asoc,
5195 struct sk_buff *skb)
5197 struct sock *sk = asoc->base.sk;
5198 u16 family = sk->sk_family;
5199 struct sk_security_struct *sksec = sk->sk_security;
5200 struct common_audit_data ad;
5201 struct lsm_network_audit net = {0,};
5204 /* handle mapped IPv4 packets arriving via IPv6 sockets */
5205 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5208 if (selinux_peerlbl_enabled()) {
5209 asoc->peer_secid = SECSID_NULL;
5211 /* This will return peer_sid = SECSID_NULL if there are
5212 * no peer labels, see security_net_peersid_resolve().
5214 err = selinux_skb_peerlbl_sid(skb, family, &asoc->peer_secid);
5218 if (asoc->peer_secid == SECSID_NULL)
5219 asoc->peer_secid = SECINITSID_UNLABELED;
5221 asoc->peer_secid = SECINITSID_UNLABELED;
5224 if (sksec->sctp_assoc_state == SCTP_ASSOC_UNSET) {
5225 sksec->sctp_assoc_state = SCTP_ASSOC_SET;
5227 /* Here as first association on socket. As the peer SID
5228 * was allowed by peer recv (and the netif/node checks),
5229 * then it is approved by policy and used as the primary
5230 * peer SID for getpeercon(3).
5232 sksec->peer_sid = asoc->peer_secid;
5233 } else if (sksec->peer_sid != asoc->peer_secid) {
5234 /* Other association peer SIDs are checked to enforce
5235 * consistency among the peer SIDs.
5237 ad.type = LSM_AUDIT_DATA_NET;
5239 ad.u.net->sk = asoc->base.sk;
5240 err = avc_has_perm(sksec->peer_sid, asoc->peer_secid,
5241 sksec->sclass, SCTP_SOCKET__ASSOCIATION,
5249 /* Called whenever SCTP receives an INIT or COOKIE ECHO chunk. This
5250 * happens on an incoming connect(2), sctp_connectx(3) or
5251 * sctp_sendmsg(3) (with no association already present).
5253 static int selinux_sctp_assoc_request(struct sctp_association *asoc,
5254 struct sk_buff *skb)
5256 struct sk_security_struct *sksec = asoc->base.sk->sk_security;
5260 if (!selinux_policycap_extsockclass())
5263 err = selinux_sctp_process_new_assoc(asoc, skb);
5267 /* Compute the MLS component for the connection and store
5268 * the information in asoc. This will be used by SCTP TCP type
5269 * sockets and peeled off connections as they cause a new
5270 * socket to be generated. selinux_sctp_sk_clone() will then
5271 * plug this into the new socket.
5273 err = selinux_conn_sid(sksec->sid, asoc->peer_secid, &conn_sid);
5277 asoc->secid = conn_sid;
5279 /* Set any NetLabel labels including CIPSO/CALIPSO options. */
5280 return selinux_netlbl_sctp_assoc_request(asoc, skb);
5283 /* Called when SCTP receives a COOKIE ACK chunk as the final
5284 * response to an association request (initited by us).
5286 static int selinux_sctp_assoc_established(struct sctp_association *asoc,
5287 struct sk_buff *skb)
5289 struct sk_security_struct *sksec = asoc->base.sk->sk_security;
5291 if (!selinux_policycap_extsockclass())
5294 /* Inherit secid from the parent socket - this will be picked up
5295 * by selinux_sctp_sk_clone() if the association gets peeled off
5296 * into a new socket.
5298 asoc->secid = sksec->sid;
5300 return selinux_sctp_process_new_assoc(asoc, skb);
5303 /* Check if sctp IPv4/IPv6 addresses are valid for binding or connecting
5304 * based on their @optname.
5306 static int selinux_sctp_bind_connect(struct sock *sk, int optname,
5307 struct sockaddr *address,
5310 int len, err = 0, walk_size = 0;
5312 struct sockaddr *addr;
5313 struct socket *sock;
5315 if (!selinux_policycap_extsockclass())
5318 /* Process one or more addresses that may be IPv4 or IPv6 */
5319 sock = sk->sk_socket;
5322 while (walk_size < addrlen) {
5323 if (walk_size + sizeof(sa_family_t) > addrlen)
5327 switch (addr->sa_family) {
5330 len = sizeof(struct sockaddr_in);
5333 len = sizeof(struct sockaddr_in6);
5339 if (walk_size + len > addrlen)
5345 case SCTP_PRIMARY_ADDR:
5346 case SCTP_SET_PEER_PRIMARY_ADDR:
5347 case SCTP_SOCKOPT_BINDX_ADD:
5348 err = selinux_socket_bind(sock, addr, len);
5350 /* Connect checks */
5351 case SCTP_SOCKOPT_CONNECTX:
5352 case SCTP_PARAM_SET_PRIMARY:
5353 case SCTP_PARAM_ADD_IP:
5354 case SCTP_SENDMSG_CONNECT:
5355 err = selinux_socket_connect_helper(sock, addr, len);
5359 /* As selinux_sctp_bind_connect() is called by the
5360 * SCTP protocol layer, the socket is already locked,
5361 * therefore selinux_netlbl_socket_connect_locked()
5362 * is called here. The situations handled are:
5363 * sctp_connectx(3), sctp_sendmsg(3), sendmsg(2),
5364 * whenever a new IP address is added or when a new
5365 * primary address is selected.
5366 * Note that an SCTP connect(2) call happens before
5367 * the SCTP protocol layer and is handled via
5368 * selinux_socket_connect().
5370 err = selinux_netlbl_socket_connect_locked(sk, addr);
5384 /* Called whenever a new socket is created by accept(2) or sctp_peeloff(3). */
5385 static void selinux_sctp_sk_clone(struct sctp_association *asoc, struct sock *sk,
5388 struct sk_security_struct *sksec = sk->sk_security;
5389 struct sk_security_struct *newsksec = newsk->sk_security;
5391 /* If policy does not support SECCLASS_SCTP_SOCKET then call
5392 * the non-sctp clone version.
5394 if (!selinux_policycap_extsockclass())
5395 return selinux_sk_clone_security(sk, newsk);
5397 newsksec->sid = asoc->secid;
5398 newsksec->peer_sid = asoc->peer_secid;
5399 newsksec->sclass = sksec->sclass;
5400 selinux_netlbl_sctp_sk_clone(sk, newsk);
5403 static int selinux_mptcp_add_subflow(struct sock *sk, struct sock *ssk)
5405 struct sk_security_struct *ssksec = ssk->sk_security;
5406 struct sk_security_struct *sksec = sk->sk_security;
5408 ssksec->sclass = sksec->sclass;
5409 ssksec->sid = sksec->sid;
5411 /* replace the existing subflow label deleting the existing one
5412 * and re-recreating a new label using the updated context
5414 selinux_netlbl_sk_security_free(ssksec);
5415 return selinux_netlbl_socket_post_create(ssk, ssk->sk_family);
5418 static int selinux_inet_conn_request(const struct sock *sk, struct sk_buff *skb,
5419 struct request_sock *req)
5421 struct sk_security_struct *sksec = sk->sk_security;
5423 u16 family = req->rsk_ops->family;
5427 err = selinux_skb_peerlbl_sid(skb, family, &peersid);
5430 err = selinux_conn_sid(sksec->sid, peersid, &connsid);
5433 req->secid = connsid;
5434 req->peer_secid = peersid;
5436 return selinux_netlbl_inet_conn_request(req, family);
5439 static void selinux_inet_csk_clone(struct sock *newsk,
5440 const struct request_sock *req)
5442 struct sk_security_struct *newsksec = newsk->sk_security;
5444 newsksec->sid = req->secid;
5445 newsksec->peer_sid = req->peer_secid;
5446 /* NOTE: Ideally, we should also get the isec->sid for the
5447 new socket in sync, but we don't have the isec available yet.
5448 So we will wait until sock_graft to do it, by which
5449 time it will have been created and available. */
5451 /* We don't need to take any sort of lock here as we are the only
5452 * thread with access to newsksec */
5453 selinux_netlbl_inet_csk_clone(newsk, req->rsk_ops->family);
5456 static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb)
5458 u16 family = sk->sk_family;
5459 struct sk_security_struct *sksec = sk->sk_security;
5461 /* handle mapped IPv4 packets arriving via IPv6 sockets */
5462 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5465 selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid);
5468 static int selinux_secmark_relabel_packet(u32 sid)
5470 const struct task_security_struct *__tsec;
5473 __tsec = selinux_cred(current_cred());
5476 return avc_has_perm(tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO,
5480 static void selinux_secmark_refcount_inc(void)
5482 atomic_inc(&selinux_secmark_refcount);
5485 static void selinux_secmark_refcount_dec(void)
5487 atomic_dec(&selinux_secmark_refcount);
5490 static void selinux_req_classify_flow(const struct request_sock *req,
5491 struct flowi_common *flic)
5493 flic->flowic_secid = req->secid;
5496 static int selinux_tun_dev_alloc_security(void **security)
5498 struct tun_security_struct *tunsec;
5500 tunsec = kzalloc(sizeof(*tunsec), GFP_KERNEL);
5503 tunsec->sid = current_sid();
5509 static void selinux_tun_dev_free_security(void *security)
5514 static int selinux_tun_dev_create(void)
5516 u32 sid = current_sid();
5518 /* we aren't taking into account the "sockcreate" SID since the socket
5519 * that is being created here is not a socket in the traditional sense,
5520 * instead it is a private sock, accessible only to the kernel, and
5521 * representing a wide range of network traffic spanning multiple
5522 * connections unlike traditional sockets - check the TUN driver to
5523 * get a better understanding of why this socket is special */
5525 return avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE,
5529 static int selinux_tun_dev_attach_queue(void *security)
5531 struct tun_security_struct *tunsec = security;
5533 return avc_has_perm(current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET,
5534 TUN_SOCKET__ATTACH_QUEUE, NULL);
5537 static int selinux_tun_dev_attach(struct sock *sk, void *security)
5539 struct tun_security_struct *tunsec = security;
5540 struct sk_security_struct *sksec = sk->sk_security;
5542 /* we don't currently perform any NetLabel based labeling here and it
5543 * isn't clear that we would want to do so anyway; while we could apply
5544 * labeling without the support of the TUN user the resulting labeled
5545 * traffic from the other end of the connection would almost certainly
5546 * cause confusion to the TUN user that had no idea network labeling
5547 * protocols were being used */
5549 sksec->sid = tunsec->sid;
5550 sksec->sclass = SECCLASS_TUN_SOCKET;
5555 static int selinux_tun_dev_open(void *security)
5557 struct tun_security_struct *tunsec = security;
5558 u32 sid = current_sid();
5561 err = avc_has_perm(sid, tunsec->sid, SECCLASS_TUN_SOCKET,
5562 TUN_SOCKET__RELABELFROM, NULL);
5565 err = avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET,
5566 TUN_SOCKET__RELABELTO, NULL);
5574 #ifdef CONFIG_NETFILTER
5576 static unsigned int selinux_ip_forward(void *priv, struct sk_buff *skb,
5577 const struct nf_hook_state *state)
5583 struct common_audit_data ad;
5584 struct lsm_network_audit net = {0,};
5585 int secmark_active, peerlbl_active;
5587 if (!selinux_policycap_netpeer())
5590 secmark_active = selinux_secmark_enabled();
5591 peerlbl_active = selinux_peerlbl_enabled();
5592 if (!secmark_active && !peerlbl_active)
5596 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid) != 0)
5599 ifindex = state->in->ifindex;
5600 ad.type = LSM_AUDIT_DATA_NET;
5602 ad.u.net->netif = ifindex;
5603 ad.u.net->family = family;
5604 if (selinux_parse_skb(skb, &ad, &addrp, 1, NULL) != 0)
5607 if (peerlbl_active) {
5610 err = selinux_inet_sys_rcv_skb(state->net, ifindex,
5611 addrp, family, peer_sid, &ad);
5613 selinux_netlbl_err(skb, family, err, 1);
5619 if (avc_has_perm(peer_sid, skb->secmark,
5620 SECCLASS_PACKET, PACKET__FORWARD_IN, &ad))
5623 if (netlbl_enabled())
5624 /* we do this in the FORWARD path and not the POST_ROUTING
5625 * path because we want to make sure we apply the necessary
5626 * labeling before IPsec is applied so we can leverage AH
5628 if (selinux_netlbl_skbuff_setsid(skb, family, peer_sid) != 0)
5634 static unsigned int selinux_ip_output(void *priv, struct sk_buff *skb,
5635 const struct nf_hook_state *state)
5640 if (!netlbl_enabled())
5643 /* we do this in the LOCAL_OUT path and not the POST_ROUTING path
5644 * because we want to make sure we apply the necessary labeling
5645 * before IPsec is applied so we can leverage AH protection */
5648 struct sk_security_struct *sksec;
5650 if (sk_listener(sk))
5651 /* if the socket is the listening state then this
5652 * packet is a SYN-ACK packet which means it needs to
5653 * be labeled based on the connection/request_sock and
5654 * not the parent socket. unfortunately, we can't
5655 * lookup the request_sock yet as it isn't queued on
5656 * the parent socket until after the SYN-ACK is sent.
5657 * the "solution" is to simply pass the packet as-is
5658 * as any IP option based labeling should be copied
5659 * from the initial connection request (in the IP
5660 * layer). it is far from ideal, but until we get a
5661 * security label in the packet itself this is the
5662 * best we can do. */
5665 /* standard practice, label using the parent socket */
5666 sksec = sk->sk_security;
5669 sid = SECINITSID_KERNEL;
5670 if (selinux_netlbl_skbuff_setsid(skb, state->pf, sid) != 0)
5677 static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
5678 const struct nf_hook_state *state)
5681 struct sk_security_struct *sksec;
5682 struct common_audit_data ad;
5683 struct lsm_network_audit net = {0,};
5686 sk = skb_to_full_sk(skb);
5689 sksec = sk->sk_security;
5691 ad.type = LSM_AUDIT_DATA_NET;
5693 ad.u.net->netif = state->out->ifindex;
5694 ad.u.net->family = state->pf;
5695 if (selinux_parse_skb(skb, &ad, NULL, 0, &proto))
5698 if (selinux_secmark_enabled())
5699 if (avc_has_perm(sksec->sid, skb->secmark,
5700 SECCLASS_PACKET, PACKET__SEND, &ad))
5701 return NF_DROP_ERR(-ECONNREFUSED);
5703 if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
5704 return NF_DROP_ERR(-ECONNREFUSED);
5709 static unsigned int selinux_ip_postroute(void *priv,
5710 struct sk_buff *skb,
5711 const struct nf_hook_state *state)
5718 struct common_audit_data ad;
5719 struct lsm_network_audit net = {0,};
5721 int secmark_active, peerlbl_active;
5723 /* If any sort of compatibility mode is enabled then handoff processing
5724 * to the selinux_ip_postroute_compat() function to deal with the
5725 * special handling. We do this in an attempt to keep this function
5726 * as fast and as clean as possible. */
5727 if (!selinux_policycap_netpeer())
5728 return selinux_ip_postroute_compat(skb, state);
5730 secmark_active = selinux_secmark_enabled();
5731 peerlbl_active = selinux_peerlbl_enabled();
5732 if (!secmark_active && !peerlbl_active)
5735 sk = skb_to_full_sk(skb);
5738 /* If skb->dst->xfrm is non-NULL then the packet is undergoing an IPsec
5739 * packet transformation so allow the packet to pass without any checks
5740 * since we'll have another chance to perform access control checks
5741 * when the packet is on it's final way out.
5742 * NOTE: there appear to be some IPv6 multicast cases where skb->dst
5743 * is NULL, in this case go ahead and apply access control.
5744 * NOTE: if this is a local socket (skb->sk != NULL) that is in the
5745 * TCP listening state we cannot wait until the XFRM processing
5746 * is done as we will miss out on the SA label if we do;
5747 * unfortunately, this means more work, but it is only once per
5749 if (skb_dst(skb) != NULL && skb_dst(skb)->xfrm != NULL &&
5750 !(sk && sk_listener(sk)))
5756 /* Without an associated socket the packet is either coming
5757 * from the kernel or it is being forwarded; check the packet
5758 * to determine which and if the packet is being forwarded
5759 * query the packet directly to determine the security label. */
5761 secmark_perm = PACKET__FORWARD_OUT;
5762 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid))
5765 secmark_perm = PACKET__SEND;
5766 peer_sid = SECINITSID_KERNEL;
5768 } else if (sk_listener(sk)) {
5769 /* Locally generated packet but the associated socket is in the
5770 * listening state which means this is a SYN-ACK packet. In
5771 * this particular case the correct security label is assigned
5772 * to the connection/request_sock but unfortunately we can't
5773 * query the request_sock as it isn't queued on the parent
5774 * socket until after the SYN-ACK packet is sent; the only
5775 * viable choice is to regenerate the label like we do in
5776 * selinux_inet_conn_request(). See also selinux_ip_output()
5777 * for similar problems. */
5779 struct sk_security_struct *sksec;
5781 sksec = sk->sk_security;
5782 if (selinux_skb_peerlbl_sid(skb, family, &skb_sid))
5784 /* At this point, if the returned skb peerlbl is SECSID_NULL
5785 * and the packet has been through at least one XFRM
5786 * transformation then we must be dealing with the "final"
5787 * form of labeled IPsec packet; since we've already applied
5788 * all of our access controls on this packet we can safely
5789 * pass the packet. */
5790 if (skb_sid == SECSID_NULL) {
5793 if (IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED)
5797 if (IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED)
5801 return NF_DROP_ERR(-ECONNREFUSED);
5804 if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid))
5806 secmark_perm = PACKET__SEND;
5808 /* Locally generated packet, fetch the security label from the
5809 * associated socket. */
5810 struct sk_security_struct *sksec = sk->sk_security;
5811 peer_sid = sksec->sid;
5812 secmark_perm = PACKET__SEND;
5815 ifindex = state->out->ifindex;
5816 ad.type = LSM_AUDIT_DATA_NET;
5818 ad.u.net->netif = ifindex;
5819 ad.u.net->family = family;
5820 if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL))
5824 if (avc_has_perm(peer_sid, skb->secmark,
5825 SECCLASS_PACKET, secmark_perm, &ad))
5826 return NF_DROP_ERR(-ECONNREFUSED);
5828 if (peerlbl_active) {
5832 if (sel_netif_sid(state->net, ifindex, &if_sid))
5834 if (avc_has_perm(peer_sid, if_sid,
5835 SECCLASS_NETIF, NETIF__EGRESS, &ad))
5836 return NF_DROP_ERR(-ECONNREFUSED);
5838 if (sel_netnode_sid(addrp, family, &node_sid))
5840 if (avc_has_perm(peer_sid, node_sid,
5841 SECCLASS_NODE, NODE__SENDTO, &ad))
5842 return NF_DROP_ERR(-ECONNREFUSED);
5847 #endif /* CONFIG_NETFILTER */
5849 static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb)
5852 unsigned int msg_len;
5853 unsigned int data_len = skb->len;
5854 unsigned char *data = skb->data;
5855 struct nlmsghdr *nlh;
5856 struct sk_security_struct *sksec = sk->sk_security;
5857 u16 sclass = sksec->sclass;
5860 while (data_len >= nlmsg_total_size(0)) {
5861 nlh = (struct nlmsghdr *)data;
5863 /* NOTE: the nlmsg_len field isn't reliably set by some netlink
5864 * users which means we can't reject skb's with bogus
5865 * length fields; our solution is to follow what
5866 * netlink_rcv_skb() does and simply skip processing at
5867 * messages with length fields that are clearly junk
5869 if (nlh->nlmsg_len < NLMSG_HDRLEN || nlh->nlmsg_len > data_len)
5872 rc = selinux_nlmsg_lookup(sclass, nlh->nlmsg_type, &perm);
5874 rc = sock_has_perm(sk, perm);
5877 } else if (rc == -EINVAL) {
5878 /* -EINVAL is a missing msg/perm mapping */
5879 pr_warn_ratelimited("SELinux: unrecognized netlink"
5880 " message: protocol=%hu nlmsg_type=%hu sclass=%s"
5881 " pid=%d comm=%s\n",
5882 sk->sk_protocol, nlh->nlmsg_type,
5883 secclass_map[sclass - 1].name,
5884 task_pid_nr(current), current->comm);
5885 if (enforcing_enabled() &&
5886 !security_get_allow_unknown())
5889 } else if (rc == -ENOENT) {
5890 /* -ENOENT is a missing socket/class mapping, ignore */
5896 /* move to the next message after applying netlink padding */
5897 msg_len = NLMSG_ALIGN(nlh->nlmsg_len);
5898 if (msg_len >= data_len)
5900 data_len -= msg_len;
5907 static void ipc_init_security(struct ipc_security_struct *isec, u16 sclass)
5909 isec->sclass = sclass;
5910 isec->sid = current_sid();
5913 static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,
5916 struct ipc_security_struct *isec;
5917 struct common_audit_data ad;
5918 u32 sid = current_sid();
5920 isec = selinux_ipc(ipc_perms);
5922 ad.type = LSM_AUDIT_DATA_IPC;
5923 ad.u.ipc_id = ipc_perms->key;
5925 return avc_has_perm(sid, isec->sid, isec->sclass, perms, &ad);
5928 static int selinux_msg_msg_alloc_security(struct msg_msg *msg)
5930 struct msg_security_struct *msec;
5932 msec = selinux_msg_msg(msg);
5933 msec->sid = SECINITSID_UNLABELED;
5938 /* message queue security operations */
5939 static int selinux_msg_queue_alloc_security(struct kern_ipc_perm *msq)
5941 struct ipc_security_struct *isec;
5942 struct common_audit_data ad;
5943 u32 sid = current_sid();
5945 isec = selinux_ipc(msq);
5946 ipc_init_security(isec, SECCLASS_MSGQ);
5948 ad.type = LSM_AUDIT_DATA_IPC;
5949 ad.u.ipc_id = msq->key;
5951 return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,
5955 static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)
5957 struct ipc_security_struct *isec;
5958 struct common_audit_data ad;
5959 u32 sid = current_sid();
5961 isec = selinux_ipc(msq);
5963 ad.type = LSM_AUDIT_DATA_IPC;
5964 ad.u.ipc_id = msq->key;
5966 return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,
5967 MSGQ__ASSOCIATE, &ad);
5970 static int selinux_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)
5978 /* No specific object, just general system-wide information. */
5979 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
5980 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
5984 perms = MSGQ__GETATTR | MSGQ__ASSOCIATE;
5987 perms = MSGQ__SETATTR;
5990 perms = MSGQ__DESTROY;
5996 err = ipc_has_perm(msq, perms);
6000 static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)
6002 struct ipc_security_struct *isec;
6003 struct msg_security_struct *msec;
6004 struct common_audit_data ad;
6005 u32 sid = current_sid();
6008 isec = selinux_ipc(msq);
6009 msec = selinux_msg_msg(msg);
6012 * First time through, need to assign label to the message
6014 if (msec->sid == SECINITSID_UNLABELED) {
6016 * Compute new sid based on current process and
6017 * message queue this message will be stored in
6019 rc = security_transition_sid(sid, isec->sid,
6020 SECCLASS_MSG, NULL, &msec->sid);
6025 ad.type = LSM_AUDIT_DATA_IPC;
6026 ad.u.ipc_id = msq->key;
6028 /* Can this process write to the queue? */
6029 rc = avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,
6032 /* Can this process send the message */
6033 rc = avc_has_perm(sid, msec->sid, SECCLASS_MSG,
6036 /* Can the message be put in the queue? */
6037 rc = avc_has_perm(msec->sid, isec->sid, SECCLASS_MSGQ,
6038 MSGQ__ENQUEUE, &ad);
6043 static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg,
6044 struct task_struct *target,
6045 long type, int mode)
6047 struct ipc_security_struct *isec;
6048 struct msg_security_struct *msec;
6049 struct common_audit_data ad;
6050 u32 sid = task_sid_obj(target);
6053 isec = selinux_ipc(msq);
6054 msec = selinux_msg_msg(msg);
6056 ad.type = LSM_AUDIT_DATA_IPC;
6057 ad.u.ipc_id = msq->key;
6059 rc = avc_has_perm(sid, isec->sid,
6060 SECCLASS_MSGQ, MSGQ__READ, &ad);
6062 rc = avc_has_perm(sid, msec->sid,
6063 SECCLASS_MSG, MSG__RECEIVE, &ad);
6067 /* Shared Memory security operations */
6068 static int selinux_shm_alloc_security(struct kern_ipc_perm *shp)
6070 struct ipc_security_struct *isec;
6071 struct common_audit_data ad;
6072 u32 sid = current_sid();
6074 isec = selinux_ipc(shp);
6075 ipc_init_security(isec, SECCLASS_SHM);
6077 ad.type = LSM_AUDIT_DATA_IPC;
6078 ad.u.ipc_id = shp->key;
6080 return avc_has_perm(sid, isec->sid, SECCLASS_SHM,
6084 static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg)
6086 struct ipc_security_struct *isec;
6087 struct common_audit_data ad;
6088 u32 sid = current_sid();
6090 isec = selinux_ipc(shp);
6092 ad.type = LSM_AUDIT_DATA_IPC;
6093 ad.u.ipc_id = shp->key;
6095 return avc_has_perm(sid, isec->sid, SECCLASS_SHM,
6096 SHM__ASSOCIATE, &ad);
6099 /* Note, at this point, shp is locked down */
6100 static int selinux_shm_shmctl(struct kern_ipc_perm *shp, int cmd)
6108 /* No specific object, just general system-wide information. */
6109 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
6110 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6114 perms = SHM__GETATTR | SHM__ASSOCIATE;
6117 perms = SHM__SETATTR;
6124 perms = SHM__DESTROY;
6130 err = ipc_has_perm(shp, perms);
6134 static int selinux_shm_shmat(struct kern_ipc_perm *shp,
6135 char __user *shmaddr, int shmflg)
6139 if (shmflg & SHM_RDONLY)
6142 perms = SHM__READ | SHM__WRITE;
6144 return ipc_has_perm(shp, perms);
6147 /* Semaphore security operations */
6148 static int selinux_sem_alloc_security(struct kern_ipc_perm *sma)
6150 struct ipc_security_struct *isec;
6151 struct common_audit_data ad;
6152 u32 sid = current_sid();
6154 isec = selinux_ipc(sma);
6155 ipc_init_security(isec, SECCLASS_SEM);
6157 ad.type = LSM_AUDIT_DATA_IPC;
6158 ad.u.ipc_id = sma->key;
6160 return avc_has_perm(sid, isec->sid, SECCLASS_SEM,
6164 static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg)
6166 struct ipc_security_struct *isec;
6167 struct common_audit_data ad;
6168 u32 sid = current_sid();
6170 isec = selinux_ipc(sma);
6172 ad.type = LSM_AUDIT_DATA_IPC;
6173 ad.u.ipc_id = sma->key;
6175 return avc_has_perm(sid, isec->sid, SECCLASS_SEM,
6176 SEM__ASSOCIATE, &ad);
6179 /* Note, at this point, sma is locked down */
6180 static int selinux_sem_semctl(struct kern_ipc_perm *sma, int cmd)
6188 /* No specific object, just general system-wide information. */
6189 return avc_has_perm(current_sid(), SECINITSID_KERNEL,
6190 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6194 perms = SEM__GETATTR;
6205 perms = SEM__DESTROY;
6208 perms = SEM__SETATTR;
6213 perms = SEM__GETATTR | SEM__ASSOCIATE;
6219 err = ipc_has_perm(sma, perms);
6223 static int selinux_sem_semop(struct kern_ipc_perm *sma,
6224 struct sembuf *sops, unsigned nsops, int alter)
6229 perms = SEM__READ | SEM__WRITE;
6233 return ipc_has_perm(sma, perms);
6236 static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
6242 av |= IPC__UNIX_READ;
6244 av |= IPC__UNIX_WRITE;
6249 return ipc_has_perm(ipcp, av);
6252 static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid)
6254 struct ipc_security_struct *isec = selinux_ipc(ipcp);
6258 static void selinux_d_instantiate(struct dentry *dentry, struct inode *inode)
6261 inode_doinit_with_dentry(inode, dentry);
6264 static int selinux_getprocattr(struct task_struct *p,
6265 const char *name, char **value)
6267 const struct task_security_struct *__tsec;
6273 __tsec = selinux_cred(__task_cred(p));
6276 error = avc_has_perm(current_sid(), __tsec->sid,
6277 SECCLASS_PROCESS, PROCESS__GETATTR, NULL);
6282 if (!strcmp(name, "current"))
6284 else if (!strcmp(name, "prev"))
6286 else if (!strcmp(name, "exec"))
6287 sid = __tsec->exec_sid;
6288 else if (!strcmp(name, "fscreate"))
6289 sid = __tsec->create_sid;
6290 else if (!strcmp(name, "keycreate"))
6291 sid = __tsec->keycreate_sid;
6292 else if (!strcmp(name, "sockcreate"))
6293 sid = __tsec->sockcreate_sid;
6303 error = security_sid_to_context(sid, value, &len);
6313 static int selinux_setprocattr(const char *name, void *value, size_t size)
6315 struct task_security_struct *tsec;
6317 u32 mysid = current_sid(), sid = 0, ptsid;
6322 * Basic control over ability to set these attributes at all.
6324 if (!strcmp(name, "exec"))
6325 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,
6326 PROCESS__SETEXEC, NULL);
6327 else if (!strcmp(name, "fscreate"))
6328 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,
6329 PROCESS__SETFSCREATE, NULL);
6330 else if (!strcmp(name, "keycreate"))
6331 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,
6332 PROCESS__SETKEYCREATE, NULL);
6333 else if (!strcmp(name, "sockcreate"))
6334 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,
6335 PROCESS__SETSOCKCREATE, NULL);
6336 else if (!strcmp(name, "current"))
6337 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,
6338 PROCESS__SETCURRENT, NULL);
6344 /* Obtain a SID for the context, if one was specified. */
6345 if (size && str[0] && str[0] != '\n') {
6346 if (str[size-1] == '\n') {
6350 error = security_context_to_sid(value, size,
6352 if (error == -EINVAL && !strcmp(name, "fscreate")) {
6353 if (!has_cap_mac_admin(true)) {
6354 struct audit_buffer *ab;
6357 /* We strip a nul only if it is at the end, otherwise the
6358 * context contains a nul and we should audit that */
6359 if (str[size - 1] == '\0')
6360 audit_size = size - 1;
6363 ab = audit_log_start(audit_context(),
6368 audit_log_format(ab, "op=fscreate invalid_context=");
6369 audit_log_n_untrustedstring(ab, value, audit_size);
6374 error = security_context_to_sid_force(value, size,
6381 new = prepare_creds();
6385 /* Permission checking based on the specified context is
6386 performed during the actual operation (execve,
6387 open/mkdir/...), when we know the full context of the
6388 operation. See selinux_bprm_creds_for_exec for the execve
6389 checks and may_create for the file creation checks. The
6390 operation will then fail if the context is not permitted. */
6391 tsec = selinux_cred(new);
6392 if (!strcmp(name, "exec")) {
6393 tsec->exec_sid = sid;
6394 } else if (!strcmp(name, "fscreate")) {
6395 tsec->create_sid = sid;
6396 } else if (!strcmp(name, "keycreate")) {
6398 error = avc_has_perm(mysid, sid,
6399 SECCLASS_KEY, KEY__CREATE, NULL);
6403 tsec->keycreate_sid = sid;
6404 } else if (!strcmp(name, "sockcreate")) {
6405 tsec->sockcreate_sid = sid;
6406 } else if (!strcmp(name, "current")) {
6411 /* Only allow single threaded processes to change context */
6412 if (!current_is_single_threaded()) {
6413 error = security_bounded_transition(tsec->sid, sid);
6418 /* Check permissions for the transition. */
6419 error = avc_has_perm(tsec->sid, sid, SECCLASS_PROCESS,
6420 PROCESS__DYNTRANSITION, NULL);
6424 /* Check for ptracing, and update the task SID if ok.
6425 Otherwise, leave SID unchanged and fail. */
6426 ptsid = ptrace_parent_sid();
6428 error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS,
6429 PROCESS__PTRACE, NULL);
6448 static int selinux_ismaclabel(const char *name)
6450 return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0);
6453 static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
6455 return security_sid_to_context(secid,
6459 static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
6461 return security_context_to_sid(secdata, seclen,
6465 static void selinux_release_secctx(char *secdata, u32 seclen)
6470 static void selinux_inode_invalidate_secctx(struct inode *inode)
6472 struct inode_security_struct *isec = selinux_inode(inode);
6474 spin_lock(&isec->lock);
6475 isec->initialized = LABEL_INVALID;
6476 spin_unlock(&isec->lock);
6480 * called with inode->i_mutex locked
6482 static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)
6484 int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX,
6486 /* Do not return error when suppressing label (SBLABEL_MNT not set). */
6487 return rc == -EOPNOTSUPP ? 0 : rc;
6491 * called with inode->i_mutex locked
6493 static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen)
6495 return __vfs_setxattr_noperm(&nop_mnt_idmap, dentry, XATTR_NAME_SELINUX,
6499 static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
6502 len = selinux_inode_getsecurity(&nop_mnt_idmap, inode,
6503 XATTR_SELINUX_SUFFIX, ctx, true);
6511 static int selinux_key_alloc(struct key *k, const struct cred *cred,
6512 unsigned long flags)
6514 const struct task_security_struct *tsec;
6515 struct key_security_struct *ksec;
6517 ksec = kzalloc(sizeof(struct key_security_struct), GFP_KERNEL);
6521 tsec = selinux_cred(cred);
6522 if (tsec->keycreate_sid)
6523 ksec->sid = tsec->keycreate_sid;
6525 ksec->sid = tsec->sid;
6531 static void selinux_key_free(struct key *k)
6533 struct key_security_struct *ksec = k->security;
6539 static int selinux_key_permission(key_ref_t key_ref,
6540 const struct cred *cred,
6541 enum key_need_perm need_perm)
6544 struct key_security_struct *ksec;
6547 switch (need_perm) {
6554 case KEY_NEED_WRITE:
6557 case KEY_NEED_SEARCH:
6563 case KEY_NEED_SETATTR:
6564 perm = KEY__SETATTR;
6566 case KEY_NEED_UNLINK:
6567 case KEY_SYSADMIN_OVERRIDE:
6568 case KEY_AUTHTOKEN_OVERRIDE:
6569 case KEY_DEFER_PERM_CHECK:
6577 sid = cred_sid(cred);
6578 key = key_ref_to_ptr(key_ref);
6579 ksec = key->security;
6581 return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, perm, NULL);
6584 static int selinux_key_getsecurity(struct key *key, char **_buffer)
6586 struct key_security_struct *ksec = key->security;
6587 char *context = NULL;
6591 rc = security_sid_to_context(ksec->sid,
6599 #ifdef CONFIG_KEY_NOTIFICATIONS
6600 static int selinux_watch_key(struct key *key)
6602 struct key_security_struct *ksec = key->security;
6603 u32 sid = current_sid();
6605 return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, KEY__VIEW, NULL);
6610 #ifdef CONFIG_SECURITY_INFINIBAND
6611 static int selinux_ib_pkey_access(void *ib_sec, u64 subnet_prefix, u16 pkey_val)
6613 struct common_audit_data ad;
6616 struct ib_security_struct *sec = ib_sec;
6617 struct lsm_ibpkey_audit ibpkey;
6619 err = sel_ib_pkey_sid(subnet_prefix, pkey_val, &sid);
6623 ad.type = LSM_AUDIT_DATA_IBPKEY;
6624 ibpkey.subnet_prefix = subnet_prefix;
6625 ibpkey.pkey = pkey_val;
6626 ad.u.ibpkey = &ibpkey;
6627 return avc_has_perm(sec->sid, sid,
6628 SECCLASS_INFINIBAND_PKEY,
6629 INFINIBAND_PKEY__ACCESS, &ad);
6632 static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name,
6635 struct common_audit_data ad;
6638 struct ib_security_struct *sec = ib_sec;
6639 struct lsm_ibendport_audit ibendport;
6641 err = security_ib_endport_sid(dev_name, port_num,
6647 ad.type = LSM_AUDIT_DATA_IBENDPORT;
6648 ibendport.dev_name = dev_name;
6649 ibendport.port = port_num;
6650 ad.u.ibendport = &ibendport;
6651 return avc_has_perm(sec->sid, sid,
6652 SECCLASS_INFINIBAND_ENDPORT,
6653 INFINIBAND_ENDPORT__MANAGE_SUBNET, &ad);
6656 static int selinux_ib_alloc_security(void **ib_sec)
6658 struct ib_security_struct *sec;
6660 sec = kzalloc(sizeof(*sec), GFP_KERNEL);
6663 sec->sid = current_sid();
6669 static void selinux_ib_free_security(void *ib_sec)
6675 #ifdef CONFIG_BPF_SYSCALL
6676 static int selinux_bpf(int cmd, union bpf_attr *attr,
6679 u32 sid = current_sid();
6683 case BPF_MAP_CREATE:
6684 ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__MAP_CREATE,
6688 ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__PROG_LOAD,
6699 static u32 bpf_map_fmode_to_av(fmode_t fmode)
6703 if (fmode & FMODE_READ)
6704 av |= BPF__MAP_READ;
6705 if (fmode & FMODE_WRITE)
6706 av |= BPF__MAP_WRITE;
6710 /* This function will check the file pass through unix socket or binder to see
6711 * if it is a bpf related object. And apply corresponding checks on the bpf
6712 * object based on the type. The bpf maps and programs, not like other files and
6713 * socket, are using a shared anonymous inode inside the kernel as their inode.
6714 * So checking that inode cannot identify if the process have privilege to
6715 * access the bpf object and that's why we have to add this additional check in
6716 * selinux_file_receive and selinux_binder_transfer_files.
6718 static int bpf_fd_pass(struct file *file, u32 sid)
6720 struct bpf_security_struct *bpfsec;
6721 struct bpf_prog *prog;
6722 struct bpf_map *map;
6725 if (file->f_op == &bpf_map_fops) {
6726 map = file->private_data;
6727 bpfsec = map->security;
6728 ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,
6729 bpf_map_fmode_to_av(file->f_mode), NULL);
6732 } else if (file->f_op == &bpf_prog_fops) {
6733 prog = file->private_data;
6734 bpfsec = prog->aux->security;
6735 ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,
6736 BPF__PROG_RUN, NULL);
6743 static int selinux_bpf_map(struct bpf_map *map, fmode_t fmode)
6745 u32 sid = current_sid();
6746 struct bpf_security_struct *bpfsec;
6748 bpfsec = map->security;
6749 return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,
6750 bpf_map_fmode_to_av(fmode), NULL);
6753 static int selinux_bpf_prog(struct bpf_prog *prog)
6755 u32 sid = current_sid();
6756 struct bpf_security_struct *bpfsec;
6758 bpfsec = prog->aux->security;
6759 return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,
6760 BPF__PROG_RUN, NULL);
6763 static int selinux_bpf_map_alloc(struct bpf_map *map)
6765 struct bpf_security_struct *bpfsec;
6767 bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6771 bpfsec->sid = current_sid();
6772 map->security = bpfsec;
6777 static void selinux_bpf_map_free(struct bpf_map *map)
6779 struct bpf_security_struct *bpfsec = map->security;
6781 map->security = NULL;
6785 static int selinux_bpf_prog_alloc(struct bpf_prog_aux *aux)
6787 struct bpf_security_struct *bpfsec;
6789 bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6793 bpfsec->sid = current_sid();
6794 aux->security = bpfsec;
6799 static void selinux_bpf_prog_free(struct bpf_prog_aux *aux)
6801 struct bpf_security_struct *bpfsec = aux->security;
6803 aux->security = NULL;
6808 struct lsm_blob_sizes selinux_blob_sizes __ro_after_init = {
6809 .lbs_cred = sizeof(struct task_security_struct),
6810 .lbs_file = sizeof(struct file_security_struct),
6811 .lbs_inode = sizeof(struct inode_security_struct),
6812 .lbs_ipc = sizeof(struct ipc_security_struct),
6813 .lbs_msg_msg = sizeof(struct msg_security_struct),
6814 .lbs_superblock = sizeof(struct superblock_security_struct),
6817 #ifdef CONFIG_PERF_EVENTS
6818 static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
6820 u32 requested, sid = current_sid();
6822 if (type == PERF_SECURITY_OPEN)
6823 requested = PERF_EVENT__OPEN;
6824 else if (type == PERF_SECURITY_CPU)
6825 requested = PERF_EVENT__CPU;
6826 else if (type == PERF_SECURITY_KERNEL)
6827 requested = PERF_EVENT__KERNEL;
6828 else if (type == PERF_SECURITY_TRACEPOINT)
6829 requested = PERF_EVENT__TRACEPOINT;
6833 return avc_has_perm(sid, sid, SECCLASS_PERF_EVENT,
6837 static int selinux_perf_event_alloc(struct perf_event *event)
6839 struct perf_event_security_struct *perfsec;
6841 perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL);
6845 perfsec->sid = current_sid();
6846 event->security = perfsec;
6851 static void selinux_perf_event_free(struct perf_event *event)
6853 struct perf_event_security_struct *perfsec = event->security;
6855 event->security = NULL;
6859 static int selinux_perf_event_read(struct perf_event *event)
6861 struct perf_event_security_struct *perfsec = event->security;
6862 u32 sid = current_sid();
6864 return avc_has_perm(sid, perfsec->sid,
6865 SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);
6868 static int selinux_perf_event_write(struct perf_event *event)
6870 struct perf_event_security_struct *perfsec = event->security;
6871 u32 sid = current_sid();
6873 return avc_has_perm(sid, perfsec->sid,
6874 SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);
6878 #ifdef CONFIG_IO_URING
6880 * selinux_uring_override_creds - check the requested cred override
6881 * @new: the target creds
6883 * Check to see if the current task is allowed to override it's credentials
6884 * to service an io_uring operation.
6886 static int selinux_uring_override_creds(const struct cred *new)
6888 return avc_has_perm(current_sid(), cred_sid(new),
6889 SECCLASS_IO_URING, IO_URING__OVERRIDE_CREDS, NULL);
6893 * selinux_uring_sqpoll - check if a io_uring polling thread can be created
6895 * Check to see if the current task is allowed to create a new io_uring
6896 * kernel polling thread.
6898 static int selinux_uring_sqpoll(void)
6900 int sid = current_sid();
6902 return avc_has_perm(sid, sid,
6903 SECCLASS_IO_URING, IO_URING__SQPOLL, NULL);
6907 * selinux_uring_cmd - check if IORING_OP_URING_CMD is allowed
6908 * @ioucmd: the io_uring command structure
6910 * Check to see if the current domain is allowed to execute an
6911 * IORING_OP_URING_CMD against the device/file specified in @ioucmd.
6914 static int selinux_uring_cmd(struct io_uring_cmd *ioucmd)
6916 struct file *file = ioucmd->file;
6917 struct inode *inode = file_inode(file);
6918 struct inode_security_struct *isec = selinux_inode(inode);
6919 struct common_audit_data ad;
6921 ad.type = LSM_AUDIT_DATA_FILE;
6924 return avc_has_perm(current_sid(), isec->sid,
6925 SECCLASS_IO_URING, IO_URING__CMD, &ad);
6927 #endif /* CONFIG_IO_URING */
6930 * IMPORTANT NOTE: When adding new hooks, please be careful to keep this order:
6931 * 1. any hooks that don't belong to (2.) or (3.) below,
6932 * 2. hooks that both access structures allocated by other hooks, and allocate
6933 * structures that can be later accessed by other hooks (mostly "cloning"
6935 * 3. hooks that only allocate structures that can be later accessed by other
6936 * hooks ("allocating" hooks).
6938 * Please follow block comment delimiters in the list to keep this order.
6940 * This ordering is needed for SELinux runtime disable to work at least somewhat
6941 * safely. Breaking the ordering rules above might lead to NULL pointer derefs
6942 * when disabling SELinux at runtime.
6944 static struct security_hook_list selinux_hooks[] __ro_after_init = {
6945 LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
6946 LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
6947 LSM_HOOK_INIT(binder_transfer_binder, selinux_binder_transfer_binder),
6948 LSM_HOOK_INIT(binder_transfer_file, selinux_binder_transfer_file),
6950 LSM_HOOK_INIT(ptrace_access_check, selinux_ptrace_access_check),
6951 LSM_HOOK_INIT(ptrace_traceme, selinux_ptrace_traceme),
6952 LSM_HOOK_INIT(capget, selinux_capget),
6953 LSM_HOOK_INIT(capset, selinux_capset),
6954 LSM_HOOK_INIT(capable, selinux_capable),
6955 LSM_HOOK_INIT(quotactl, selinux_quotactl),
6956 LSM_HOOK_INIT(quota_on, selinux_quota_on),
6957 LSM_HOOK_INIT(syslog, selinux_syslog),
6958 LSM_HOOK_INIT(vm_enough_memory, selinux_vm_enough_memory),
6960 LSM_HOOK_INIT(netlink_send, selinux_netlink_send),
6962 LSM_HOOK_INIT(bprm_creds_for_exec, selinux_bprm_creds_for_exec),
6963 LSM_HOOK_INIT(bprm_committing_creds, selinux_bprm_committing_creds),
6964 LSM_HOOK_INIT(bprm_committed_creds, selinux_bprm_committed_creds),
6966 LSM_HOOK_INIT(sb_free_mnt_opts, selinux_free_mnt_opts),
6967 LSM_HOOK_INIT(sb_mnt_opts_compat, selinux_sb_mnt_opts_compat),
6968 LSM_HOOK_INIT(sb_remount, selinux_sb_remount),
6969 LSM_HOOK_INIT(sb_kern_mount, selinux_sb_kern_mount),
6970 LSM_HOOK_INIT(sb_show_options, selinux_sb_show_options),
6971 LSM_HOOK_INIT(sb_statfs, selinux_sb_statfs),
6972 LSM_HOOK_INIT(sb_mount, selinux_mount),
6973 LSM_HOOK_INIT(sb_umount, selinux_umount),
6974 LSM_HOOK_INIT(sb_set_mnt_opts, selinux_set_mnt_opts),
6975 LSM_HOOK_INIT(sb_clone_mnt_opts, selinux_sb_clone_mnt_opts),
6977 LSM_HOOK_INIT(move_mount, selinux_move_mount),
6979 LSM_HOOK_INIT(dentry_init_security, selinux_dentry_init_security),
6980 LSM_HOOK_INIT(dentry_create_files_as, selinux_dentry_create_files_as),
6982 LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security),
6983 LSM_HOOK_INIT(inode_init_security, selinux_inode_init_security),
6984 LSM_HOOK_INIT(inode_init_security_anon, selinux_inode_init_security_anon),
6985 LSM_HOOK_INIT(inode_create, selinux_inode_create),
6986 LSM_HOOK_INIT(inode_link, selinux_inode_link),
6987 LSM_HOOK_INIT(inode_unlink, selinux_inode_unlink),
6988 LSM_HOOK_INIT(inode_symlink, selinux_inode_symlink),
6989 LSM_HOOK_INIT(inode_mkdir, selinux_inode_mkdir),
6990 LSM_HOOK_INIT(inode_rmdir, selinux_inode_rmdir),
6991 LSM_HOOK_INIT(inode_mknod, selinux_inode_mknod),
6992 LSM_HOOK_INIT(inode_rename, selinux_inode_rename),
6993 LSM_HOOK_INIT(inode_readlink, selinux_inode_readlink),
6994 LSM_HOOK_INIT(inode_follow_link, selinux_inode_follow_link),
6995 LSM_HOOK_INIT(inode_permission, selinux_inode_permission),
6996 LSM_HOOK_INIT(inode_setattr, selinux_inode_setattr),
6997 LSM_HOOK_INIT(inode_getattr, selinux_inode_getattr),
6998 LSM_HOOK_INIT(inode_setxattr, selinux_inode_setxattr),
6999 LSM_HOOK_INIT(inode_post_setxattr, selinux_inode_post_setxattr),
7000 LSM_HOOK_INIT(inode_getxattr, selinux_inode_getxattr),
7001 LSM_HOOK_INIT(inode_listxattr, selinux_inode_listxattr),
7002 LSM_HOOK_INIT(inode_removexattr, selinux_inode_removexattr),
7003 LSM_HOOK_INIT(inode_set_acl, selinux_inode_set_acl),
7004 LSM_HOOK_INIT(inode_get_acl, selinux_inode_get_acl),
7005 LSM_HOOK_INIT(inode_remove_acl, selinux_inode_remove_acl),
7006 LSM_HOOK_INIT(inode_getsecurity, selinux_inode_getsecurity),
7007 LSM_HOOK_INIT(inode_setsecurity, selinux_inode_setsecurity),
7008 LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity),
7009 LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid),
7010 LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up),
7011 LSM_HOOK_INIT(inode_copy_up_xattr, selinux_inode_copy_up_xattr),
7012 LSM_HOOK_INIT(path_notify, selinux_path_notify),
7014 LSM_HOOK_INIT(kernfs_init_security, selinux_kernfs_init_security),
7016 LSM_HOOK_INIT(file_permission, selinux_file_permission),
7017 LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security),
7018 LSM_HOOK_INIT(file_ioctl, selinux_file_ioctl),
7019 LSM_HOOK_INIT(mmap_file, selinux_mmap_file),
7020 LSM_HOOK_INIT(mmap_addr, selinux_mmap_addr),
7021 LSM_HOOK_INIT(file_mprotect, selinux_file_mprotect),
7022 LSM_HOOK_INIT(file_lock, selinux_file_lock),
7023 LSM_HOOK_INIT(file_fcntl, selinux_file_fcntl),
7024 LSM_HOOK_INIT(file_set_fowner, selinux_file_set_fowner),
7025 LSM_HOOK_INIT(file_send_sigiotask, selinux_file_send_sigiotask),
7026 LSM_HOOK_INIT(file_receive, selinux_file_receive),
7028 LSM_HOOK_INIT(file_open, selinux_file_open),
7030 LSM_HOOK_INIT(task_alloc, selinux_task_alloc),
7031 LSM_HOOK_INIT(cred_prepare, selinux_cred_prepare),
7032 LSM_HOOK_INIT(cred_transfer, selinux_cred_transfer),
7033 LSM_HOOK_INIT(cred_getsecid, selinux_cred_getsecid),
7034 LSM_HOOK_INIT(kernel_act_as, selinux_kernel_act_as),
7035 LSM_HOOK_INIT(kernel_create_files_as, selinux_kernel_create_files_as),
7036 LSM_HOOK_INIT(kernel_module_request, selinux_kernel_module_request),
7037 LSM_HOOK_INIT(kernel_load_data, selinux_kernel_load_data),
7038 LSM_HOOK_INIT(kernel_read_file, selinux_kernel_read_file),
7039 LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid),
7040 LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid),
7041 LSM_HOOK_INIT(task_getsid, selinux_task_getsid),
7042 LSM_HOOK_INIT(current_getsecid_subj, selinux_current_getsecid_subj),
7043 LSM_HOOK_INIT(task_getsecid_obj, selinux_task_getsecid_obj),
7044 LSM_HOOK_INIT(task_setnice, selinux_task_setnice),
7045 LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio),
7046 LSM_HOOK_INIT(task_getioprio, selinux_task_getioprio),
7047 LSM_HOOK_INIT(task_prlimit, selinux_task_prlimit),
7048 LSM_HOOK_INIT(task_setrlimit, selinux_task_setrlimit),
7049 LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler),
7050 LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler),
7051 LSM_HOOK_INIT(task_movememory, selinux_task_movememory),
7052 LSM_HOOK_INIT(task_kill, selinux_task_kill),
7053 LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode),
7054 LSM_HOOK_INIT(userns_create, selinux_userns_create),
7056 LSM_HOOK_INIT(ipc_permission, selinux_ipc_permission),
7057 LSM_HOOK_INIT(ipc_getsecid, selinux_ipc_getsecid),
7059 LSM_HOOK_INIT(msg_queue_associate, selinux_msg_queue_associate),
7060 LSM_HOOK_INIT(msg_queue_msgctl, selinux_msg_queue_msgctl),
7061 LSM_HOOK_INIT(msg_queue_msgsnd, selinux_msg_queue_msgsnd),
7062 LSM_HOOK_INIT(msg_queue_msgrcv, selinux_msg_queue_msgrcv),
7064 LSM_HOOK_INIT(shm_associate, selinux_shm_associate),
7065 LSM_HOOK_INIT(shm_shmctl, selinux_shm_shmctl),
7066 LSM_HOOK_INIT(shm_shmat, selinux_shm_shmat),
7068 LSM_HOOK_INIT(sem_associate, selinux_sem_associate),
7069 LSM_HOOK_INIT(sem_semctl, selinux_sem_semctl),
7070 LSM_HOOK_INIT(sem_semop, selinux_sem_semop),
7072 LSM_HOOK_INIT(d_instantiate, selinux_d_instantiate),
7074 LSM_HOOK_INIT(getprocattr, selinux_getprocattr),
7075 LSM_HOOK_INIT(setprocattr, selinux_setprocattr),
7077 LSM_HOOK_INIT(ismaclabel, selinux_ismaclabel),
7078 LSM_HOOK_INIT(secctx_to_secid, selinux_secctx_to_secid),
7079 LSM_HOOK_INIT(release_secctx, selinux_release_secctx),
7080 LSM_HOOK_INIT(inode_invalidate_secctx, selinux_inode_invalidate_secctx),
7081 LSM_HOOK_INIT(inode_notifysecctx, selinux_inode_notifysecctx),
7082 LSM_HOOK_INIT(inode_setsecctx, selinux_inode_setsecctx),
7084 LSM_HOOK_INIT(unix_stream_connect, selinux_socket_unix_stream_connect),
7085 LSM_HOOK_INIT(unix_may_send, selinux_socket_unix_may_send),
7087 LSM_HOOK_INIT(socket_create, selinux_socket_create),
7088 LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create),
7089 LSM_HOOK_INIT(socket_socketpair, selinux_socket_socketpair),
7090 LSM_HOOK_INIT(socket_bind, selinux_socket_bind),
7091 LSM_HOOK_INIT(socket_connect, selinux_socket_connect),
7092 LSM_HOOK_INIT(socket_listen, selinux_socket_listen),
7093 LSM_HOOK_INIT(socket_accept, selinux_socket_accept),
7094 LSM_HOOK_INIT(socket_sendmsg, selinux_socket_sendmsg),
7095 LSM_HOOK_INIT(socket_recvmsg, selinux_socket_recvmsg),
7096 LSM_HOOK_INIT(socket_getsockname, selinux_socket_getsockname),
7097 LSM_HOOK_INIT(socket_getpeername, selinux_socket_getpeername),
7098 LSM_HOOK_INIT(socket_getsockopt, selinux_socket_getsockopt),
7099 LSM_HOOK_INIT(socket_setsockopt, selinux_socket_setsockopt),
7100 LSM_HOOK_INIT(socket_shutdown, selinux_socket_shutdown),
7101 LSM_HOOK_INIT(socket_sock_rcv_skb, selinux_socket_sock_rcv_skb),
7102 LSM_HOOK_INIT(socket_getpeersec_stream,
7103 selinux_socket_getpeersec_stream),
7104 LSM_HOOK_INIT(socket_getpeersec_dgram, selinux_socket_getpeersec_dgram),
7105 LSM_HOOK_INIT(sk_free_security, selinux_sk_free_security),
7106 LSM_HOOK_INIT(sk_clone_security, selinux_sk_clone_security),
7107 LSM_HOOK_INIT(sk_getsecid, selinux_sk_getsecid),
7108 LSM_HOOK_INIT(sock_graft, selinux_sock_graft),
7109 LSM_HOOK_INIT(sctp_assoc_request, selinux_sctp_assoc_request),
7110 LSM_HOOK_INIT(sctp_sk_clone, selinux_sctp_sk_clone),
7111 LSM_HOOK_INIT(sctp_bind_connect, selinux_sctp_bind_connect),
7112 LSM_HOOK_INIT(sctp_assoc_established, selinux_sctp_assoc_established),
7113 LSM_HOOK_INIT(mptcp_add_subflow, selinux_mptcp_add_subflow),
7114 LSM_HOOK_INIT(inet_conn_request, selinux_inet_conn_request),
7115 LSM_HOOK_INIT(inet_csk_clone, selinux_inet_csk_clone),
7116 LSM_HOOK_INIT(inet_conn_established, selinux_inet_conn_established),
7117 LSM_HOOK_INIT(secmark_relabel_packet, selinux_secmark_relabel_packet),
7118 LSM_HOOK_INIT(secmark_refcount_inc, selinux_secmark_refcount_inc),
7119 LSM_HOOK_INIT(secmark_refcount_dec, selinux_secmark_refcount_dec),
7120 LSM_HOOK_INIT(req_classify_flow, selinux_req_classify_flow),
7121 LSM_HOOK_INIT(tun_dev_free_security, selinux_tun_dev_free_security),
7122 LSM_HOOK_INIT(tun_dev_create, selinux_tun_dev_create),
7123 LSM_HOOK_INIT(tun_dev_attach_queue, selinux_tun_dev_attach_queue),
7124 LSM_HOOK_INIT(tun_dev_attach, selinux_tun_dev_attach),
7125 LSM_HOOK_INIT(tun_dev_open, selinux_tun_dev_open),
7126 #ifdef CONFIG_SECURITY_INFINIBAND
7127 LSM_HOOK_INIT(ib_pkey_access, selinux_ib_pkey_access),
7128 LSM_HOOK_INIT(ib_endport_manage_subnet,
7129 selinux_ib_endport_manage_subnet),
7130 LSM_HOOK_INIT(ib_free_security, selinux_ib_free_security),
7132 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7133 LSM_HOOK_INIT(xfrm_policy_free_security, selinux_xfrm_policy_free),
7134 LSM_HOOK_INIT(xfrm_policy_delete_security, selinux_xfrm_policy_delete),
7135 LSM_HOOK_INIT(xfrm_state_free_security, selinux_xfrm_state_free),
7136 LSM_HOOK_INIT(xfrm_state_delete_security, selinux_xfrm_state_delete),
7137 LSM_HOOK_INIT(xfrm_policy_lookup, selinux_xfrm_policy_lookup),
7138 LSM_HOOK_INIT(xfrm_state_pol_flow_match,
7139 selinux_xfrm_state_pol_flow_match),
7140 LSM_HOOK_INIT(xfrm_decode_session, selinux_xfrm_decode_session),
7144 LSM_HOOK_INIT(key_free, selinux_key_free),
7145 LSM_HOOK_INIT(key_permission, selinux_key_permission),
7146 LSM_HOOK_INIT(key_getsecurity, selinux_key_getsecurity),
7147 #ifdef CONFIG_KEY_NOTIFICATIONS
7148 LSM_HOOK_INIT(watch_key, selinux_watch_key),
7153 LSM_HOOK_INIT(audit_rule_known, selinux_audit_rule_known),
7154 LSM_HOOK_INIT(audit_rule_match, selinux_audit_rule_match),
7155 LSM_HOOK_INIT(audit_rule_free, selinux_audit_rule_free),
7158 #ifdef CONFIG_BPF_SYSCALL
7159 LSM_HOOK_INIT(bpf, selinux_bpf),
7160 LSM_HOOK_INIT(bpf_map, selinux_bpf_map),
7161 LSM_HOOK_INIT(bpf_prog, selinux_bpf_prog),
7162 LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
7163 LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
7166 #ifdef CONFIG_PERF_EVENTS
7167 LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open),
7168 LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free),
7169 LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read),
7170 LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write),
7173 #ifdef CONFIG_IO_URING
7174 LSM_HOOK_INIT(uring_override_creds, selinux_uring_override_creds),
7175 LSM_HOOK_INIT(uring_sqpoll, selinux_uring_sqpoll),
7176 LSM_HOOK_INIT(uring_cmd, selinux_uring_cmd),
7180 * PUT "CLONING" (ACCESSING + ALLOCATING) HOOKS HERE
7182 LSM_HOOK_INIT(fs_context_dup, selinux_fs_context_dup),
7183 LSM_HOOK_INIT(fs_context_parse_param, selinux_fs_context_parse_param),
7184 LSM_HOOK_INIT(sb_eat_lsm_opts, selinux_sb_eat_lsm_opts),
7185 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7186 LSM_HOOK_INIT(xfrm_policy_clone_security, selinux_xfrm_policy_clone),
7190 * PUT "ALLOCATING" HOOKS HERE
7192 LSM_HOOK_INIT(msg_msg_alloc_security, selinux_msg_msg_alloc_security),
7193 LSM_HOOK_INIT(msg_queue_alloc_security,
7194 selinux_msg_queue_alloc_security),
7195 LSM_HOOK_INIT(shm_alloc_security, selinux_shm_alloc_security),
7196 LSM_HOOK_INIT(sb_alloc_security, selinux_sb_alloc_security),
7197 LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security),
7198 LSM_HOOK_INIT(sem_alloc_security, selinux_sem_alloc_security),
7199 LSM_HOOK_INIT(secid_to_secctx, selinux_secid_to_secctx),
7200 LSM_HOOK_INIT(inode_getsecctx, selinux_inode_getsecctx),
7201 LSM_HOOK_INIT(sk_alloc_security, selinux_sk_alloc_security),
7202 LSM_HOOK_INIT(tun_dev_alloc_security, selinux_tun_dev_alloc_security),
7203 #ifdef CONFIG_SECURITY_INFINIBAND
7204 LSM_HOOK_INIT(ib_alloc_security, selinux_ib_alloc_security),
7206 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7207 LSM_HOOK_INIT(xfrm_policy_alloc_security, selinux_xfrm_policy_alloc),
7208 LSM_HOOK_INIT(xfrm_state_alloc, selinux_xfrm_state_alloc),
7209 LSM_HOOK_INIT(xfrm_state_alloc_acquire,
7210 selinux_xfrm_state_alloc_acquire),
7213 LSM_HOOK_INIT(key_alloc, selinux_key_alloc),
7216 LSM_HOOK_INIT(audit_rule_init, selinux_audit_rule_init),
7218 #ifdef CONFIG_BPF_SYSCALL
7219 LSM_HOOK_INIT(bpf_map_alloc_security, selinux_bpf_map_alloc),
7220 LSM_HOOK_INIT(bpf_prog_alloc_security, selinux_bpf_prog_alloc),
7222 #ifdef CONFIG_PERF_EVENTS
7223 LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc),
7227 static __init int selinux_init(void)
7229 pr_info("SELinux: Initializing.\n");
7231 memset(&selinux_state, 0, sizeof(selinux_state));
7232 enforcing_set(selinux_enforcing_boot);
7234 mutex_init(&selinux_state.status_lock);
7235 mutex_init(&selinux_state.policy_mutex);
7237 /* Set the security state for the initial task. */
7238 cred_init_security();
7240 default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
7246 ebitmap_cache_init();
7248 hashtab_cache_init();
7250 security_add_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks), "selinux");
7252 if (avc_add_callback(selinux_netcache_avc_callback, AVC_CALLBACK_RESET))
7253 panic("SELinux: Unable to register AVC netcache callback\n");
7255 if (avc_add_callback(selinux_lsm_notifier_avc_callback, AVC_CALLBACK_RESET))
7256 panic("SELinux: Unable to register AVC LSM notifier callback\n");
7258 if (selinux_enforcing_boot)
7259 pr_debug("SELinux: Starting in enforcing mode\n");
7261 pr_debug("SELinux: Starting in permissive mode\n");
7263 fs_validate_description("selinux", selinux_fs_parameters);
7268 static void delayed_superblock_init(struct super_block *sb, void *unused)
7270 selinux_set_mnt_opts(sb, NULL, 0, NULL);
7273 void selinux_complete_init(void)
7275 pr_debug("SELinux: Completing initialization.\n");
7277 /* Set up any superblocks initialized prior to the policy load. */
7278 pr_debug("SELinux: Setting up existing superblocks.\n");
7279 iterate_supers(delayed_superblock_init, NULL);
7282 /* SELinux requires early initialization in order to label
7283 all processes and objects when they are created. */
7284 DEFINE_LSM(selinux) = {
7286 .flags = LSM_FLAG_LEGACY_MAJOR | LSM_FLAG_EXCLUSIVE,
7287 .enabled = &selinux_enabled_boot,
7288 .blobs = &selinux_blob_sizes,
7289 .init = selinux_init,
7292 #if defined(CONFIG_NETFILTER)
7293 static const struct nf_hook_ops selinux_nf_ops[] = {
7295 .hook = selinux_ip_postroute,
7297 .hooknum = NF_INET_POST_ROUTING,
7298 .priority = NF_IP_PRI_SELINUX_LAST,
7301 .hook = selinux_ip_forward,
7303 .hooknum = NF_INET_FORWARD,
7304 .priority = NF_IP_PRI_SELINUX_FIRST,
7307 .hook = selinux_ip_output,
7309 .hooknum = NF_INET_LOCAL_OUT,
7310 .priority = NF_IP_PRI_SELINUX_FIRST,
7312 #if IS_ENABLED(CONFIG_IPV6)
7314 .hook = selinux_ip_postroute,
7316 .hooknum = NF_INET_POST_ROUTING,
7317 .priority = NF_IP6_PRI_SELINUX_LAST,
7320 .hook = selinux_ip_forward,
7322 .hooknum = NF_INET_FORWARD,
7323 .priority = NF_IP6_PRI_SELINUX_FIRST,
7326 .hook = selinux_ip_output,
7328 .hooknum = NF_INET_LOCAL_OUT,
7329 .priority = NF_IP6_PRI_SELINUX_FIRST,
7334 static int __net_init selinux_nf_register(struct net *net)
7336 return nf_register_net_hooks(net, selinux_nf_ops,
7337 ARRAY_SIZE(selinux_nf_ops));
7340 static void __net_exit selinux_nf_unregister(struct net *net)
7342 nf_unregister_net_hooks(net, selinux_nf_ops,
7343 ARRAY_SIZE(selinux_nf_ops));
7346 static struct pernet_operations selinux_net_ops = {
7347 .init = selinux_nf_register,
7348 .exit = selinux_nf_unregister,
7351 static int __init selinux_nf_ip_init(void)
7355 if (!selinux_enabled_boot)
7358 pr_debug("SELinux: Registering netfilter hooks\n");
7360 err = register_pernet_subsys(&selinux_net_ops);
7362 panic("SELinux: register_pernet_subsys: error %d\n", err);
7366 __initcall(selinux_nf_ip_init);
7367 #endif /* CONFIG_NETFILTER */