2 * NSA Security-Enhanced Linux (SELinux) security module
4 * This file contains the SELinux hook function implementations.
6 * Authors: Stephen Smalley, <sds@epoch.ncsc.mil>
7 * Chris Vance, <cvance@nai.com>
8 * Wayne Salamon, <wsalamon@nai.com>
9 * James Morris <jmorris@redhat.com>
11 * Copyright (C) 2001,2002 Networks Associates Technology, Inc.
12 * Copyright (C) 2003-2008 Red Hat, Inc., James Morris <jmorris@redhat.com>
13 * Eric Paris <eparis@redhat.com>
14 * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
15 * <dgoeddel@trustedcs.com>
16 * Copyright (C) 2006, 2007, 2009 Hewlett-Packard Development Company, L.P.
17 * Paul Moore <paul@paul-moore.com>
18 * Copyright (C) 2007 Hitachi Software Engineering Co., Ltd.
19 * Yuichi Nakamura <ynakam@hitachisoft.jp>
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License version 2,
23 * as published by the Free Software Foundation.
26 #include <linux/init.h>
28 #include <linux/kernel.h>
29 #include <linux/tracehook.h>
30 #include <linux/errno.h>
31 #include <linux/sched.h>
32 #include <linux/lsm_hooks.h>
33 #include <linux/xattr.h>
34 #include <linux/capability.h>
35 #include <linux/unistd.h>
37 #include <linux/mman.h>
38 #include <linux/slab.h>
39 #include <linux/pagemap.h>
40 #include <linux/proc_fs.h>
41 #include <linux/swap.h>
42 #include <linux/spinlock.h>
43 #include <linux/syscalls.h>
44 #include <linux/dcache.h>
45 #include <linux/file.h>
46 #include <linux/fdtable.h>
47 #include <linux/namei.h>
48 #include <linux/mount.h>
49 #include <linux/netfilter_ipv4.h>
50 #include <linux/netfilter_ipv6.h>
51 #include <linux/tty.h>
53 #include <net/ip.h> /* for local_port_range[] */
54 #include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */
55 #include <net/inet_connection_sock.h>
56 #include <net/net_namespace.h>
57 #include <net/netlabel.h>
58 #include <linux/uaccess.h>
59 #include <asm/ioctls.h>
60 #include <linux/atomic.h>
61 #include <linux/bitops.h>
62 #include <linux/interrupt.h>
63 #include <linux/netdevice.h> /* for network interface checks */
64 #include <net/netlink.h>
65 #include <linux/tcp.h>
66 #include <linux/udp.h>
67 #include <linux/dccp.h>
68 #include <linux/quota.h>
69 #include <linux/un.h> /* for Unix socket types */
70 #include <net/af_unix.h> /* for Unix socket types */
71 #include <linux/parser.h>
72 #include <linux/nfs_mount.h>
74 #include <linux/hugetlb.h>
75 #include <linux/personality.h>
76 #include <linux/audit.h>
77 #include <linux/string.h>
78 #include <linux/selinux.h>
79 #include <linux/mutex.h>
80 #include <linux/posix-timers.h>
81 #include <linux/syslog.h>
82 #include <linux/user_namespace.h>
83 #include <linux/export.h>
84 #include <linux/msg.h>
85 #include <linux/shm.h>
97 /* SECMARK reference count */
98 static atomic_t selinux_secmark_refcount
= ATOMIC_INIT(0);
100 #ifdef CONFIG_SECURITY_SELINUX_DEVELOP
101 int selinux_enforcing
;
103 static int __init
enforcing_setup(char *str
)
105 unsigned long enforcing
;
106 if (!kstrtoul(str
, 0, &enforcing
))
107 selinux_enforcing
= enforcing
? 1 : 0;
110 __setup("enforcing=", enforcing_setup
);
113 #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM
114 int selinux_enabled
= CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE
;
116 static int __init
selinux_enabled_setup(char *str
)
118 unsigned long enabled
;
119 if (!kstrtoul(str
, 0, &enabled
))
120 selinux_enabled
= enabled
? 1 : 0;
123 __setup("selinux=", selinux_enabled_setup
);
125 int selinux_enabled
= 1;
128 static struct kmem_cache
*sel_inode_cache
;
129 static struct kmem_cache
*file_security_cache
;
132 * selinux_secmark_enabled - Check to see if SECMARK is currently enabled
135 * This function checks the SECMARK reference counter to see if any SECMARK
136 * targets are currently configured, if the reference counter is greater than
137 * zero SECMARK is considered to be enabled. Returns true (1) if SECMARK is
138 * enabled, false (0) if SECMARK is disabled. If the always_check_network
139 * policy capability is enabled, SECMARK is always considered enabled.
142 static int selinux_secmark_enabled(void)
144 return (selinux_policycap_alwaysnetwork
|| atomic_read(&selinux_secmark_refcount
));
148 * selinux_peerlbl_enabled - Check to see if peer labeling is currently enabled
151 * This function checks if NetLabel or labeled IPSEC is enabled. Returns true
152 * (1) if any are enabled or false (0) if neither are enabled. If the
153 * always_check_network policy capability is enabled, peer labeling
154 * is always considered enabled.
157 static int selinux_peerlbl_enabled(void)
159 return (selinux_policycap_alwaysnetwork
|| netlbl_enabled() || selinux_xfrm_enabled());
162 static int selinux_netcache_avc_callback(u32 event
)
164 if (event
== AVC_CALLBACK_RESET
) {
174 * initialise the security for the init task
176 static void cred_init_security(void)
178 struct cred
*cred
= (struct cred
*) current
->real_cred
;
179 struct task_security_struct
*tsec
;
181 tsec
= kzalloc(sizeof(struct task_security_struct
), GFP_KERNEL
);
183 panic("SELinux: Failed to initialize initial task.\n");
185 tsec
->osid
= tsec
->sid
= SECINITSID_KERNEL
;
186 cred
->security
= tsec
;
190 * get the security ID of a set of credentials
192 static inline u32
cred_sid(const struct cred
*cred
)
194 const struct task_security_struct
*tsec
;
196 tsec
= cred
->security
;
201 * get the objective security ID of a task
203 static inline u32
task_sid(const struct task_struct
*task
)
208 sid
= cred_sid(__task_cred(task
));
214 * get the subjective security ID of the current task
216 static inline u32
current_sid(void)
218 const struct task_security_struct
*tsec
= current_security();
223 /* Allocate and free functions for each kind of security blob. */
225 static int inode_alloc_security(struct inode
*inode
)
227 struct inode_security_struct
*isec
;
228 u32 sid
= current_sid();
230 isec
= kmem_cache_zalloc(sel_inode_cache
, GFP_NOFS
);
234 mutex_init(&isec
->lock
);
235 INIT_LIST_HEAD(&isec
->list
);
237 isec
->sid
= SECINITSID_UNLABELED
;
238 isec
->sclass
= SECCLASS_FILE
;
239 isec
->task_sid
= sid
;
240 inode
->i_security
= isec
;
245 static int inode_doinit_with_dentry(struct inode
*inode
, struct dentry
*opt_dentry
);
248 * Try reloading inode security labels that have been marked as invalid. The
249 * @may_sleep parameter indicates when sleeping and thus reloading labels is
250 * allowed; when set to false, returns ERR_PTR(-ECHILD) when the label is
251 * invalid. The @opt_dentry parameter should be set to a dentry of the inode;
252 * when no dentry is available, set it to NULL instead.
254 static int __inode_security_revalidate(struct inode
*inode
,
255 struct dentry
*opt_dentry
,
258 struct inode_security_struct
*isec
= inode
->i_security
;
260 might_sleep_if(may_sleep
);
262 if (ss_initialized
&& isec
->initialized
!= LABEL_INITIALIZED
) {
267 * Try reloading the inode security label. This will fail if
268 * @opt_dentry is NULL and no dentry for this inode can be
269 * found; in that case, continue using the old label.
271 inode_doinit_with_dentry(inode
, opt_dentry
);
276 static struct inode_security_struct
*inode_security_novalidate(struct inode
*inode
)
278 return inode
->i_security
;
281 static struct inode_security_struct
*inode_security_rcu(struct inode
*inode
, bool rcu
)
285 error
= __inode_security_revalidate(inode
, NULL
, !rcu
);
287 return ERR_PTR(error
);
288 return inode
->i_security
;
292 * Get the security label of an inode.
294 static struct inode_security_struct
*inode_security(struct inode
*inode
)
296 __inode_security_revalidate(inode
, NULL
, true);
297 return inode
->i_security
;
300 static struct inode_security_struct
*backing_inode_security_novalidate(struct dentry
*dentry
)
302 struct inode
*inode
= d_backing_inode(dentry
);
304 return inode
->i_security
;
308 * Get the security label of a dentry's backing inode.
310 static struct inode_security_struct
*backing_inode_security(struct dentry
*dentry
)
312 struct inode
*inode
= d_backing_inode(dentry
);
314 __inode_security_revalidate(inode
, dentry
, true);
315 return inode
->i_security
;
318 static void inode_free_rcu(struct rcu_head
*head
)
320 struct inode_security_struct
*isec
;
322 isec
= container_of(head
, struct inode_security_struct
, rcu
);
323 kmem_cache_free(sel_inode_cache
, isec
);
326 static void inode_free_security(struct inode
*inode
)
328 struct inode_security_struct
*isec
= inode
->i_security
;
329 struct superblock_security_struct
*sbsec
= inode
->i_sb
->s_security
;
332 * As not all inode security structures are in a list, we check for
333 * empty list outside of the lock to make sure that we won't waste
334 * time taking a lock doing nothing.
336 * The list_del_init() function can be safely called more than once.
337 * It should not be possible for this function to be called with
338 * concurrent list_add(), but for better safety against future changes
339 * in the code, we use list_empty_careful() here.
341 if (!list_empty_careful(&isec
->list
)) {
342 spin_lock(&sbsec
->isec_lock
);
343 list_del_init(&isec
->list
);
344 spin_unlock(&sbsec
->isec_lock
);
348 * The inode may still be referenced in a path walk and
349 * a call to selinux_inode_permission() can be made
350 * after inode_free_security() is called. Ideally, the VFS
351 * wouldn't do this, but fixing that is a much harder
352 * job. For now, simply free the i_security via RCU, and
353 * leave the current inode->i_security pointer intact.
354 * The inode will be freed after the RCU grace period too.
356 call_rcu(&isec
->rcu
, inode_free_rcu
);
359 static int file_alloc_security(struct file
*file
)
361 struct file_security_struct
*fsec
;
362 u32 sid
= current_sid();
364 fsec
= kmem_cache_zalloc(file_security_cache
, GFP_KERNEL
);
369 fsec
->fown_sid
= sid
;
370 file
->f_security
= fsec
;
375 static void file_free_security(struct file
*file
)
377 struct file_security_struct
*fsec
= file
->f_security
;
378 file
->f_security
= NULL
;
379 kmem_cache_free(file_security_cache
, fsec
);
382 static int superblock_alloc_security(struct super_block
*sb
)
384 struct superblock_security_struct
*sbsec
;
386 sbsec
= kzalloc(sizeof(struct superblock_security_struct
), GFP_KERNEL
);
390 mutex_init(&sbsec
->lock
);
391 INIT_LIST_HEAD(&sbsec
->isec_head
);
392 spin_lock_init(&sbsec
->isec_lock
);
394 sbsec
->sid
= SECINITSID_UNLABELED
;
395 sbsec
->def_sid
= SECINITSID_FILE
;
396 sbsec
->mntpoint_sid
= SECINITSID_UNLABELED
;
397 sb
->s_security
= sbsec
;
402 static void superblock_free_security(struct super_block
*sb
)
404 struct superblock_security_struct
*sbsec
= sb
->s_security
;
405 sb
->s_security
= NULL
;
409 static inline int inode_doinit(struct inode
*inode
)
411 return inode_doinit_with_dentry(inode
, NULL
);
420 Opt_labelsupport
= 5,
424 #define NUM_SEL_MNT_OPTS (Opt_nextmntopt - 1)
426 static const match_table_t tokens
= {
427 {Opt_context
, CONTEXT_STR
"%s"},
428 {Opt_fscontext
, FSCONTEXT_STR
"%s"},
429 {Opt_defcontext
, DEFCONTEXT_STR
"%s"},
430 {Opt_rootcontext
, ROOTCONTEXT_STR
"%s"},
431 {Opt_labelsupport
, LABELSUPP_STR
},
435 #define SEL_MOUNT_FAIL_MSG "SELinux: duplicate or incompatible mount options\n"
437 static int may_context_mount_sb_relabel(u32 sid
,
438 struct superblock_security_struct
*sbsec
,
439 const struct cred
*cred
)
441 const struct task_security_struct
*tsec
= cred
->security
;
444 rc
= avc_has_perm(tsec
->sid
, sbsec
->sid
, SECCLASS_FILESYSTEM
,
445 FILESYSTEM__RELABELFROM
, NULL
);
449 rc
= avc_has_perm(tsec
->sid
, sid
, SECCLASS_FILESYSTEM
,
450 FILESYSTEM__RELABELTO
, NULL
);
454 static int may_context_mount_inode_relabel(u32 sid
,
455 struct superblock_security_struct
*sbsec
,
456 const struct cred
*cred
)
458 const struct task_security_struct
*tsec
= cred
->security
;
460 rc
= avc_has_perm(tsec
->sid
, sbsec
->sid
, SECCLASS_FILESYSTEM
,
461 FILESYSTEM__RELABELFROM
, NULL
);
465 rc
= avc_has_perm(sid
, sbsec
->sid
, SECCLASS_FILESYSTEM
,
466 FILESYSTEM__ASSOCIATE
, NULL
);
470 static int selinux_is_genfs_special_handling(struct super_block
*sb
)
472 /* Special handling. Genfs but also in-core setxattr handler */
473 return !strcmp(sb
->s_type
->name
, "sysfs") ||
474 !strcmp(sb
->s_type
->name
, "pstore") ||
475 !strcmp(sb
->s_type
->name
, "debugfs") ||
476 !strcmp(sb
->s_type
->name
, "rootfs");
479 static int selinux_is_sblabel_mnt(struct super_block
*sb
)
481 struct superblock_security_struct
*sbsec
= sb
->s_security
;
484 * IMPORTANT: Double-check logic in this function when adding a new
485 * SECURITY_FS_USE_* definition!
487 BUILD_BUG_ON(SECURITY_FS_USE_MAX
!= 7);
489 switch (sbsec
->behavior
) {
490 case SECURITY_FS_USE_XATTR
:
491 case SECURITY_FS_USE_TRANS
:
492 case SECURITY_FS_USE_TASK
:
493 case SECURITY_FS_USE_NATIVE
:
496 case SECURITY_FS_USE_GENFS
:
497 return selinux_is_genfs_special_handling(sb
);
499 /* Never allow relabeling on context mounts */
500 case SECURITY_FS_USE_MNTPOINT
:
501 case SECURITY_FS_USE_NONE
:
507 static int sb_finish_set_opts(struct super_block
*sb
)
509 struct superblock_security_struct
*sbsec
= sb
->s_security
;
510 struct dentry
*root
= sb
->s_root
;
511 struct inode
*root_inode
= d_backing_inode(root
);
514 if (sbsec
->behavior
== SECURITY_FS_USE_XATTR
) {
515 /* Make sure that the xattr handler exists and that no
516 error other than -ENODATA is returned by getxattr on
517 the root directory. -ENODATA is ok, as this may be
518 the first boot of the SELinux kernel before we have
519 assigned xattr values to the filesystem. */
520 if (!(root_inode
->i_opflags
& IOP_XATTR
)) {
521 printk(KERN_WARNING
"SELinux: (dev %s, type %s) has no "
522 "xattr support\n", sb
->s_id
, sb
->s_type
->name
);
527 rc
= __vfs_getxattr(root
, root_inode
, XATTR_NAME_SELINUX
, NULL
, 0);
528 if (rc
< 0 && rc
!= -ENODATA
) {
529 if (rc
== -EOPNOTSUPP
)
530 printk(KERN_WARNING
"SELinux: (dev %s, type "
531 "%s) has no security xattr handler\n",
532 sb
->s_id
, sb
->s_type
->name
);
534 printk(KERN_WARNING
"SELinux: (dev %s, type "
535 "%s) getxattr errno %d\n", sb
->s_id
,
536 sb
->s_type
->name
, -rc
);
541 sbsec
->flags
|= SE_SBINITIALIZED
;
542 if (selinux_is_sblabel_mnt(sb
))
543 sbsec
->flags
|= SBLABEL_MNT
;
545 /* Initialize the root inode. */
546 rc
= inode_doinit_with_dentry(root_inode
, root
);
548 /* Initialize any other inodes associated with the superblock, e.g.
549 inodes created prior to initial policy load or inodes created
550 during get_sb by a pseudo filesystem that directly
552 spin_lock(&sbsec
->isec_lock
);
554 if (!list_empty(&sbsec
->isec_head
)) {
555 struct inode_security_struct
*isec
=
556 list_entry(sbsec
->isec_head
.next
,
557 struct inode_security_struct
, list
);
558 struct inode
*inode
= isec
->inode
;
559 list_del_init(&isec
->list
);
560 spin_unlock(&sbsec
->isec_lock
);
561 inode
= igrab(inode
);
563 if (!IS_PRIVATE(inode
))
567 spin_lock(&sbsec
->isec_lock
);
570 spin_unlock(&sbsec
->isec_lock
);
576 * This function should allow an FS to ask what it's mount security
577 * options were so it can use those later for submounts, displaying
578 * mount options, or whatever.
580 static int selinux_get_mnt_opts(const struct super_block
*sb
,
581 struct security_mnt_opts
*opts
)
584 struct superblock_security_struct
*sbsec
= sb
->s_security
;
585 char *context
= NULL
;
589 security_init_mnt_opts(opts
);
591 if (!(sbsec
->flags
& SE_SBINITIALIZED
))
597 /* make sure we always check enough bits to cover the mask */
598 BUILD_BUG_ON(SE_MNTMASK
>= (1 << NUM_SEL_MNT_OPTS
));
600 tmp
= sbsec
->flags
& SE_MNTMASK
;
601 /* count the number of mount options for this sb */
602 for (i
= 0; i
< NUM_SEL_MNT_OPTS
; i
++) {
604 opts
->num_mnt_opts
++;
607 /* Check if the Label support flag is set */
608 if (sbsec
->flags
& SBLABEL_MNT
)
609 opts
->num_mnt_opts
++;
611 opts
->mnt_opts
= kcalloc(opts
->num_mnt_opts
, sizeof(char *), GFP_ATOMIC
);
612 if (!opts
->mnt_opts
) {
617 opts
->mnt_opts_flags
= kcalloc(opts
->num_mnt_opts
, sizeof(int), GFP_ATOMIC
);
618 if (!opts
->mnt_opts_flags
) {
624 if (sbsec
->flags
& FSCONTEXT_MNT
) {
625 rc
= security_sid_to_context(sbsec
->sid
, &context
, &len
);
628 opts
->mnt_opts
[i
] = context
;
629 opts
->mnt_opts_flags
[i
++] = FSCONTEXT_MNT
;
631 if (sbsec
->flags
& CONTEXT_MNT
) {
632 rc
= security_sid_to_context(sbsec
->mntpoint_sid
, &context
, &len
);
635 opts
->mnt_opts
[i
] = context
;
636 opts
->mnt_opts_flags
[i
++] = CONTEXT_MNT
;
638 if (sbsec
->flags
& DEFCONTEXT_MNT
) {
639 rc
= security_sid_to_context(sbsec
->def_sid
, &context
, &len
);
642 opts
->mnt_opts
[i
] = context
;
643 opts
->mnt_opts_flags
[i
++] = DEFCONTEXT_MNT
;
645 if (sbsec
->flags
& ROOTCONTEXT_MNT
) {
646 struct dentry
*root
= sbsec
->sb
->s_root
;
647 struct inode_security_struct
*isec
= backing_inode_security(root
);
649 rc
= security_sid_to_context(isec
->sid
, &context
, &len
);
652 opts
->mnt_opts
[i
] = context
;
653 opts
->mnt_opts_flags
[i
++] = ROOTCONTEXT_MNT
;
655 if (sbsec
->flags
& SBLABEL_MNT
) {
656 opts
->mnt_opts
[i
] = NULL
;
657 opts
->mnt_opts_flags
[i
++] = SBLABEL_MNT
;
660 BUG_ON(i
!= opts
->num_mnt_opts
);
665 security_free_mnt_opts(opts
);
669 static int bad_option(struct superblock_security_struct
*sbsec
, char flag
,
670 u32 old_sid
, u32 new_sid
)
672 char mnt_flags
= sbsec
->flags
& SE_MNTMASK
;
674 /* check if the old mount command had the same options */
675 if (sbsec
->flags
& SE_SBINITIALIZED
)
676 if (!(sbsec
->flags
& flag
) ||
677 (old_sid
!= new_sid
))
680 /* check if we were passed the same options twice,
681 * aka someone passed context=a,context=b
683 if (!(sbsec
->flags
& SE_SBINITIALIZED
))
684 if (mnt_flags
& flag
)
690 * Allow filesystems with binary mount data to explicitly set mount point
691 * labeling information.
693 static int selinux_set_mnt_opts(struct super_block
*sb
,
694 struct security_mnt_opts
*opts
,
695 unsigned long kern_flags
,
696 unsigned long *set_kern_flags
)
698 const struct cred
*cred
= current_cred();
700 struct superblock_security_struct
*sbsec
= sb
->s_security
;
701 const char *name
= sb
->s_type
->name
;
702 struct dentry
*root
= sbsec
->sb
->s_root
;
703 struct inode_security_struct
*root_isec
;
704 u32 fscontext_sid
= 0, context_sid
= 0, rootcontext_sid
= 0;
705 u32 defcontext_sid
= 0;
706 char **mount_options
= opts
->mnt_opts
;
707 int *flags
= opts
->mnt_opts_flags
;
708 int num_opts
= opts
->num_mnt_opts
;
710 mutex_lock(&sbsec
->lock
);
712 if (!ss_initialized
) {
714 /* Defer initialization until selinux_complete_init,
715 after the initial policy is loaded and the security
716 server is ready to handle calls. */
720 printk(KERN_WARNING
"SELinux: Unable to set superblock options "
721 "before the security server is initialized\n");
724 if (kern_flags
&& !set_kern_flags
) {
725 /* Specifying internal flags without providing a place to
726 * place the results is not allowed */
732 * Binary mount data FS will come through this function twice. Once
733 * from an explicit call and once from the generic calls from the vfs.
734 * Since the generic VFS calls will not contain any security mount data
735 * we need to skip the double mount verification.
737 * This does open a hole in which we will not notice if the first
738 * mount using this sb set explict options and a second mount using
739 * this sb does not set any security options. (The first options
740 * will be used for both mounts)
742 if ((sbsec
->flags
& SE_SBINITIALIZED
) && (sb
->s_type
->fs_flags
& FS_BINARY_MOUNTDATA
)
746 root_isec
= backing_inode_security_novalidate(root
);
749 * parse the mount options, check if they are valid sids.
750 * also check if someone is trying to mount the same sb more
751 * than once with different security options.
753 for (i
= 0; i
< num_opts
; i
++) {
756 if (flags
[i
] == SBLABEL_MNT
)
758 rc
= security_context_str_to_sid(mount_options
[i
], &sid
, GFP_KERNEL
);
760 printk(KERN_WARNING
"SELinux: security_context_str_to_sid"
761 "(%s) failed for (dev %s, type %s) errno=%d\n",
762 mount_options
[i
], sb
->s_id
, name
, rc
);
769 if (bad_option(sbsec
, FSCONTEXT_MNT
, sbsec
->sid
,
771 goto out_double_mount
;
773 sbsec
->flags
|= FSCONTEXT_MNT
;
778 if (bad_option(sbsec
, CONTEXT_MNT
, sbsec
->mntpoint_sid
,
780 goto out_double_mount
;
782 sbsec
->flags
|= CONTEXT_MNT
;
784 case ROOTCONTEXT_MNT
:
785 rootcontext_sid
= sid
;
787 if (bad_option(sbsec
, ROOTCONTEXT_MNT
, root_isec
->sid
,
789 goto out_double_mount
;
791 sbsec
->flags
|= ROOTCONTEXT_MNT
;
795 defcontext_sid
= sid
;
797 if (bad_option(sbsec
, DEFCONTEXT_MNT
, sbsec
->def_sid
,
799 goto out_double_mount
;
801 sbsec
->flags
|= DEFCONTEXT_MNT
;
810 if (sbsec
->flags
& SE_SBINITIALIZED
) {
811 /* previously mounted with options, but not on this attempt? */
812 if ((sbsec
->flags
& SE_MNTMASK
) && !num_opts
)
813 goto out_double_mount
;
818 if (strcmp(sb
->s_type
->name
, "proc") == 0)
819 sbsec
->flags
|= SE_SBPROC
| SE_SBGENFS
;
821 if (!strcmp(sb
->s_type
->name
, "debugfs") ||
822 !strcmp(sb
->s_type
->name
, "sysfs") ||
823 !strcmp(sb
->s_type
->name
, "pstore"))
824 sbsec
->flags
|= SE_SBGENFS
;
826 if (!sbsec
->behavior
) {
828 * Determine the labeling behavior to use for this
831 rc
= security_fs_use(sb
);
834 "%s: security_fs_use(%s) returned %d\n",
835 __func__
, sb
->s_type
->name
, rc
);
841 * If this is a user namespace mount, no contexts are allowed
842 * on the command line and security labels must be ignored.
844 if (sb
->s_user_ns
!= &init_user_ns
) {
845 if (context_sid
|| fscontext_sid
|| rootcontext_sid
||
850 if (sbsec
->behavior
== SECURITY_FS_USE_XATTR
) {
851 sbsec
->behavior
= SECURITY_FS_USE_MNTPOINT
;
852 rc
= security_transition_sid(current_sid(), current_sid(),
854 &sbsec
->mntpoint_sid
);
861 /* sets the context of the superblock for the fs being mounted. */
863 rc
= may_context_mount_sb_relabel(fscontext_sid
, sbsec
, cred
);
867 sbsec
->sid
= fscontext_sid
;
871 * Switch to using mount point labeling behavior.
872 * sets the label used on all file below the mountpoint, and will set
873 * the superblock context if not already set.
875 if (kern_flags
& SECURITY_LSM_NATIVE_LABELS
&& !context_sid
) {
876 sbsec
->behavior
= SECURITY_FS_USE_NATIVE
;
877 *set_kern_flags
|= SECURITY_LSM_NATIVE_LABELS
;
881 if (!fscontext_sid
) {
882 rc
= may_context_mount_sb_relabel(context_sid
, sbsec
,
886 sbsec
->sid
= context_sid
;
888 rc
= may_context_mount_inode_relabel(context_sid
, sbsec
,
893 if (!rootcontext_sid
)
894 rootcontext_sid
= context_sid
;
896 sbsec
->mntpoint_sid
= context_sid
;
897 sbsec
->behavior
= SECURITY_FS_USE_MNTPOINT
;
900 if (rootcontext_sid
) {
901 rc
= may_context_mount_inode_relabel(rootcontext_sid
, sbsec
,
906 root_isec
->sid
= rootcontext_sid
;
907 root_isec
->initialized
= LABEL_INITIALIZED
;
910 if (defcontext_sid
) {
911 if (sbsec
->behavior
!= SECURITY_FS_USE_XATTR
&&
912 sbsec
->behavior
!= SECURITY_FS_USE_NATIVE
) {
914 printk(KERN_WARNING
"SELinux: defcontext option is "
915 "invalid for this filesystem type\n");
919 if (defcontext_sid
!= sbsec
->def_sid
) {
920 rc
= may_context_mount_inode_relabel(defcontext_sid
,
926 sbsec
->def_sid
= defcontext_sid
;
930 rc
= sb_finish_set_opts(sb
);
932 mutex_unlock(&sbsec
->lock
);
936 printk(KERN_WARNING
"SELinux: mount invalid. Same superblock, different "
937 "security settings for (dev %s, type %s)\n", sb
->s_id
, name
);
941 static int selinux_cmp_sb_context(const struct super_block
*oldsb
,
942 const struct super_block
*newsb
)
944 struct superblock_security_struct
*old
= oldsb
->s_security
;
945 struct superblock_security_struct
*new = newsb
->s_security
;
946 char oldflags
= old
->flags
& SE_MNTMASK
;
947 char newflags
= new->flags
& SE_MNTMASK
;
949 if (oldflags
!= newflags
)
951 if ((oldflags
& FSCONTEXT_MNT
) && old
->sid
!= new->sid
)
953 if ((oldflags
& CONTEXT_MNT
) && old
->mntpoint_sid
!= new->mntpoint_sid
)
955 if ((oldflags
& DEFCONTEXT_MNT
) && old
->def_sid
!= new->def_sid
)
957 if (oldflags
& ROOTCONTEXT_MNT
) {
958 struct inode_security_struct
*oldroot
= backing_inode_security(oldsb
->s_root
);
959 struct inode_security_struct
*newroot
= backing_inode_security(newsb
->s_root
);
960 if (oldroot
->sid
!= newroot
->sid
)
965 printk(KERN_WARNING
"SELinux: mount invalid. Same superblock, "
966 "different security settings for (dev %s, "
967 "type %s)\n", newsb
->s_id
, newsb
->s_type
->name
);
971 static int selinux_sb_clone_mnt_opts(const struct super_block
*oldsb
,
972 struct super_block
*newsb
)
974 const struct superblock_security_struct
*oldsbsec
= oldsb
->s_security
;
975 struct superblock_security_struct
*newsbsec
= newsb
->s_security
;
977 int set_fscontext
= (oldsbsec
->flags
& FSCONTEXT_MNT
);
978 int set_context
= (oldsbsec
->flags
& CONTEXT_MNT
);
979 int set_rootcontext
= (oldsbsec
->flags
& ROOTCONTEXT_MNT
);
982 * if the parent was able to be mounted it clearly had no special lsm
983 * mount options. thus we can safely deal with this superblock later
988 /* how can we clone if the old one wasn't set up?? */
989 BUG_ON(!(oldsbsec
->flags
& SE_SBINITIALIZED
));
991 /* if fs is reusing a sb, make sure that the contexts match */
992 if (newsbsec
->flags
& SE_SBINITIALIZED
)
993 return selinux_cmp_sb_context(oldsb
, newsb
);
995 mutex_lock(&newsbsec
->lock
);
997 newsbsec
->flags
= oldsbsec
->flags
;
999 newsbsec
->sid
= oldsbsec
->sid
;
1000 newsbsec
->def_sid
= oldsbsec
->def_sid
;
1001 newsbsec
->behavior
= oldsbsec
->behavior
;
1004 u32 sid
= oldsbsec
->mntpoint_sid
;
1007 newsbsec
->sid
= sid
;
1008 if (!set_rootcontext
) {
1009 struct inode_security_struct
*newisec
= backing_inode_security(newsb
->s_root
);
1012 newsbsec
->mntpoint_sid
= sid
;
1014 if (set_rootcontext
) {
1015 const struct inode_security_struct
*oldisec
= backing_inode_security(oldsb
->s_root
);
1016 struct inode_security_struct
*newisec
= backing_inode_security(newsb
->s_root
);
1018 newisec
->sid
= oldisec
->sid
;
1021 sb_finish_set_opts(newsb
);
1022 mutex_unlock(&newsbsec
->lock
);
1026 static int selinux_parse_opts_str(char *options
,
1027 struct security_mnt_opts
*opts
)
1030 char *context
= NULL
, *defcontext
= NULL
;
1031 char *fscontext
= NULL
, *rootcontext
= NULL
;
1032 int rc
, num_mnt_opts
= 0;
1034 opts
->num_mnt_opts
= 0;
1036 /* Standard string-based options. */
1037 while ((p
= strsep(&options
, "|")) != NULL
) {
1039 substring_t args
[MAX_OPT_ARGS
];
1044 token
= match_token(p
, tokens
, args
);
1048 if (context
|| defcontext
) {
1050 printk(KERN_WARNING SEL_MOUNT_FAIL_MSG
);
1053 context
= match_strdup(&args
[0]);
1063 printk(KERN_WARNING SEL_MOUNT_FAIL_MSG
);
1066 fscontext
= match_strdup(&args
[0]);
1073 case Opt_rootcontext
:
1076 printk(KERN_WARNING SEL_MOUNT_FAIL_MSG
);
1079 rootcontext
= match_strdup(&args
[0]);
1086 case Opt_defcontext
:
1087 if (context
|| defcontext
) {
1089 printk(KERN_WARNING SEL_MOUNT_FAIL_MSG
);
1092 defcontext
= match_strdup(&args
[0]);
1098 case Opt_labelsupport
:
1102 printk(KERN_WARNING
"SELinux: unknown mount option\n");
1109 opts
->mnt_opts
= kcalloc(NUM_SEL_MNT_OPTS
, sizeof(char *), GFP_ATOMIC
);
1110 if (!opts
->mnt_opts
)
1113 opts
->mnt_opts_flags
= kcalloc(NUM_SEL_MNT_OPTS
, sizeof(int), GFP_ATOMIC
);
1114 if (!opts
->mnt_opts_flags
) {
1115 kfree(opts
->mnt_opts
);
1120 opts
->mnt_opts
[num_mnt_opts
] = fscontext
;
1121 opts
->mnt_opts_flags
[num_mnt_opts
++] = FSCONTEXT_MNT
;
1124 opts
->mnt_opts
[num_mnt_opts
] = context
;
1125 opts
->mnt_opts_flags
[num_mnt_opts
++] = CONTEXT_MNT
;
1128 opts
->mnt_opts
[num_mnt_opts
] = rootcontext
;
1129 opts
->mnt_opts_flags
[num_mnt_opts
++] = ROOTCONTEXT_MNT
;
1132 opts
->mnt_opts
[num_mnt_opts
] = defcontext
;
1133 opts
->mnt_opts_flags
[num_mnt_opts
++] = DEFCONTEXT_MNT
;
1136 opts
->num_mnt_opts
= num_mnt_opts
;
1147 * string mount options parsing and call set the sbsec
1149 static int superblock_doinit(struct super_block
*sb
, void *data
)
1152 char *options
= data
;
1153 struct security_mnt_opts opts
;
1155 security_init_mnt_opts(&opts
);
1160 BUG_ON(sb
->s_type
->fs_flags
& FS_BINARY_MOUNTDATA
);
1162 rc
= selinux_parse_opts_str(options
, &opts
);
1167 rc
= selinux_set_mnt_opts(sb
, &opts
, 0, NULL
);
1170 security_free_mnt_opts(&opts
);
1174 static void selinux_write_opts(struct seq_file
*m
,
1175 struct security_mnt_opts
*opts
)
1180 for (i
= 0; i
< opts
->num_mnt_opts
; i
++) {
1183 if (opts
->mnt_opts
[i
])
1184 has_comma
= strchr(opts
->mnt_opts
[i
], ',');
1188 switch (opts
->mnt_opts_flags
[i
]) {
1190 prefix
= CONTEXT_STR
;
1193 prefix
= FSCONTEXT_STR
;
1195 case ROOTCONTEXT_MNT
:
1196 prefix
= ROOTCONTEXT_STR
;
1198 case DEFCONTEXT_MNT
:
1199 prefix
= DEFCONTEXT_STR
;
1203 seq_puts(m
, LABELSUPP_STR
);
1209 /* we need a comma before each option */
1211 seq_puts(m
, prefix
);
1214 seq_escape(m
, opts
->mnt_opts
[i
], "\"\n\\");
1220 static int selinux_sb_show_options(struct seq_file
*m
, struct super_block
*sb
)
1222 struct security_mnt_opts opts
;
1225 rc
= selinux_get_mnt_opts(sb
, &opts
);
1227 /* before policy load we may get EINVAL, don't show anything */
1233 selinux_write_opts(m
, &opts
);
1235 security_free_mnt_opts(&opts
);
1240 static inline u16
inode_mode_to_security_class(umode_t mode
)
1242 switch (mode
& S_IFMT
) {
1244 return SECCLASS_SOCK_FILE
;
1246 return SECCLASS_LNK_FILE
;
1248 return SECCLASS_FILE
;
1250 return SECCLASS_BLK_FILE
;
1252 return SECCLASS_DIR
;
1254 return SECCLASS_CHR_FILE
;
1256 return SECCLASS_FIFO_FILE
;
1260 return SECCLASS_FILE
;
1263 static inline int default_protocol_stream(int protocol
)
1265 return (protocol
== IPPROTO_IP
|| protocol
== IPPROTO_TCP
);
1268 static inline int default_protocol_dgram(int protocol
)
1270 return (protocol
== IPPROTO_IP
|| protocol
== IPPROTO_UDP
);
1273 static inline u16
socket_type_to_security_class(int family
, int type
, int protocol
)
1279 case SOCK_SEQPACKET
:
1280 return SECCLASS_UNIX_STREAM_SOCKET
;
1282 return SECCLASS_UNIX_DGRAM_SOCKET
;
1289 if (default_protocol_stream(protocol
))
1290 return SECCLASS_TCP_SOCKET
;
1292 return SECCLASS_RAWIP_SOCKET
;
1294 if (default_protocol_dgram(protocol
))
1295 return SECCLASS_UDP_SOCKET
;
1297 return SECCLASS_RAWIP_SOCKET
;
1299 return SECCLASS_DCCP_SOCKET
;
1301 return SECCLASS_RAWIP_SOCKET
;
1307 return SECCLASS_NETLINK_ROUTE_SOCKET
;
1308 case NETLINK_SOCK_DIAG
:
1309 return SECCLASS_NETLINK_TCPDIAG_SOCKET
;
1311 return SECCLASS_NETLINK_NFLOG_SOCKET
;
1313 return SECCLASS_NETLINK_XFRM_SOCKET
;
1314 case NETLINK_SELINUX
:
1315 return SECCLASS_NETLINK_SELINUX_SOCKET
;
1317 return SECCLASS_NETLINK_ISCSI_SOCKET
;
1319 return SECCLASS_NETLINK_AUDIT_SOCKET
;
1320 case NETLINK_FIB_LOOKUP
:
1321 return SECCLASS_NETLINK_FIB_LOOKUP_SOCKET
;
1322 case NETLINK_CONNECTOR
:
1323 return SECCLASS_NETLINK_CONNECTOR_SOCKET
;
1324 case NETLINK_NETFILTER
:
1325 return SECCLASS_NETLINK_NETFILTER_SOCKET
;
1326 case NETLINK_DNRTMSG
:
1327 return SECCLASS_NETLINK_DNRT_SOCKET
;
1328 case NETLINK_KOBJECT_UEVENT
:
1329 return SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET
;
1330 case NETLINK_GENERIC
:
1331 return SECCLASS_NETLINK_GENERIC_SOCKET
;
1332 case NETLINK_SCSITRANSPORT
:
1333 return SECCLASS_NETLINK_SCSITRANSPORT_SOCKET
;
1335 return SECCLASS_NETLINK_RDMA_SOCKET
;
1336 case NETLINK_CRYPTO
:
1337 return SECCLASS_NETLINK_CRYPTO_SOCKET
;
1339 return SECCLASS_NETLINK_SOCKET
;
1342 return SECCLASS_PACKET_SOCKET
;
1344 return SECCLASS_KEY_SOCKET
;
1346 return SECCLASS_APPLETALK_SOCKET
;
1349 return SECCLASS_SOCKET
;
1352 static int selinux_genfs_get_sid(struct dentry
*dentry
,
1358 struct super_block
*sb
= dentry
->d_sb
;
1359 char *buffer
, *path
;
1361 buffer
= (char *)__get_free_page(GFP_KERNEL
);
1365 path
= dentry_path_raw(dentry
, buffer
, PAGE_SIZE
);
1369 if (flags
& SE_SBPROC
) {
1370 /* each process gets a /proc/PID/ entry. Strip off the
1371 * PID part to get a valid selinux labeling.
1372 * e.g. /proc/1/net/rpc/nfs -> /net/rpc/nfs */
1373 while (path
[1] >= '0' && path
[1] <= '9') {
1378 rc
= security_genfs_sid(sb
->s_type
->name
, path
, tclass
, sid
);
1380 free_page((unsigned long)buffer
);
1384 /* The inode's security attributes must be initialized before first use. */
1385 static int inode_doinit_with_dentry(struct inode
*inode
, struct dentry
*opt_dentry
)
1387 struct superblock_security_struct
*sbsec
= NULL
;
1388 struct inode_security_struct
*isec
= inode
->i_security
;
1390 struct dentry
*dentry
;
1391 #define INITCONTEXTLEN 255
1392 char *context
= NULL
;
1396 if (isec
->initialized
== LABEL_INITIALIZED
)
1399 mutex_lock(&isec
->lock
);
1400 if (isec
->initialized
== LABEL_INITIALIZED
)
1403 sbsec
= inode
->i_sb
->s_security
;
1404 if (!(sbsec
->flags
& SE_SBINITIALIZED
)) {
1405 /* Defer initialization until selinux_complete_init,
1406 after the initial policy is loaded and the security
1407 server is ready to handle calls. */
1408 spin_lock(&sbsec
->isec_lock
);
1409 if (list_empty(&isec
->list
))
1410 list_add(&isec
->list
, &sbsec
->isec_head
);
1411 spin_unlock(&sbsec
->isec_lock
);
1415 switch (sbsec
->behavior
) {
1416 case SECURITY_FS_USE_NATIVE
:
1418 case SECURITY_FS_USE_XATTR
:
1419 if (!(inode
->i_opflags
& IOP_XATTR
)) {
1420 isec
->sid
= sbsec
->def_sid
;
1423 /* Need a dentry, since the xattr API requires one.
1424 Life would be simpler if we could just pass the inode. */
1426 /* Called from d_instantiate or d_splice_alias. */
1427 dentry
= dget(opt_dentry
);
1429 /* Called from selinux_complete_init, try to find a dentry. */
1430 dentry
= d_find_alias(inode
);
1434 * this is can be hit on boot when a file is accessed
1435 * before the policy is loaded. When we load policy we
1436 * may find inodes that have no dentry on the
1437 * sbsec->isec_head list. No reason to complain as these
1438 * will get fixed up the next time we go through
1439 * inode_doinit with a dentry, before these inodes could
1440 * be used again by userspace.
1445 len
= INITCONTEXTLEN
;
1446 context
= kmalloc(len
+1, GFP_NOFS
);
1452 context
[len
] = '\0';
1453 rc
= __vfs_getxattr(dentry
, inode
, XATTR_NAME_SELINUX
, context
, len
);
1454 if (rc
== -ERANGE
) {
1457 /* Need a larger buffer. Query for the right size. */
1458 rc
= __vfs_getxattr(dentry
, inode
, XATTR_NAME_SELINUX
, NULL
, 0);
1464 context
= kmalloc(len
+1, GFP_NOFS
);
1470 context
[len
] = '\0';
1471 rc
= __vfs_getxattr(dentry
, inode
, XATTR_NAME_SELINUX
, context
, len
);
1475 if (rc
!= -ENODATA
) {
1476 printk(KERN_WARNING
"SELinux: %s: getxattr returned "
1477 "%d for dev=%s ino=%ld\n", __func__
,
1478 -rc
, inode
->i_sb
->s_id
, inode
->i_ino
);
1482 /* Map ENODATA to the default file SID */
1483 sid
= sbsec
->def_sid
;
1486 rc
= security_context_to_sid_default(context
, rc
, &sid
,
1490 char *dev
= inode
->i_sb
->s_id
;
1491 unsigned long ino
= inode
->i_ino
;
1493 if (rc
== -EINVAL
) {
1494 if (printk_ratelimit())
1495 printk(KERN_NOTICE
"SELinux: inode=%lu on dev=%s was found to have an invalid "
1496 "context=%s. This indicates you may need to relabel the inode or the "
1497 "filesystem in question.\n", ino
, dev
, context
);
1499 printk(KERN_WARNING
"SELinux: %s: context_to_sid(%s) "
1500 "returned %d for dev=%s ino=%ld\n",
1501 __func__
, context
, -rc
, dev
, ino
);
1504 /* Leave with the unlabeled SID */
1512 case SECURITY_FS_USE_TASK
:
1513 isec
->sid
= isec
->task_sid
;
1515 case SECURITY_FS_USE_TRANS
:
1516 /* Default to the fs SID. */
1517 isec
->sid
= sbsec
->sid
;
1519 /* Try to obtain a transition SID. */
1520 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
1521 rc
= security_transition_sid(isec
->task_sid
, sbsec
->sid
,
1522 isec
->sclass
, NULL
, &sid
);
1527 case SECURITY_FS_USE_MNTPOINT
:
1528 isec
->sid
= sbsec
->mntpoint_sid
;
1531 /* Default to the fs superblock SID. */
1532 isec
->sid
= sbsec
->sid
;
1534 if ((sbsec
->flags
& SE_SBGENFS
) && !S_ISLNK(inode
->i_mode
)) {
1535 /* We must have a dentry to determine the label on
1538 /* Called from d_instantiate or
1539 * d_splice_alias. */
1540 dentry
= dget(opt_dentry
);
1542 /* Called from selinux_complete_init, try to
1544 dentry
= d_find_alias(inode
);
1546 * This can be hit on boot when a file is accessed
1547 * before the policy is loaded. When we load policy we
1548 * may find inodes that have no dentry on the
1549 * sbsec->isec_head list. No reason to complain as
1550 * these will get fixed up the next time we go through
1551 * inode_doinit() with a dentry, before these inodes
1552 * could be used again by userspace.
1556 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
1557 rc
= selinux_genfs_get_sid(dentry
, isec
->sclass
,
1558 sbsec
->flags
, &sid
);
1567 isec
->initialized
= LABEL_INITIALIZED
;
1570 mutex_unlock(&isec
->lock
);
1572 if (isec
->sclass
== SECCLASS_FILE
)
1573 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
1577 /* Convert a Linux signal to an access vector. */
1578 static inline u32
signal_to_av(int sig
)
1584 /* Commonly granted from child to parent. */
1585 perm
= PROCESS__SIGCHLD
;
1588 /* Cannot be caught or ignored */
1589 perm
= PROCESS__SIGKILL
;
1592 /* Cannot be caught or ignored */
1593 perm
= PROCESS__SIGSTOP
;
1596 /* All other signals. */
1597 perm
= PROCESS__SIGNAL
;
1605 * Check permission between a pair of credentials
1606 * fork check, ptrace check, etc.
1608 static int cred_has_perm(const struct cred
*actor
,
1609 const struct cred
*target
,
1612 u32 asid
= cred_sid(actor
), tsid
= cred_sid(target
);
1614 return avc_has_perm(asid
, tsid
, SECCLASS_PROCESS
, perms
, NULL
);
1618 * Check permission between a pair of tasks, e.g. signal checks,
1619 * fork check, ptrace check, etc.
1620 * tsk1 is the actor and tsk2 is the target
1621 * - this uses the default subjective creds of tsk1
1623 static int task_has_perm(const struct task_struct
*tsk1
,
1624 const struct task_struct
*tsk2
,
1627 const struct task_security_struct
*__tsec1
, *__tsec2
;
1631 __tsec1
= __task_cred(tsk1
)->security
; sid1
= __tsec1
->sid
;
1632 __tsec2
= __task_cred(tsk2
)->security
; sid2
= __tsec2
->sid
;
1634 return avc_has_perm(sid1
, sid2
, SECCLASS_PROCESS
, perms
, NULL
);
1638 * Check permission between current and another task, e.g. signal checks,
1639 * fork check, ptrace check, etc.
1640 * current is the actor and tsk2 is the target
1641 * - this uses current's subjective creds
1643 static int current_has_perm(const struct task_struct
*tsk
,
1648 sid
= current_sid();
1649 tsid
= task_sid(tsk
);
1650 return avc_has_perm(sid
, tsid
, SECCLASS_PROCESS
, perms
, NULL
);
1653 #if CAP_LAST_CAP > 63
1654 #error Fix SELinux to handle capabilities > 63.
1657 /* Check whether a task is allowed to use a capability. */
1658 static int cred_has_capability(const struct cred
*cred
,
1659 int cap
, int audit
, bool initns
)
1661 struct common_audit_data ad
;
1662 struct av_decision avd
;
1664 u32 sid
= cred_sid(cred
);
1665 u32 av
= CAP_TO_MASK(cap
);
1668 ad
.type
= LSM_AUDIT_DATA_CAP
;
1671 switch (CAP_TO_INDEX(cap
)) {
1673 sclass
= initns
? SECCLASS_CAPABILITY
: SECCLASS_CAP_USERNS
;
1676 sclass
= initns
? SECCLASS_CAPABILITY2
: SECCLASS_CAP2_USERNS
;
1680 "SELinux: out of range capability %d\n", cap
);
1685 rc
= avc_has_perm_noaudit(sid
, sid
, sclass
, av
, 0, &avd
);
1686 if (audit
== SECURITY_CAP_AUDIT
) {
1687 int rc2
= avc_audit(sid
, sid
, sclass
, av
, &avd
, rc
, &ad
, 0);
1694 /* Check whether a task is allowed to use a system operation. */
1695 static int task_has_system(struct task_struct
*tsk
,
1698 u32 sid
= task_sid(tsk
);
1700 return avc_has_perm(sid
, SECINITSID_KERNEL
,
1701 SECCLASS_SYSTEM
, perms
, NULL
);
1704 /* Check whether a task has a particular permission to an inode.
1705 The 'adp' parameter is optional and allows other audit
1706 data to be passed (e.g. the dentry). */
1707 static int inode_has_perm(const struct cred
*cred
,
1708 struct inode
*inode
,
1710 struct common_audit_data
*adp
)
1712 struct inode_security_struct
*isec
;
1715 validate_creds(cred
);
1717 if (unlikely(IS_PRIVATE(inode
)))
1720 sid
= cred_sid(cred
);
1721 isec
= inode
->i_security
;
1723 return avc_has_perm(sid
, isec
->sid
, isec
->sclass
, perms
, adp
);
1726 /* Same as inode_has_perm, but pass explicit audit data containing
1727 the dentry to help the auditing code to more easily generate the
1728 pathname if needed. */
1729 static inline int dentry_has_perm(const struct cred
*cred
,
1730 struct dentry
*dentry
,
1733 struct inode
*inode
= d_backing_inode(dentry
);
1734 struct common_audit_data ad
;
1736 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
1737 ad
.u
.dentry
= dentry
;
1738 __inode_security_revalidate(inode
, dentry
, true);
1739 return inode_has_perm(cred
, inode
, av
, &ad
);
1742 /* Same as inode_has_perm, but pass explicit audit data containing
1743 the path to help the auditing code to more easily generate the
1744 pathname if needed. */
1745 static inline int path_has_perm(const struct cred
*cred
,
1746 const struct path
*path
,
1749 struct inode
*inode
= d_backing_inode(path
->dentry
);
1750 struct common_audit_data ad
;
1752 ad
.type
= LSM_AUDIT_DATA_PATH
;
1754 __inode_security_revalidate(inode
, path
->dentry
, true);
1755 return inode_has_perm(cred
, inode
, av
, &ad
);
1758 /* Same as path_has_perm, but uses the inode from the file struct. */
1759 static inline int file_path_has_perm(const struct cred
*cred
,
1763 struct common_audit_data ad
;
1765 ad
.type
= LSM_AUDIT_DATA_FILE
;
1767 return inode_has_perm(cred
, file_inode(file
), av
, &ad
);
1770 /* Check whether a task can use an open file descriptor to
1771 access an inode in a given way. Check access to the
1772 descriptor itself, and then use dentry_has_perm to
1773 check a particular permission to the file.
1774 Access to the descriptor is implicitly granted if it
1775 has the same SID as the process. If av is zero, then
1776 access to the file is not checked, e.g. for cases
1777 where only the descriptor is affected like seek. */
1778 static int file_has_perm(const struct cred
*cred
,
1782 struct file_security_struct
*fsec
= file
->f_security
;
1783 struct inode
*inode
= file_inode(file
);
1784 struct common_audit_data ad
;
1785 u32 sid
= cred_sid(cred
);
1788 ad
.type
= LSM_AUDIT_DATA_FILE
;
1791 if (sid
!= fsec
->sid
) {
1792 rc
= avc_has_perm(sid
, fsec
->sid
,
1800 /* av is zero if only checking access to the descriptor. */
1803 rc
= inode_has_perm(cred
, inode
, av
, &ad
);
1810 * Determine the label for an inode that might be unioned.
1813 selinux_determine_inode_label(const struct task_security_struct
*tsec
,
1815 const struct qstr
*name
, u16 tclass
,
1818 const struct superblock_security_struct
*sbsec
= dir
->i_sb
->s_security
;
1820 if ((sbsec
->flags
& SE_SBINITIALIZED
) &&
1821 (sbsec
->behavior
== SECURITY_FS_USE_MNTPOINT
)) {
1822 *_new_isid
= sbsec
->mntpoint_sid
;
1823 } else if ((sbsec
->flags
& SBLABEL_MNT
) &&
1825 *_new_isid
= tsec
->create_sid
;
1827 const struct inode_security_struct
*dsec
= inode_security(dir
);
1828 return security_transition_sid(tsec
->sid
, dsec
->sid
, tclass
,
1835 /* Check whether a task can create a file. */
1836 static int may_create(struct inode
*dir
,
1837 struct dentry
*dentry
,
1840 const struct task_security_struct
*tsec
= current_security();
1841 struct inode_security_struct
*dsec
;
1842 struct superblock_security_struct
*sbsec
;
1844 struct common_audit_data ad
;
1847 dsec
= inode_security(dir
);
1848 sbsec
= dir
->i_sb
->s_security
;
1852 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
1853 ad
.u
.dentry
= dentry
;
1855 rc
= avc_has_perm(sid
, dsec
->sid
, SECCLASS_DIR
,
1856 DIR__ADD_NAME
| DIR__SEARCH
,
1861 rc
= selinux_determine_inode_label(current_security(), dir
,
1862 &dentry
->d_name
, tclass
, &newsid
);
1866 rc
= avc_has_perm(sid
, newsid
, tclass
, FILE__CREATE
, &ad
);
1870 return avc_has_perm(newsid
, sbsec
->sid
,
1871 SECCLASS_FILESYSTEM
,
1872 FILESYSTEM__ASSOCIATE
, &ad
);
1875 /* Check whether a task can create a key. */
1876 static int may_create_key(u32 ksid
,
1877 struct task_struct
*ctx
)
1879 u32 sid
= task_sid(ctx
);
1881 return avc_has_perm(sid
, ksid
, SECCLASS_KEY
, KEY__CREATE
, NULL
);
1885 #define MAY_UNLINK 1
1888 /* Check whether a task can link, unlink, or rmdir a file/directory. */
1889 static int may_link(struct inode
*dir
,
1890 struct dentry
*dentry
,
1894 struct inode_security_struct
*dsec
, *isec
;
1895 struct common_audit_data ad
;
1896 u32 sid
= current_sid();
1900 dsec
= inode_security(dir
);
1901 isec
= backing_inode_security(dentry
);
1903 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
1904 ad
.u
.dentry
= dentry
;
1907 av
|= (kind
? DIR__REMOVE_NAME
: DIR__ADD_NAME
);
1908 rc
= avc_has_perm(sid
, dsec
->sid
, SECCLASS_DIR
, av
, &ad
);
1923 printk(KERN_WARNING
"SELinux: %s: unrecognized kind %d\n",
1928 rc
= avc_has_perm(sid
, isec
->sid
, isec
->sclass
, av
, &ad
);
1932 static inline int may_rename(struct inode
*old_dir
,
1933 struct dentry
*old_dentry
,
1934 struct inode
*new_dir
,
1935 struct dentry
*new_dentry
)
1937 struct inode_security_struct
*old_dsec
, *new_dsec
, *old_isec
, *new_isec
;
1938 struct common_audit_data ad
;
1939 u32 sid
= current_sid();
1941 int old_is_dir
, new_is_dir
;
1944 old_dsec
= inode_security(old_dir
);
1945 old_isec
= backing_inode_security(old_dentry
);
1946 old_is_dir
= d_is_dir(old_dentry
);
1947 new_dsec
= inode_security(new_dir
);
1949 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
1951 ad
.u
.dentry
= old_dentry
;
1952 rc
= avc_has_perm(sid
, old_dsec
->sid
, SECCLASS_DIR
,
1953 DIR__REMOVE_NAME
| DIR__SEARCH
, &ad
);
1956 rc
= avc_has_perm(sid
, old_isec
->sid
,
1957 old_isec
->sclass
, FILE__RENAME
, &ad
);
1960 if (old_is_dir
&& new_dir
!= old_dir
) {
1961 rc
= avc_has_perm(sid
, old_isec
->sid
,
1962 old_isec
->sclass
, DIR__REPARENT
, &ad
);
1967 ad
.u
.dentry
= new_dentry
;
1968 av
= DIR__ADD_NAME
| DIR__SEARCH
;
1969 if (d_is_positive(new_dentry
))
1970 av
|= DIR__REMOVE_NAME
;
1971 rc
= avc_has_perm(sid
, new_dsec
->sid
, SECCLASS_DIR
, av
, &ad
);
1974 if (d_is_positive(new_dentry
)) {
1975 new_isec
= backing_inode_security(new_dentry
);
1976 new_is_dir
= d_is_dir(new_dentry
);
1977 rc
= avc_has_perm(sid
, new_isec
->sid
,
1979 (new_is_dir
? DIR__RMDIR
: FILE__UNLINK
), &ad
);
1987 /* Check whether a task can perform a filesystem operation. */
1988 static int superblock_has_perm(const struct cred
*cred
,
1989 struct super_block
*sb
,
1991 struct common_audit_data
*ad
)
1993 struct superblock_security_struct
*sbsec
;
1994 u32 sid
= cred_sid(cred
);
1996 sbsec
= sb
->s_security
;
1997 return avc_has_perm(sid
, sbsec
->sid
, SECCLASS_FILESYSTEM
, perms
, ad
);
2000 /* Convert a Linux mode and permission mask to an access vector. */
2001 static inline u32
file_mask_to_av(int mode
, int mask
)
2005 if (!S_ISDIR(mode
)) {
2006 if (mask
& MAY_EXEC
)
2007 av
|= FILE__EXECUTE
;
2008 if (mask
& MAY_READ
)
2011 if (mask
& MAY_APPEND
)
2013 else if (mask
& MAY_WRITE
)
2017 if (mask
& MAY_EXEC
)
2019 if (mask
& MAY_WRITE
)
2021 if (mask
& MAY_READ
)
2028 /* Convert a Linux file to an access vector. */
2029 static inline u32
file_to_av(struct file
*file
)
2033 if (file
->f_mode
& FMODE_READ
)
2035 if (file
->f_mode
& FMODE_WRITE
) {
2036 if (file
->f_flags
& O_APPEND
)
2043 * Special file opened with flags 3 for ioctl-only use.
2052 * Convert a file to an access vector and include the correct open
2055 static inline u32
open_file_to_av(struct file
*file
)
2057 u32 av
= file_to_av(file
);
2058 struct inode
*inode
= file_inode(file
);
2060 if (selinux_policycap_openperm
&& inode
->i_sb
->s_magic
!= SOCKFS_MAGIC
)
2066 /* Hook functions begin here. */
2068 static int selinux_binder_set_context_mgr(struct task_struct
*mgr
)
2070 u32 mysid
= current_sid();
2071 u32 mgrsid
= task_sid(mgr
);
2073 return avc_has_perm(mysid
, mgrsid
, SECCLASS_BINDER
,
2074 BINDER__SET_CONTEXT_MGR
, NULL
);
2077 static int selinux_binder_transaction(struct task_struct
*from
,
2078 struct task_struct
*to
)
2080 u32 mysid
= current_sid();
2081 u32 fromsid
= task_sid(from
);
2082 u32 tosid
= task_sid(to
);
2085 if (mysid
!= fromsid
) {
2086 rc
= avc_has_perm(mysid
, fromsid
, SECCLASS_BINDER
,
2087 BINDER__IMPERSONATE
, NULL
);
2092 return avc_has_perm(fromsid
, tosid
, SECCLASS_BINDER
, BINDER__CALL
,
2096 static int selinux_binder_transfer_binder(struct task_struct
*from
,
2097 struct task_struct
*to
)
2099 u32 fromsid
= task_sid(from
);
2100 u32 tosid
= task_sid(to
);
2102 return avc_has_perm(fromsid
, tosid
, SECCLASS_BINDER
, BINDER__TRANSFER
,
2106 static int selinux_binder_transfer_file(struct task_struct
*from
,
2107 struct task_struct
*to
,
2110 u32 sid
= task_sid(to
);
2111 struct file_security_struct
*fsec
= file
->f_security
;
2112 struct dentry
*dentry
= file
->f_path
.dentry
;
2113 struct inode_security_struct
*isec
;
2114 struct common_audit_data ad
;
2117 ad
.type
= LSM_AUDIT_DATA_PATH
;
2118 ad
.u
.path
= file
->f_path
;
2120 if (sid
!= fsec
->sid
) {
2121 rc
= avc_has_perm(sid
, fsec
->sid
,
2129 if (unlikely(IS_PRIVATE(d_backing_inode(dentry
))))
2132 isec
= backing_inode_security(dentry
);
2133 return avc_has_perm(sid
, isec
->sid
, isec
->sclass
, file_to_av(file
),
2137 static int selinux_ptrace_access_check(struct task_struct
*child
,
2140 if (mode
& PTRACE_MODE_READ
) {
2141 u32 sid
= current_sid();
2142 u32 csid
= task_sid(child
);
2143 return avc_has_perm(sid
, csid
, SECCLASS_FILE
, FILE__READ
, NULL
);
2146 return current_has_perm(child
, PROCESS__PTRACE
);
2149 static int selinux_ptrace_traceme(struct task_struct
*parent
)
2151 return task_has_perm(parent
, current
, PROCESS__PTRACE
);
2154 static int selinux_capget(struct task_struct
*target
, kernel_cap_t
*effective
,
2155 kernel_cap_t
*inheritable
, kernel_cap_t
*permitted
)
2157 return current_has_perm(target
, PROCESS__GETCAP
);
2160 static int selinux_capset(struct cred
*new, const struct cred
*old
,
2161 const kernel_cap_t
*effective
,
2162 const kernel_cap_t
*inheritable
,
2163 const kernel_cap_t
*permitted
)
2165 return cred_has_perm(old
, new, PROCESS__SETCAP
);
2169 * (This comment used to live with the selinux_task_setuid hook,
2170 * which was removed).
2172 * Since setuid only affects the current process, and since the SELinux
2173 * controls are not based on the Linux identity attributes, SELinux does not
2174 * need to control this operation. However, SELinux does control the use of
2175 * the CAP_SETUID and CAP_SETGID capabilities using the capable hook.
2178 static int selinux_capable(const struct cred
*cred
, struct user_namespace
*ns
,
2181 return cred_has_capability(cred
, cap
, audit
, ns
== &init_user_ns
);
2184 static int selinux_quotactl(int cmds
, int type
, int id
, struct super_block
*sb
)
2186 const struct cred
*cred
= current_cred();
2198 rc
= superblock_has_perm(cred
, sb
, FILESYSTEM__QUOTAMOD
, NULL
);
2203 rc
= superblock_has_perm(cred
, sb
, FILESYSTEM__QUOTAGET
, NULL
);
2206 rc
= 0; /* let the kernel handle invalid cmds */
2212 static int selinux_quota_on(struct dentry
*dentry
)
2214 const struct cred
*cred
= current_cred();
2216 return dentry_has_perm(cred
, dentry
, FILE__QUOTAON
);
2219 static int selinux_syslog(int type
)
2224 case SYSLOG_ACTION_READ_ALL
: /* Read last kernel messages */
2225 case SYSLOG_ACTION_SIZE_BUFFER
: /* Return size of the log buffer */
2226 rc
= task_has_system(current
, SYSTEM__SYSLOG_READ
);
2228 case SYSLOG_ACTION_CONSOLE_OFF
: /* Disable logging to console */
2229 case SYSLOG_ACTION_CONSOLE_ON
: /* Enable logging to console */
2230 /* Set level of messages printed to console */
2231 case SYSLOG_ACTION_CONSOLE_LEVEL
:
2232 rc
= task_has_system(current
, SYSTEM__SYSLOG_CONSOLE
);
2234 case SYSLOG_ACTION_CLOSE
: /* Close log */
2235 case SYSLOG_ACTION_OPEN
: /* Open log */
2236 case SYSLOG_ACTION_READ
: /* Read from log */
2237 case SYSLOG_ACTION_READ_CLEAR
: /* Read/clear last kernel messages */
2238 case SYSLOG_ACTION_CLEAR
: /* Clear ring buffer */
2240 rc
= task_has_system(current
, SYSTEM__SYSLOG_MOD
);
2247 * Check that a process has enough memory to allocate a new virtual
2248 * mapping. 0 means there is enough memory for the allocation to
2249 * succeed and -ENOMEM implies there is not.
2251 * Do not audit the selinux permission check, as this is applied to all
2252 * processes that allocate mappings.
2254 static int selinux_vm_enough_memory(struct mm_struct
*mm
, long pages
)
2256 int rc
, cap_sys_admin
= 0;
2258 rc
= cred_has_capability(current_cred(), CAP_SYS_ADMIN
,
2259 SECURITY_CAP_NOAUDIT
, true);
2263 return cap_sys_admin
;
2266 /* binprm security operations */
2268 static u32
ptrace_parent_sid(struct task_struct
*task
)
2271 struct task_struct
*tracer
;
2274 tracer
= ptrace_parent(task
);
2276 sid
= task_sid(tracer
);
2282 static int check_nnp_nosuid(const struct linux_binprm
*bprm
,
2283 const struct task_security_struct
*old_tsec
,
2284 const struct task_security_struct
*new_tsec
)
2286 int nnp
= (bprm
->unsafe
& LSM_UNSAFE_NO_NEW_PRIVS
);
2287 int nosuid
= !mnt_may_suid(bprm
->file
->f_path
.mnt
);
2290 if (!nnp
&& !nosuid
)
2291 return 0; /* neither NNP nor nosuid */
2293 if (new_tsec
->sid
== old_tsec
->sid
)
2294 return 0; /* No change in credentials */
2297 * The only transitions we permit under NNP or nosuid
2298 * are transitions to bounded SIDs, i.e. SIDs that are
2299 * guaranteed to only be allowed a subset of the permissions
2300 * of the current SID.
2302 rc
= security_bounded_transition(old_tsec
->sid
, new_tsec
->sid
);
2305 * On failure, preserve the errno values for NNP vs nosuid.
2306 * NNP: Operation not permitted for caller.
2307 * nosuid: Permission denied to file.
2317 static int selinux_bprm_set_creds(struct linux_binprm
*bprm
)
2319 const struct task_security_struct
*old_tsec
;
2320 struct task_security_struct
*new_tsec
;
2321 struct inode_security_struct
*isec
;
2322 struct common_audit_data ad
;
2323 struct inode
*inode
= file_inode(bprm
->file
);
2326 /* SELinux context only depends on initial program or script and not
2327 * the script interpreter */
2328 if (bprm
->cred_prepared
)
2331 old_tsec
= current_security();
2332 new_tsec
= bprm
->cred
->security
;
2333 isec
= inode_security(inode
);
2335 /* Default to the current task SID. */
2336 new_tsec
->sid
= old_tsec
->sid
;
2337 new_tsec
->osid
= old_tsec
->sid
;
2339 /* Reset fs, key, and sock SIDs on execve. */
2340 new_tsec
->create_sid
= 0;
2341 new_tsec
->keycreate_sid
= 0;
2342 new_tsec
->sockcreate_sid
= 0;
2344 if (old_tsec
->exec_sid
) {
2345 new_tsec
->sid
= old_tsec
->exec_sid
;
2346 /* Reset exec SID on execve. */
2347 new_tsec
->exec_sid
= 0;
2349 /* Fail on NNP or nosuid if not an allowed transition. */
2350 rc
= check_nnp_nosuid(bprm
, old_tsec
, new_tsec
);
2354 /* Check for a default transition on this program. */
2355 rc
= security_transition_sid(old_tsec
->sid
, isec
->sid
,
2356 SECCLASS_PROCESS
, NULL
,
2362 * Fallback to old SID on NNP or nosuid if not an allowed
2365 rc
= check_nnp_nosuid(bprm
, old_tsec
, new_tsec
);
2367 new_tsec
->sid
= old_tsec
->sid
;
2370 ad
.type
= LSM_AUDIT_DATA_FILE
;
2371 ad
.u
.file
= bprm
->file
;
2373 if (new_tsec
->sid
== old_tsec
->sid
) {
2374 rc
= avc_has_perm(old_tsec
->sid
, isec
->sid
,
2375 SECCLASS_FILE
, FILE__EXECUTE_NO_TRANS
, &ad
);
2379 /* Check permissions for the transition. */
2380 rc
= avc_has_perm(old_tsec
->sid
, new_tsec
->sid
,
2381 SECCLASS_PROCESS
, PROCESS__TRANSITION
, &ad
);
2385 rc
= avc_has_perm(new_tsec
->sid
, isec
->sid
,
2386 SECCLASS_FILE
, FILE__ENTRYPOINT
, &ad
);
2390 /* Check for shared state */
2391 if (bprm
->unsafe
& LSM_UNSAFE_SHARE
) {
2392 rc
= avc_has_perm(old_tsec
->sid
, new_tsec
->sid
,
2393 SECCLASS_PROCESS
, PROCESS__SHARE
,
2399 /* Make sure that anyone attempting to ptrace over a task that
2400 * changes its SID has the appropriate permit */
2402 (LSM_UNSAFE_PTRACE
| LSM_UNSAFE_PTRACE_CAP
)) {
2403 u32 ptsid
= ptrace_parent_sid(current
);
2405 rc
= avc_has_perm(ptsid
, new_tsec
->sid
,
2407 PROCESS__PTRACE
, NULL
);
2413 /* Clear any possibly unsafe personality bits on exec: */
2414 bprm
->per_clear
|= PER_CLEAR_ON_SETID
;
2420 static int selinux_bprm_secureexec(struct linux_binprm
*bprm
)
2422 const struct task_security_struct
*tsec
= current_security();
2430 /* Enable secure mode for SIDs transitions unless
2431 the noatsecure permission is granted between
2432 the two SIDs, i.e. ahp returns 0. */
2433 atsecure
= avc_has_perm(osid
, sid
,
2435 PROCESS__NOATSECURE
, NULL
);
2441 static int match_file(const void *p
, struct file
*file
, unsigned fd
)
2443 return file_has_perm(p
, file
, file_to_av(file
)) ? fd
+ 1 : 0;
2446 /* Derived from fs/exec.c:flush_old_files. */
2447 static inline void flush_unauthorized_files(const struct cred
*cred
,
2448 struct files_struct
*files
)
2450 struct file
*file
, *devnull
= NULL
;
2451 struct tty_struct
*tty
;
2455 tty
= get_current_tty();
2457 spin_lock(&tty
->files_lock
);
2458 if (!list_empty(&tty
->tty_files
)) {
2459 struct tty_file_private
*file_priv
;
2461 /* Revalidate access to controlling tty.
2462 Use file_path_has_perm on the tty path directly
2463 rather than using file_has_perm, as this particular
2464 open file may belong to another process and we are
2465 only interested in the inode-based check here. */
2466 file_priv
= list_first_entry(&tty
->tty_files
,
2467 struct tty_file_private
, list
);
2468 file
= file_priv
->file
;
2469 if (file_path_has_perm(cred
, file
, FILE__READ
| FILE__WRITE
))
2472 spin_unlock(&tty
->files_lock
);
2475 /* Reset controlling tty. */
2479 /* Revalidate access to inherited open files. */
2480 n
= iterate_fd(files
, 0, match_file
, cred
);
2481 if (!n
) /* none found? */
2484 devnull
= dentry_open(&selinux_null
, O_RDWR
, cred
);
2485 if (IS_ERR(devnull
))
2487 /* replace all the matching ones with this */
2489 replace_fd(n
- 1, devnull
, 0);
2490 } while ((n
= iterate_fd(files
, n
, match_file
, cred
)) != 0);
2496 * Prepare a process for imminent new credential changes due to exec
2498 static void selinux_bprm_committing_creds(struct linux_binprm
*bprm
)
2500 struct task_security_struct
*new_tsec
;
2501 struct rlimit
*rlim
, *initrlim
;
2504 new_tsec
= bprm
->cred
->security
;
2505 if (new_tsec
->sid
== new_tsec
->osid
)
2508 /* Close files for which the new task SID is not authorized. */
2509 flush_unauthorized_files(bprm
->cred
, current
->files
);
2511 /* Always clear parent death signal on SID transitions. */
2512 current
->pdeath_signal
= 0;
2514 /* Check whether the new SID can inherit resource limits from the old
2515 * SID. If not, reset all soft limits to the lower of the current
2516 * task's hard limit and the init task's soft limit.
2518 * Note that the setting of hard limits (even to lower them) can be
2519 * controlled by the setrlimit check. The inclusion of the init task's
2520 * soft limit into the computation is to avoid resetting soft limits
2521 * higher than the default soft limit for cases where the default is
2522 * lower than the hard limit, e.g. RLIMIT_CORE or RLIMIT_STACK.
2524 rc
= avc_has_perm(new_tsec
->osid
, new_tsec
->sid
, SECCLASS_PROCESS
,
2525 PROCESS__RLIMITINH
, NULL
);
2527 /* protect against do_prlimit() */
2529 for (i
= 0; i
< RLIM_NLIMITS
; i
++) {
2530 rlim
= current
->signal
->rlim
+ i
;
2531 initrlim
= init_task
.signal
->rlim
+ i
;
2532 rlim
->rlim_cur
= min(rlim
->rlim_max
, initrlim
->rlim_cur
);
2534 task_unlock(current
);
2535 update_rlimit_cpu(current
, rlimit(RLIMIT_CPU
));
2540 * Clean up the process immediately after the installation of new credentials
2543 static void selinux_bprm_committed_creds(struct linux_binprm
*bprm
)
2545 const struct task_security_struct
*tsec
= current_security();
2546 struct itimerval itimer
;
2556 /* Check whether the new SID can inherit signal state from the old SID.
2557 * If not, clear itimers to avoid subsequent signal generation and
2558 * flush and unblock signals.
2560 * This must occur _after_ the task SID has been updated so that any
2561 * kill done after the flush will be checked against the new SID.
2563 rc
= avc_has_perm(osid
, sid
, SECCLASS_PROCESS
, PROCESS__SIGINH
, NULL
);
2565 memset(&itimer
, 0, sizeof itimer
);
2566 for (i
= 0; i
< 3; i
++)
2567 do_setitimer(i
, &itimer
, NULL
);
2568 spin_lock_irq(¤t
->sighand
->siglock
);
2569 if (!fatal_signal_pending(current
)) {
2570 flush_sigqueue(¤t
->pending
);
2571 flush_sigqueue(¤t
->signal
->shared_pending
);
2572 flush_signal_handlers(current
, 1);
2573 sigemptyset(¤t
->blocked
);
2574 recalc_sigpending();
2576 spin_unlock_irq(¤t
->sighand
->siglock
);
2579 /* Wake up the parent if it is waiting so that it can recheck
2580 * wait permission to the new task SID. */
2581 read_lock(&tasklist_lock
);
2582 __wake_up_parent(current
, current
->real_parent
);
2583 read_unlock(&tasklist_lock
);
2586 /* superblock security operations */
2588 static int selinux_sb_alloc_security(struct super_block
*sb
)
2590 return superblock_alloc_security(sb
);
2593 static void selinux_sb_free_security(struct super_block
*sb
)
2595 superblock_free_security(sb
);
2598 static inline int match_prefix(char *prefix
, int plen
, char *option
, int olen
)
2603 return !memcmp(prefix
, option
, plen
);
2606 static inline int selinux_option(char *option
, int len
)
2608 return (match_prefix(CONTEXT_STR
, sizeof(CONTEXT_STR
)-1, option
, len
) ||
2609 match_prefix(FSCONTEXT_STR
, sizeof(FSCONTEXT_STR
)-1, option
, len
) ||
2610 match_prefix(DEFCONTEXT_STR
, sizeof(DEFCONTEXT_STR
)-1, option
, len
) ||
2611 match_prefix(ROOTCONTEXT_STR
, sizeof(ROOTCONTEXT_STR
)-1, option
, len
) ||
2612 match_prefix(LABELSUPP_STR
, sizeof(LABELSUPP_STR
)-1, option
, len
));
2615 static inline void take_option(char **to
, char *from
, int *first
, int len
)
2622 memcpy(*to
, from
, len
);
2626 static inline void take_selinux_option(char **to
, char *from
, int *first
,
2629 int current_size
= 0;
2637 while (current_size
< len
) {
2647 static int selinux_sb_copy_data(char *orig
, char *copy
)
2649 int fnosec
, fsec
, rc
= 0;
2650 char *in_save
, *in_curr
, *in_end
;
2651 char *sec_curr
, *nosec_save
, *nosec
;
2657 nosec
= (char *)get_zeroed_page(GFP_KERNEL
);
2665 in_save
= in_end
= orig
;
2669 open_quote
= !open_quote
;
2670 if ((*in_end
== ',' && open_quote
== 0) ||
2672 int len
= in_end
- in_curr
;
2674 if (selinux_option(in_curr
, len
))
2675 take_selinux_option(&sec_curr
, in_curr
, &fsec
, len
);
2677 take_option(&nosec
, in_curr
, &fnosec
, len
);
2679 in_curr
= in_end
+ 1;
2681 } while (*in_end
++);
2683 strcpy(in_save
, nosec_save
);
2684 free_page((unsigned long)nosec_save
);
2689 static int selinux_sb_remount(struct super_block
*sb
, void *data
)
2692 struct security_mnt_opts opts
;
2693 char *secdata
, **mount_options
;
2694 struct superblock_security_struct
*sbsec
= sb
->s_security
;
2696 if (!(sbsec
->flags
& SE_SBINITIALIZED
))
2702 if (sb
->s_type
->fs_flags
& FS_BINARY_MOUNTDATA
)
2705 security_init_mnt_opts(&opts
);
2706 secdata
= alloc_secdata();
2709 rc
= selinux_sb_copy_data(data
, secdata
);
2711 goto out_free_secdata
;
2713 rc
= selinux_parse_opts_str(secdata
, &opts
);
2715 goto out_free_secdata
;
2717 mount_options
= opts
.mnt_opts
;
2718 flags
= opts
.mnt_opts_flags
;
2720 for (i
= 0; i
< opts
.num_mnt_opts
; i
++) {
2723 if (flags
[i
] == SBLABEL_MNT
)
2725 rc
= security_context_str_to_sid(mount_options
[i
], &sid
, GFP_KERNEL
);
2727 printk(KERN_WARNING
"SELinux: security_context_str_to_sid"
2728 "(%s) failed for (dev %s, type %s) errno=%d\n",
2729 mount_options
[i
], sb
->s_id
, sb
->s_type
->name
, rc
);
2735 if (bad_option(sbsec
, FSCONTEXT_MNT
, sbsec
->sid
, sid
))
2736 goto out_bad_option
;
2739 if (bad_option(sbsec
, CONTEXT_MNT
, sbsec
->mntpoint_sid
, sid
))
2740 goto out_bad_option
;
2742 case ROOTCONTEXT_MNT
: {
2743 struct inode_security_struct
*root_isec
;
2744 root_isec
= backing_inode_security(sb
->s_root
);
2746 if (bad_option(sbsec
, ROOTCONTEXT_MNT
, root_isec
->sid
, sid
))
2747 goto out_bad_option
;
2750 case DEFCONTEXT_MNT
:
2751 if (bad_option(sbsec
, DEFCONTEXT_MNT
, sbsec
->def_sid
, sid
))
2752 goto out_bad_option
;
2761 security_free_mnt_opts(&opts
);
2763 free_secdata(secdata
);
2766 printk(KERN_WARNING
"SELinux: unable to change security options "
2767 "during remount (dev %s, type=%s)\n", sb
->s_id
,
2772 static int selinux_sb_kern_mount(struct super_block
*sb
, int flags
, void *data
)
2774 const struct cred
*cred
= current_cred();
2775 struct common_audit_data ad
;
2778 rc
= superblock_doinit(sb
, data
);
2782 /* Allow all mounts performed by the kernel */
2783 if (flags
& (MS_KERNMOUNT
| MS_SUBMOUNT
))
2786 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
2787 ad
.u
.dentry
= sb
->s_root
;
2788 return superblock_has_perm(cred
, sb
, FILESYSTEM__MOUNT
, &ad
);
2791 static int selinux_sb_statfs(struct dentry
*dentry
)
2793 const struct cred
*cred
= current_cred();
2794 struct common_audit_data ad
;
2796 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
2797 ad
.u
.dentry
= dentry
->d_sb
->s_root
;
2798 return superblock_has_perm(cred
, dentry
->d_sb
, FILESYSTEM__GETATTR
, &ad
);
2801 static int selinux_mount(const char *dev_name
,
2802 const struct path
*path
,
2804 unsigned long flags
,
2807 const struct cred
*cred
= current_cred();
2809 if (flags
& MS_REMOUNT
)
2810 return superblock_has_perm(cred
, path
->dentry
->d_sb
,
2811 FILESYSTEM__REMOUNT
, NULL
);
2813 return path_has_perm(cred
, path
, FILE__MOUNTON
);
2816 static int selinux_umount(struct vfsmount
*mnt
, int flags
)
2818 const struct cred
*cred
= current_cred();
2820 return superblock_has_perm(cred
, mnt
->mnt_sb
,
2821 FILESYSTEM__UNMOUNT
, NULL
);
2824 /* inode security operations */
2826 static int selinux_inode_alloc_security(struct inode
*inode
)
2828 return inode_alloc_security(inode
);
2831 static void selinux_inode_free_security(struct inode
*inode
)
2833 inode_free_security(inode
);
2836 static int selinux_dentry_init_security(struct dentry
*dentry
, int mode
,
2837 const struct qstr
*name
, void **ctx
,
2843 rc
= selinux_determine_inode_label(current_security(),
2844 d_inode(dentry
->d_parent
), name
,
2845 inode_mode_to_security_class(mode
),
2850 return security_sid_to_context(newsid
, (char **)ctx
, ctxlen
);
2853 static int selinux_dentry_create_files_as(struct dentry
*dentry
, int mode
,
2855 const struct cred
*old
,
2860 struct task_security_struct
*tsec
;
2862 rc
= selinux_determine_inode_label(old
->security
,
2863 d_inode(dentry
->d_parent
), name
,
2864 inode_mode_to_security_class(mode
),
2869 tsec
= new->security
;
2870 tsec
->create_sid
= newsid
;
2874 static int selinux_inode_init_security(struct inode
*inode
, struct inode
*dir
,
2875 const struct qstr
*qstr
,
2877 void **value
, size_t *len
)
2879 const struct task_security_struct
*tsec
= current_security();
2880 struct superblock_security_struct
*sbsec
;
2881 u32 sid
, newsid
, clen
;
2885 sbsec
= dir
->i_sb
->s_security
;
2888 newsid
= tsec
->create_sid
;
2890 rc
= selinux_determine_inode_label(current_security(),
2892 inode_mode_to_security_class(inode
->i_mode
),
2897 /* Possibly defer initialization to selinux_complete_init. */
2898 if (sbsec
->flags
& SE_SBINITIALIZED
) {
2899 struct inode_security_struct
*isec
= inode
->i_security
;
2900 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
2902 isec
->initialized
= LABEL_INITIALIZED
;
2905 if (!ss_initialized
|| !(sbsec
->flags
& SBLABEL_MNT
))
2909 *name
= XATTR_SELINUX_SUFFIX
;
2912 rc
= security_sid_to_context_force(newsid
, &context
, &clen
);
2922 static int selinux_inode_create(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
)
2924 return may_create(dir
, dentry
, SECCLASS_FILE
);
2927 static int selinux_inode_link(struct dentry
*old_dentry
, struct inode
*dir
, struct dentry
*new_dentry
)
2929 return may_link(dir
, old_dentry
, MAY_LINK
);
2932 static int selinux_inode_unlink(struct inode
*dir
, struct dentry
*dentry
)
2934 return may_link(dir
, dentry
, MAY_UNLINK
);
2937 static int selinux_inode_symlink(struct inode
*dir
, struct dentry
*dentry
, const char *name
)
2939 return may_create(dir
, dentry
, SECCLASS_LNK_FILE
);
2942 static int selinux_inode_mkdir(struct inode
*dir
, struct dentry
*dentry
, umode_t mask
)
2944 return may_create(dir
, dentry
, SECCLASS_DIR
);
2947 static int selinux_inode_rmdir(struct inode
*dir
, struct dentry
*dentry
)
2949 return may_link(dir
, dentry
, MAY_RMDIR
);
2952 static int selinux_inode_mknod(struct inode
*dir
, struct dentry
*dentry
, umode_t mode
, dev_t dev
)
2954 return may_create(dir
, dentry
, inode_mode_to_security_class(mode
));
2957 static int selinux_inode_rename(struct inode
*old_inode
, struct dentry
*old_dentry
,
2958 struct inode
*new_inode
, struct dentry
*new_dentry
)
2960 return may_rename(old_inode
, old_dentry
, new_inode
, new_dentry
);
2963 static int selinux_inode_readlink(struct dentry
*dentry
)
2965 const struct cred
*cred
= current_cred();
2967 return dentry_has_perm(cred
, dentry
, FILE__READ
);
2970 static int selinux_inode_follow_link(struct dentry
*dentry
, struct inode
*inode
,
2973 const struct cred
*cred
= current_cred();
2974 struct common_audit_data ad
;
2975 struct inode_security_struct
*isec
;
2978 validate_creds(cred
);
2980 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
2981 ad
.u
.dentry
= dentry
;
2982 sid
= cred_sid(cred
);
2983 isec
= inode_security_rcu(inode
, rcu
);
2985 return PTR_ERR(isec
);
2987 return avc_has_perm_flags(sid
, isec
->sid
, isec
->sclass
, FILE__READ
, &ad
,
2988 rcu
? MAY_NOT_BLOCK
: 0);
2991 static noinline
int audit_inode_permission(struct inode
*inode
,
2992 u32 perms
, u32 audited
, u32 denied
,
2996 struct common_audit_data ad
;
2997 struct inode_security_struct
*isec
= inode
->i_security
;
3000 ad
.type
= LSM_AUDIT_DATA_INODE
;
3003 rc
= slow_avc_audit(current_sid(), isec
->sid
, isec
->sclass
, perms
,
3004 audited
, denied
, result
, &ad
, flags
);
3010 static int selinux_inode_permission(struct inode
*inode
, int mask
)
3012 const struct cred
*cred
= current_cred();
3015 unsigned flags
= mask
& MAY_NOT_BLOCK
;
3016 struct inode_security_struct
*isec
;
3018 struct av_decision avd
;
3020 u32 audited
, denied
;
3022 from_access
= mask
& MAY_ACCESS
;
3023 mask
&= (MAY_READ
|MAY_WRITE
|MAY_EXEC
|MAY_APPEND
);
3025 /* No permission to check. Existence test. */
3029 validate_creds(cred
);
3031 if (unlikely(IS_PRIVATE(inode
)))
3034 perms
= file_mask_to_av(inode
->i_mode
, mask
);
3036 sid
= cred_sid(cred
);
3037 isec
= inode_security_rcu(inode
, flags
& MAY_NOT_BLOCK
);
3039 return PTR_ERR(isec
);
3041 rc
= avc_has_perm_noaudit(sid
, isec
->sid
, isec
->sclass
, perms
, 0, &avd
);
3042 audited
= avc_audit_required(perms
, &avd
, rc
,
3043 from_access
? FILE__AUDIT_ACCESS
: 0,
3045 if (likely(!audited
))
3048 rc2
= audit_inode_permission(inode
, perms
, audited
, denied
, rc
, flags
);
3054 static int selinux_inode_setattr(struct dentry
*dentry
, struct iattr
*iattr
)
3056 const struct cred
*cred
= current_cred();
3057 struct inode
*inode
= d_backing_inode(dentry
);
3058 unsigned int ia_valid
= iattr
->ia_valid
;
3059 __u32 av
= FILE__WRITE
;
3061 /* ATTR_FORCE is just used for ATTR_KILL_S[UG]ID. */
3062 if (ia_valid
& ATTR_FORCE
) {
3063 ia_valid
&= ~(ATTR_KILL_SUID
| ATTR_KILL_SGID
| ATTR_MODE
|
3069 if (ia_valid
& (ATTR_MODE
| ATTR_UID
| ATTR_GID
|
3070 ATTR_ATIME_SET
| ATTR_MTIME_SET
| ATTR_TIMES_SET
))
3071 return dentry_has_perm(cred
, dentry
, FILE__SETATTR
);
3073 if (selinux_policycap_openperm
&&
3074 inode
->i_sb
->s_magic
!= SOCKFS_MAGIC
&&
3075 (ia_valid
& ATTR_SIZE
) &&
3076 !(ia_valid
& ATTR_FILE
))
3079 return dentry_has_perm(cred
, dentry
, av
);
3082 static int selinux_inode_getattr(const struct path
*path
)
3084 return path_has_perm(current_cred(), path
, FILE__GETATTR
);
3087 static int selinux_inode_setotherxattr(struct dentry
*dentry
, const char *name
)
3089 const struct cred
*cred
= current_cred();
3091 if (!strncmp(name
, XATTR_SECURITY_PREFIX
,
3092 sizeof XATTR_SECURITY_PREFIX
- 1)) {
3093 if (!strcmp(name
, XATTR_NAME_CAPS
)) {
3094 if (!capable(CAP_SETFCAP
))
3096 } else if (!capable(CAP_SYS_ADMIN
)) {
3097 /* A different attribute in the security namespace.
3098 Restrict to administrator. */
3103 /* Not an attribute we recognize, so just check the
3104 ordinary setattr permission. */
3105 return dentry_has_perm(cred
, dentry
, FILE__SETATTR
);
3108 static int selinux_inode_setxattr(struct dentry
*dentry
, const char *name
,
3109 const void *value
, size_t size
, int flags
)
3111 struct inode
*inode
= d_backing_inode(dentry
);
3112 struct inode_security_struct
*isec
;
3113 struct superblock_security_struct
*sbsec
;
3114 struct common_audit_data ad
;
3115 u32 newsid
, sid
= current_sid();
3118 if (strcmp(name
, XATTR_NAME_SELINUX
))
3119 return selinux_inode_setotherxattr(dentry
, name
);
3121 sbsec
= inode
->i_sb
->s_security
;
3122 if (!(sbsec
->flags
& SBLABEL_MNT
))
3125 if (!inode_owner_or_capable(inode
))
3128 ad
.type
= LSM_AUDIT_DATA_DENTRY
;
3129 ad
.u
.dentry
= dentry
;
3131 isec
= backing_inode_security(dentry
);
3132 rc
= avc_has_perm(sid
, isec
->sid
, isec
->sclass
,
3133 FILE__RELABELFROM
, &ad
);
3137 rc
= security_context_to_sid(value
, size
, &newsid
, GFP_KERNEL
);
3138 if (rc
== -EINVAL
) {
3139 if (!capable(CAP_MAC_ADMIN
)) {
3140 struct audit_buffer
*ab
;
3144 /* We strip a nul only if it is at the end, otherwise the
3145 * context contains a nul and we should audit that */
3148 if (str
[size
- 1] == '\0')
3149 audit_size
= size
- 1;
3156 ab
= audit_log_start(current
->audit_context
, GFP_ATOMIC
, AUDIT_SELINUX_ERR
);
3157 audit_log_format(ab
, "op=setxattr invalid_context=");
3158 audit_log_n_untrustedstring(ab
, value
, audit_size
);
3163 rc
= security_context_to_sid_force(value
, size
, &newsid
);
3168 rc
= avc_has_perm(sid
, newsid
, isec
->sclass
,
3169 FILE__RELABELTO
, &ad
);
3173 rc
= security_validate_transition(isec
->sid
, newsid
, sid
,
3178 return avc_has_perm(newsid
,
3180 SECCLASS_FILESYSTEM
,
3181 FILESYSTEM__ASSOCIATE
,
3185 static void selinux_inode_post_setxattr(struct dentry
*dentry
, const char *name
,
3186 const void *value
, size_t size
,
3189 struct inode
*inode
= d_backing_inode(dentry
);
3190 struct inode_security_struct
*isec
;
3194 if (strcmp(name
, XATTR_NAME_SELINUX
)) {
3195 /* Not an attribute we recognize, so nothing to do. */
3199 rc
= security_context_to_sid_force(value
, size
, &newsid
);
3201 printk(KERN_ERR
"SELinux: unable to map context to SID"
3202 "for (%s, %lu), rc=%d\n",
3203 inode
->i_sb
->s_id
, inode
->i_ino
, -rc
);
3207 isec
= backing_inode_security(dentry
);
3208 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
3210 isec
->initialized
= LABEL_INITIALIZED
;
3215 static int selinux_inode_getxattr(struct dentry
*dentry
, const char *name
)
3217 const struct cred
*cred
= current_cred();
3219 return dentry_has_perm(cred
, dentry
, FILE__GETATTR
);
3222 static int selinux_inode_listxattr(struct dentry
*dentry
)
3224 const struct cred
*cred
= current_cred();
3226 return dentry_has_perm(cred
, dentry
, FILE__GETATTR
);
3229 static int selinux_inode_removexattr(struct dentry
*dentry
, const char *name
)
3231 if (strcmp(name
, XATTR_NAME_SELINUX
))
3232 return selinux_inode_setotherxattr(dentry
, name
);
3234 /* No one is allowed to remove a SELinux security label.
3235 You can change the label, but all data must be labeled. */
3240 * Copy the inode security context value to the user.
3242 * Permission check is handled by selinux_inode_getxattr hook.
3244 static int selinux_inode_getsecurity(struct inode
*inode
, const char *name
, void **buffer
, bool alloc
)
3248 char *context
= NULL
;
3249 struct inode_security_struct
*isec
;
3251 if (strcmp(name
, XATTR_SELINUX_SUFFIX
))
3255 * If the caller has CAP_MAC_ADMIN, then get the raw context
3256 * value even if it is not defined by current policy; otherwise,
3257 * use the in-core value under current policy.
3258 * Use the non-auditing forms of the permission checks since
3259 * getxattr may be called by unprivileged processes commonly
3260 * and lack of permission just means that we fall back to the
3261 * in-core context value, not a denial.
3263 error
= cap_capable(current_cred(), &init_user_ns
, CAP_MAC_ADMIN
,
3264 SECURITY_CAP_NOAUDIT
);
3266 error
= cred_has_capability(current_cred(), CAP_MAC_ADMIN
,
3267 SECURITY_CAP_NOAUDIT
, true);
3268 isec
= inode_security(inode
);
3270 error
= security_sid_to_context_force(isec
->sid
, &context
,
3273 error
= security_sid_to_context(isec
->sid
, &context
, &size
);
3286 static int selinux_inode_setsecurity(struct inode
*inode
, const char *name
,
3287 const void *value
, size_t size
, int flags
)
3289 struct inode_security_struct
*isec
= inode_security_novalidate(inode
);
3290 struct superblock_security_struct
*sbsec
= inode
->i_sb
->s_security
;
3294 if (strcmp(name
, XATTR_SELINUX_SUFFIX
))
3297 if (!(sbsec
->flags
& SBLABEL_MNT
))
3300 if (!value
|| !size
)
3303 rc
= security_context_to_sid(value
, size
, &newsid
, GFP_KERNEL
);
3307 isec
->sclass
= inode_mode_to_security_class(inode
->i_mode
);
3309 isec
->initialized
= LABEL_INITIALIZED
;
3313 static int selinux_inode_listsecurity(struct inode
*inode
, char *buffer
, size_t buffer_size
)
3315 const int len
= sizeof(XATTR_NAME_SELINUX
);
3316 if (buffer
&& len
<= buffer_size
)
3317 memcpy(buffer
, XATTR_NAME_SELINUX
, len
);
3321 static void selinux_inode_getsecid(struct inode
*inode
, u32
*secid
)
3323 struct inode_security_struct
*isec
= inode_security_novalidate(inode
);
3327 static int selinux_inode_copy_up(struct dentry
*src
, struct cred
**new)
3330 struct task_security_struct
*tsec
;
3331 struct cred
*new_creds
= *new;
3333 if (new_creds
== NULL
) {
3334 new_creds
= prepare_creds();
3339 tsec
= new_creds
->security
;
3340 /* Get label from overlay inode and set it in create_sid */
3341 selinux_inode_getsecid(d_inode(src
), &sid
);
3342 tsec
->create_sid
= sid
;
3347 static int selinux_inode_copy_up_xattr(const char *name
)
3349 /* The copy_up hook above sets the initial context on an inode, but we
3350 * don't then want to overwrite it by blindly copying all the lower
3351 * xattrs up. Instead, we have to filter out SELinux-related xattrs.
3353 if (strcmp(name
, XATTR_NAME_SELINUX
) == 0)
3354 return 1; /* Discard */
3356 * Any other attribute apart from SELINUX is not claimed, supported
3362 /* file security operations */
3364 static int selinux_revalidate_file_permission(struct file
*file
, int mask
)
3366 const struct cred
*cred
= current_cred();
3367 struct inode
*inode
= file_inode(file
);
3369 /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
3370 if ((file
->f_flags
& O_APPEND
) && (mask
& MAY_WRITE
))
3373 return file_has_perm(cred
, file
,
3374 file_mask_to_av(inode
->i_mode
, mask
));
3377 static int selinux_file_permission(struct file
*file
, int mask
)
3379 struct inode
*inode
= file_inode(file
);
3380 struct file_security_struct
*fsec
= file
->f_security
;
3381 struct inode_security_struct
*isec
;
3382 u32 sid
= current_sid();
3385 /* No permission to check. Existence test. */
3388 isec
= inode_security(inode
);
3389 if (sid
== fsec
->sid
&& fsec
->isid
== isec
->sid
&&
3390 fsec
->pseqno
== avc_policy_seqno())
3391 /* No change since file_open check. */
3394 return selinux_revalidate_file_permission(file
, mask
);
3397 static int selinux_file_alloc_security(struct file
*file
)
3399 return file_alloc_security(file
);
3402 static void selinux_file_free_security(struct file
*file
)
3404 file_free_security(file
);
3408 * Check whether a task has the ioctl permission and cmd
3409 * operation to an inode.
3411 static int ioctl_has_perm(const struct cred
*cred
, struct file
*file
,
3412 u32 requested
, u16 cmd
)
3414 struct common_audit_data ad
;
3415 struct file_security_struct
*fsec
= file
->f_security
;
3416 struct inode
*inode
= file_inode(file
);
3417 struct inode_security_struct
*isec
;
3418 struct lsm_ioctlop_audit ioctl
;
3419 u32 ssid
= cred_sid(cred
);
3421 u8 driver
= cmd
>> 8;
3422 u8 xperm
= cmd
& 0xff;
3424 ad
.type
= LSM_AUDIT_DATA_IOCTL_OP
;
3427 ad
.u
.op
->path
= file
->f_path
;
3429 if (ssid
!= fsec
->sid
) {
3430 rc
= avc_has_perm(ssid
, fsec
->sid
,
3438 if (unlikely(IS_PRIVATE(inode
)))
3441 isec
= inode_security(inode
);
3442 rc
= avc_has_extended_perms(ssid
, isec
->sid
, isec
->sclass
,
3443 requested
, driver
, xperm
, &ad
);
3448 static int selinux_file_ioctl(struct file
*file
, unsigned int cmd
,
3451 const struct cred
*cred
= current_cred();
3461 case FS_IOC_GETFLAGS
:
3463 case FS_IOC_GETVERSION
:
3464 error
= file_has_perm(cred
, file
, FILE__GETATTR
);
3467 case FS_IOC_SETFLAGS
:
3469 case FS_IOC_SETVERSION
:
3470 error
= file_has_perm(cred
, file
, FILE__SETATTR
);
3473 /* sys_ioctl() checks */
3477 error
= file_has_perm(cred
, file
, 0);
3482 error
= cred_has_capability(cred
, CAP_SYS_TTY_CONFIG
,
3483 SECURITY_CAP_AUDIT
, true);
3486 /* default case assumes that the command will go
3487 * to the file's ioctl() function.
3490 error
= ioctl_has_perm(cred
, file
, FILE__IOCTL
, (u16
) cmd
);
3495 static int default_noexec
;
3497 static int file_map_prot_check(struct file
*file
, unsigned long prot
, int shared
)
3499 const struct cred
*cred
= current_cred();
3502 if (default_noexec
&&
3503 (prot
& PROT_EXEC
) && (!file
|| IS_PRIVATE(file_inode(file
)) ||
3504 (!shared
&& (prot
& PROT_WRITE
)))) {
3506 * We are making executable an anonymous mapping or a
3507 * private file mapping that will also be writable.
3508 * This has an additional check.
3510 rc
= cred_has_perm(cred
, cred
, PROCESS__EXECMEM
);
3516 /* read access is always possible with a mapping */
3517 u32 av
= FILE__READ
;
3519 /* write access only matters if the mapping is shared */
3520 if (shared
&& (prot
& PROT_WRITE
))
3523 if (prot
& PROT_EXEC
)
3524 av
|= FILE__EXECUTE
;
3526 return file_has_perm(cred
, file
, av
);
3533 static int selinux_mmap_addr(unsigned long addr
)
3537 if (addr
< CONFIG_LSM_MMAP_MIN_ADDR
) {
3538 u32 sid
= current_sid();
3539 rc
= avc_has_perm(sid
, sid
, SECCLASS_MEMPROTECT
,
3540 MEMPROTECT__MMAP_ZERO
, NULL
);
3546 static int selinux_mmap_file(struct file
*file
, unsigned long reqprot
,
3547 unsigned long prot
, unsigned long flags
)
3549 if (selinux_checkreqprot
)
3552 return file_map_prot_check(file
, prot
,
3553 (flags
& MAP_TYPE
) == MAP_SHARED
);
3556 static int selinux_file_mprotect(struct vm_area_struct
*vma
,
3557 unsigned long reqprot
,
3560 const struct cred
*cred
= current_cred();
3562 if (selinux_checkreqprot
)
3565 if (default_noexec
&&
3566 (prot
& PROT_EXEC
) && !(vma
->vm_flags
& VM_EXEC
)) {
3568 if (vma
->vm_start
>= vma
->vm_mm
->start_brk
&&
3569 vma
->vm_end
<= vma
->vm_mm
->brk
) {
3570 rc
= cred_has_perm(cred
, cred
, PROCESS__EXECHEAP
);
3571 } else if (!vma
->vm_file
&&
3572 ((vma
->vm_start
<= vma
->vm_mm
->start_stack
&&
3573 vma
->vm_end
>= vma
->vm_mm
->start_stack
) ||
3574 vma_is_stack_for_current(vma
))) {
3575 rc
= current_has_perm(current
, PROCESS__EXECSTACK
);
3576 } else if (vma
->vm_file
&& vma
->anon_vma
) {
3578 * We are making executable a file mapping that has
3579 * had some COW done. Since pages might have been
3580 * written, check ability to execute the possibly
3581 * modified content. This typically should only
3582 * occur for text relocations.
3584 rc
= file_has_perm(cred
, vma
->vm_file
, FILE__EXECMOD
);
3590 return file_map_prot_check(vma
->vm_file
, prot
, vma
->vm_flags
&VM_SHARED
);
3593 static int selinux_file_lock(struct file
*file
, unsigned int cmd
)
3595 const struct cred
*cred
= current_cred();
3597 return file_has_perm(cred
, file
, FILE__LOCK
);
3600 static int selinux_file_fcntl(struct file
*file
, unsigned int cmd
,
3603 const struct cred
*cred
= current_cred();
3608 if ((file
->f_flags
& O_APPEND
) && !(arg
& O_APPEND
)) {
3609 err
= file_has_perm(cred
, file
, FILE__WRITE
);
3618 case F_GETOWNER_UIDS
:
3619 /* Just check FD__USE permission */
3620 err
= file_has_perm(cred
, file
, 0);
3628 #if BITS_PER_LONG == 32
3633 err
= file_has_perm(cred
, file
, FILE__LOCK
);
3640 static void selinux_file_set_fowner(struct file
*file
)
3642 struct file_security_struct
*fsec
;
3644 fsec
= file
->f_security
;
3645 fsec
->fown_sid
= current_sid();
3648 static int selinux_file_send_sigiotask(struct task_struct
*tsk
,
3649 struct fown_struct
*fown
, int signum
)
3652 u32 sid
= task_sid(tsk
);
3654 struct file_security_struct
*fsec
;
3656 /* struct fown_struct is never outside the context of a struct file */
3657 file
= container_of(fown
, struct file
, f_owner
);
3659 fsec
= file
->f_security
;
3662 perm
= signal_to_av(SIGIO
); /* as per send_sigio_to_task */
3664 perm
= signal_to_av(signum
);
3666 return avc_has_perm(fsec
->fown_sid
, sid
,
3667 SECCLASS_PROCESS
, perm
, NULL
);
3670 static int selinux_file_receive(struct file
*file
)
3672 const struct cred
*cred
= current_cred();
3674 return file_has_perm(cred
, file
, file_to_av(file
));
3677 static int selinux_file_open(struct file
*file
, const struct cred
*cred
)
3679 struct file_security_struct
*fsec
;
3680 struct inode_security_struct
*isec
;
3682 fsec
= file
->f_security
;
3683 isec
= inode_security(file_inode(file
));
3685 * Save inode label and policy sequence number
3686 * at open-time so that selinux_file_permission
3687 * can determine whether revalidation is necessary.
3688 * Task label is already saved in the file security
3689 * struct as its SID.
3691 fsec
->isid
= isec
->sid
;
3692 fsec
->pseqno
= avc_policy_seqno();
3694 * Since the inode label or policy seqno may have changed
3695 * between the selinux_inode_permission check and the saving
3696 * of state above, recheck that access is still permitted.
3697 * Otherwise, access might never be revalidated against the
3698 * new inode label or new policy.
3699 * This check is not redundant - do not remove.
3701 return file_path_has_perm(cred
, file
, open_file_to_av(file
));
3704 /* task security operations */
3706 static int selinux_task_create(unsigned long clone_flags
)
3708 return current_has_perm(current
, PROCESS__FORK
);
3712 * allocate the SELinux part of blank credentials
3714 static int selinux_cred_alloc_blank(struct cred
*cred
, gfp_t gfp
)
3716 struct task_security_struct
*tsec
;
3718 tsec
= kzalloc(sizeof(struct task_security_struct
), gfp
);
3722 cred
->security
= tsec
;
3727 * detach and free the LSM part of a set of credentials
3729 static void selinux_cred_free(struct cred
*cred
)
3731 struct task_security_struct
*tsec
= cred
->security
;
3734 * cred->security == NULL if security_cred_alloc_blank() or
3735 * security_prepare_creds() returned an error.
3737 BUG_ON(cred
->security
&& (unsigned long) cred
->security
< PAGE_SIZE
);
3738 cred
->security
= (void *) 0x7UL
;
3743 * prepare a new set of credentials for modification
3745 static int selinux_cred_prepare(struct cred
*new, const struct cred
*old
,
3748 const struct task_security_struct
*old_tsec
;
3749 struct task_security_struct
*tsec
;
3751 old_tsec
= old
->security
;
3753 tsec
= kmemdup(old_tsec
, sizeof(struct task_security_struct
), gfp
);
3757 new->security
= tsec
;
3762 * transfer the SELinux data to a blank set of creds
3764 static void selinux_cred_transfer(struct cred
*new, const struct cred
*old
)
3766 const struct task_security_struct
*old_tsec
= old
->security
;
3767 struct task_security_struct
*tsec
= new->security
;
3773 * set the security data for a kernel service
3774 * - all the creation contexts are set to unlabelled
3776 static int selinux_kernel_act_as(struct cred
*new, u32 secid
)
3778 struct task_security_struct
*tsec
= new->security
;
3779 u32 sid
= current_sid();
3782 ret
= avc_has_perm(sid
, secid
,
3783 SECCLASS_KERNEL_SERVICE
,
3784 KERNEL_SERVICE__USE_AS_OVERRIDE
,
3788 tsec
->create_sid
= 0;
3789 tsec
->keycreate_sid
= 0;
3790 tsec
->sockcreate_sid
= 0;
3796 * set the file creation context in a security record to the same as the
3797 * objective context of the specified inode
3799 static int selinux_kernel_create_files_as(struct cred
*new, struct inode
*inode
)
3801 struct inode_security_struct
*isec
= inode_security(inode
);
3802 struct task_security_struct
*tsec
= new->security
;
3803 u32 sid
= current_sid();
3806 ret
= avc_has_perm(sid
, isec
->sid
,
3807 SECCLASS_KERNEL_SERVICE
,
3808 KERNEL_SERVICE__CREATE_FILES_AS
,
3812 tsec
->create_sid
= isec
->sid
;
3816 static int selinux_kernel_module_request(char *kmod_name
)
3819 struct common_audit_data ad
;
3821 sid
= task_sid(current
);
3823 ad
.type
= LSM_AUDIT_DATA_KMOD
;
3824 ad
.u
.kmod_name
= kmod_name
;
3826 return avc_has_perm(sid
, SECINITSID_KERNEL
, SECCLASS_SYSTEM
,
3827 SYSTEM__MODULE_REQUEST
, &ad
);
3830 static int selinux_kernel_module_from_file(struct file
*file
)
3832 struct common_audit_data ad
;
3833 struct inode_security_struct
*isec
;
3834 struct file_security_struct
*fsec
;
3835 u32 sid
= current_sid();
3840 return avc_has_perm(sid
, sid
, SECCLASS_SYSTEM
,
3841 SYSTEM__MODULE_LOAD
, NULL
);
3845 ad
.type
= LSM_AUDIT_DATA_FILE
;
3848 fsec
= file
->f_security
;
3849 if (sid
!= fsec
->sid
) {
3850 rc
= avc_has_perm(sid
, fsec
->sid
, SECCLASS_FD
, FD__USE
, &ad
);
3855 isec
= inode_security(file_inode(file
));
3856 return avc_has_perm(sid
, isec
->sid
, SECCLASS_SYSTEM
,
3857 SYSTEM__MODULE_LOAD
, &ad
);
3860 static int selinux_kernel_read_file(struct file
*file
,
3861 enum kernel_read_file_id id
)
3866 case READING_MODULE
:
3867 rc
= selinux_kernel_module_from_file(file
);
3876 static int selinux_task_setpgid(struct task_struct
*p
, pid_t pgid
)
3878 return current_has_perm(p
, PROCESS__SETPGID
);
3881 static int selinux_task_getpgid(struct task_struct
*p
)
3883 return current_has_perm(p
, PROCESS__GETPGID
);
3886 static int selinux_task_getsid(struct task_struct
*p
)
3888 return current_has_perm(p
, PROCESS__GETSESSION
);
3891 static void selinux_task_getsecid(struct task_struct
*p
, u32
*secid
)
3893 *secid
= task_sid(p
);
3896 static int selinux_task_setnice(struct task_struct
*p
, int nice
)
3898 return current_has_perm(p
, PROCESS__SETSCHED
);
3901 static int selinux_task_setioprio(struct task_struct
*p
, int ioprio
)
3903 return current_has_perm(p
, PROCESS__SETSCHED
);
3906 static int selinux_task_getioprio(struct task_struct
*p
)
3908 return current_has_perm(p
, PROCESS__GETSCHED
);
3911 static int selinux_task_setrlimit(struct task_struct
*p
, unsigned int resource
,
3912 struct rlimit
*new_rlim
)
3914 struct rlimit
*old_rlim
= p
->signal
->rlim
+ resource
;
3916 /* Control the ability to change the hard limit (whether
3917 lowering or raising it), so that the hard limit can
3918 later be used as a safe reset point for the soft limit
3919 upon context transitions. See selinux_bprm_committing_creds. */
3920 if (old_rlim
->rlim_max
!= new_rlim
->rlim_max
)
3921 return current_has_perm(p
, PROCESS__SETRLIMIT
);
3926 static int selinux_task_setscheduler(struct task_struct
*p
)
3928 return current_has_perm(p
, PROCESS__SETSCHED
);
3931 static int selinux_task_getscheduler(struct task_struct
*p
)
3933 return current_has_perm(p
, PROCESS__GETSCHED
);
3936 static int selinux_task_movememory(struct task_struct
*p
)
3938 return current_has_perm(p
, PROCESS__SETSCHED
);
3941 static int selinux_task_kill(struct task_struct
*p
, struct siginfo
*info
,
3948 perm
= PROCESS__SIGNULL
; /* null signal; existence test */
3950 perm
= signal_to_av(sig
);
3952 rc
= avc_has_perm(secid
, task_sid(p
),
3953 SECCLASS_PROCESS
, perm
, NULL
);
3955 rc
= current_has_perm(p
, perm
);
3959 static int selinux_task_wait(struct task_struct
*p
)
3961 return task_has_perm(p
, current
, PROCESS__SIGCHLD
);
3964 static void selinux_task_to_inode(struct task_struct
*p
,
3965 struct inode
*inode
)
3967 struct inode_security_struct
*isec
= inode
->i_security
;
3968 u32 sid
= task_sid(p
);
3971 isec
->initialized
= LABEL_INITIALIZED
;
3974 /* Returns error only if unable to parse addresses */
3975 static int selinux_parse_skb_ipv4(struct sk_buff
*skb
,
3976 struct common_audit_data
*ad
, u8
*proto
)
3978 int offset
, ihlen
, ret
= -EINVAL
;
3979 struct iphdr _iph
, *ih
;
3981 offset
= skb_network_offset(skb
);
3982 ih
= skb_header_pointer(skb
, offset
, sizeof(_iph
), &_iph
);
3986 ihlen
= ih
->ihl
* 4;
3987 if (ihlen
< sizeof(_iph
))
3990 ad
->u
.net
->v4info
.saddr
= ih
->saddr
;
3991 ad
->u
.net
->v4info
.daddr
= ih
->daddr
;
3995 *proto
= ih
->protocol
;
3997 switch (ih
->protocol
) {
3999 struct tcphdr _tcph
, *th
;
4001 if (ntohs(ih
->frag_off
) & IP_OFFSET
)
4005 th
= skb_header_pointer(skb
, offset
, sizeof(_tcph
), &_tcph
);
4009 ad
->u
.net
->sport
= th
->source
;
4010 ad
->u
.net
->dport
= th
->dest
;
4015 struct udphdr _udph
, *uh
;
4017 if (ntohs(ih
->frag_off
) & IP_OFFSET
)
4021 uh
= skb_header_pointer(skb
, offset
, sizeof(_udph
), &_udph
);
4025 ad
->u
.net
->sport
= uh
->source
;
4026 ad
->u
.net
->dport
= uh
->dest
;
4030 case IPPROTO_DCCP
: {
4031 struct dccp_hdr _dccph
, *dh
;
4033 if (ntohs(ih
->frag_off
) & IP_OFFSET
)
4037 dh
= skb_header_pointer(skb
, offset
, sizeof(_dccph
), &_dccph
);
4041 ad
->u
.net
->sport
= dh
->dccph_sport
;
4042 ad
->u
.net
->dport
= dh
->dccph_dport
;
4053 #if IS_ENABLED(CONFIG_IPV6)
4055 /* Returns error only if unable to parse addresses */
4056 static int selinux_parse_skb_ipv6(struct sk_buff
*skb
,
4057 struct common_audit_data
*ad
, u8
*proto
)
4060 int ret
= -EINVAL
, offset
;
4061 struct ipv6hdr _ipv6h
, *ip6
;
4064 offset
= skb_network_offset(skb
);
4065 ip6
= skb_header_pointer(skb
, offset
, sizeof(_ipv6h
), &_ipv6h
);
4069 ad
->u
.net
->v6info
.saddr
= ip6
->saddr
;
4070 ad
->u
.net
->v6info
.daddr
= ip6
->daddr
;
4073 nexthdr
= ip6
->nexthdr
;
4074 offset
+= sizeof(_ipv6h
);
4075 offset
= ipv6_skip_exthdr(skb
, offset
, &nexthdr
, &frag_off
);
4084 struct tcphdr _tcph
, *th
;
4086 th
= skb_header_pointer(skb
, offset
, sizeof(_tcph
), &_tcph
);
4090 ad
->u
.net
->sport
= th
->source
;
4091 ad
->u
.net
->dport
= th
->dest
;
4096 struct udphdr _udph
, *uh
;
4098 uh
= skb_header_pointer(skb
, offset
, sizeof(_udph
), &_udph
);
4102 ad
->u
.net
->sport
= uh
->source
;
4103 ad
->u
.net
->dport
= uh
->dest
;
4107 case IPPROTO_DCCP
: {
4108 struct dccp_hdr _dccph
, *dh
;
4110 dh
= skb_header_pointer(skb
, offset
, sizeof(_dccph
), &_dccph
);
4114 ad
->u
.net
->sport
= dh
->dccph_sport
;
4115 ad
->u
.net
->dport
= dh
->dccph_dport
;
4119 /* includes fragments */
4129 static int selinux_parse_skb(struct sk_buff
*skb
, struct common_audit_data
*ad
,
4130 char **_addrp
, int src
, u8
*proto
)
4135 switch (ad
->u
.net
->family
) {
4137 ret
= selinux_parse_skb_ipv4(skb
, ad
, proto
);
4140 addrp
= (char *)(src
? &ad
->u
.net
->v4info
.saddr
:
4141 &ad
->u
.net
->v4info
.daddr
);
4144 #if IS_ENABLED(CONFIG_IPV6)
4146 ret
= selinux_parse_skb_ipv6(skb
, ad
, proto
);
4149 addrp
= (char *)(src
? &ad
->u
.net
->v6info
.saddr
:
4150 &ad
->u
.net
->v6info
.daddr
);
4160 "SELinux: failure in selinux_parse_skb(),"
4161 " unable to parse packet\n");
4171 * selinux_skb_peerlbl_sid - Determine the peer label of a packet
4173 * @family: protocol family
4174 * @sid: the packet's peer label SID
4177 * Check the various different forms of network peer labeling and determine
4178 * the peer label/SID for the packet; most of the magic actually occurs in
4179 * the security server function security_net_peersid_cmp(). The function
4180 * returns zero if the value in @sid is valid (although it may be SECSID_NULL)
4181 * or -EACCES if @sid is invalid due to inconsistencies with the different
4185 static int selinux_skb_peerlbl_sid(struct sk_buff
*skb
, u16 family
, u32
*sid
)
4192 err
= selinux_xfrm_skb_sid(skb
, &xfrm_sid
);
4195 err
= selinux_netlbl_skbuff_getsid(skb
, family
, &nlbl_type
, &nlbl_sid
);
4199 err
= security_net_peersid_resolve(nlbl_sid
, nlbl_type
, xfrm_sid
, sid
);
4200 if (unlikely(err
)) {
4202 "SELinux: failure in selinux_skb_peerlbl_sid(),"
4203 " unable to determine packet's peer label\n");
4211 * selinux_conn_sid - Determine the child socket label for a connection
4212 * @sk_sid: the parent socket's SID
4213 * @skb_sid: the packet's SID
4214 * @conn_sid: the resulting connection SID
4216 * If @skb_sid is valid then the user:role:type information from @sk_sid is
4217 * combined with the MLS information from @skb_sid in order to create
4218 * @conn_sid. If @skb_sid is not valid then then @conn_sid is simply a copy
4219 * of @sk_sid. Returns zero on success, negative values on failure.
4222 static int selinux_conn_sid(u32 sk_sid
, u32 skb_sid
, u32
*conn_sid
)
4226 if (skb_sid
!= SECSID_NULL
)
4227 err
= security_sid_mls_copy(sk_sid
, skb_sid
, conn_sid
);
4234 /* socket security operations */
4236 static int socket_sockcreate_sid(const struct task_security_struct
*tsec
,
4237 u16 secclass
, u32
*socksid
)
4239 if (tsec
->sockcreate_sid
> SECSID_NULL
) {
4240 *socksid
= tsec
->sockcreate_sid
;
4244 return security_transition_sid(tsec
->sid
, tsec
->sid
, secclass
, NULL
,
4248 static int sock_has_perm(struct task_struct
*task
, struct sock
*sk
, u32 perms
)
4250 struct sk_security_struct
*sksec
= sk
->sk_security
;
4251 struct common_audit_data ad
;
4252 struct lsm_network_audit net
= {0,};
4253 u32 tsid
= task_sid(task
);
4255 if (sksec
->sid
== SECINITSID_KERNEL
)
4258 ad
.type
= LSM_AUDIT_DATA_NET
;
4262 return avc_has_perm(tsid
, sksec
->sid
, sksec
->sclass
, perms
, &ad
);
4265 static int selinux_socket_create(int family
, int type
,
4266 int protocol
, int kern
)
4268 const struct task_security_struct
*tsec
= current_security();
4276 secclass
= socket_type_to_security_class(family
, type
, protocol
);
4277 rc
= socket_sockcreate_sid(tsec
, secclass
, &newsid
);
4281 return avc_has_perm(tsec
->sid
, newsid
, secclass
, SOCKET__CREATE
, NULL
);
4284 static int selinux_socket_post_create(struct socket
*sock
, int family
,
4285 int type
, int protocol
, int kern
)
4287 const struct task_security_struct
*tsec
= current_security();
4288 struct inode_security_struct
*isec
= inode_security_novalidate(SOCK_INODE(sock
));
4289 struct sk_security_struct
*sksec
;
4292 isec
->sclass
= socket_type_to_security_class(family
, type
, protocol
);
4295 isec
->sid
= SECINITSID_KERNEL
;
4297 err
= socket_sockcreate_sid(tsec
, isec
->sclass
, &(isec
->sid
));
4302 isec
->initialized
= LABEL_INITIALIZED
;
4305 sksec
= sock
->sk
->sk_security
;
4306 sksec
->sid
= isec
->sid
;
4307 sksec
->sclass
= isec
->sclass
;
4308 err
= selinux_netlbl_socket_post_create(sock
->sk
, family
);
4314 /* Range of port numbers used to automatically bind.
4315 Need to determine whether we should perform a name_bind
4316 permission check between the socket and the port number. */
4318 static int selinux_socket_bind(struct socket
*sock
, struct sockaddr
*address
, int addrlen
)
4320 struct sock
*sk
= sock
->sk
;
4324 err
= sock_has_perm(current
, sk
, SOCKET__BIND
);
4329 * If PF_INET or PF_INET6, check name_bind permission for the port.
4330 * Multiple address binding for SCTP is not supported yet: we just
4331 * check the first address now.
4333 family
= sk
->sk_family
;
4334 if (family
== PF_INET
|| family
== PF_INET6
) {
4336 struct sk_security_struct
*sksec
= sk
->sk_security
;
4337 struct common_audit_data ad
;
4338 struct lsm_network_audit net
= {0,};
4339 struct sockaddr_in
*addr4
= NULL
;
4340 struct sockaddr_in6
*addr6
= NULL
;
4341 unsigned short snum
;
4344 if (family
== PF_INET
) {
4345 if (addrlen
< sizeof(struct sockaddr_in
)) {
4349 addr4
= (struct sockaddr_in
*)address
;
4350 snum
= ntohs(addr4
->sin_port
);
4351 addrp
= (char *)&addr4
->sin_addr
.s_addr
;
4353 if (addrlen
< SIN6_LEN_RFC2133
) {
4357 addr6
= (struct sockaddr_in6
*)address
;
4358 snum
= ntohs(addr6
->sin6_port
);
4359 addrp
= (char *)&addr6
->sin6_addr
.s6_addr
;
4365 inet_get_local_port_range(sock_net(sk
), &low
, &high
);
4367 if (snum
< max(PROT_SOCK
, low
) || snum
> high
) {
4368 err
= sel_netport_sid(sk
->sk_protocol
,
4372 ad
.type
= LSM_AUDIT_DATA_NET
;
4374 ad
.u
.net
->sport
= htons(snum
);
4375 ad
.u
.net
->family
= family
;
4376 err
= avc_has_perm(sksec
->sid
, sid
,
4378 SOCKET__NAME_BIND
, &ad
);
4384 switch (sksec
->sclass
) {
4385 case SECCLASS_TCP_SOCKET
:
4386 node_perm
= TCP_SOCKET__NODE_BIND
;
4389 case SECCLASS_UDP_SOCKET
:
4390 node_perm
= UDP_SOCKET__NODE_BIND
;
4393 case SECCLASS_DCCP_SOCKET
:
4394 node_perm
= DCCP_SOCKET__NODE_BIND
;
4398 node_perm
= RAWIP_SOCKET__NODE_BIND
;
4402 err
= sel_netnode_sid(addrp
, family
, &sid
);
4406 ad
.type
= LSM_AUDIT_DATA_NET
;
4408 ad
.u
.net
->sport
= htons(snum
);
4409 ad
.u
.net
->family
= family
;
4411 if (family
== PF_INET
)
4412 ad
.u
.net
->v4info
.saddr
= addr4
->sin_addr
.s_addr
;
4414 ad
.u
.net
->v6info
.saddr
= addr6
->sin6_addr
;
4416 err
= avc_has_perm(sksec
->sid
, sid
,
4417 sksec
->sclass
, node_perm
, &ad
);
4425 static int selinux_socket_connect(struct socket
*sock
, struct sockaddr
*address
, int addrlen
)
4427 struct sock
*sk
= sock
->sk
;
4428 struct sk_security_struct
*sksec
= sk
->sk_security
;
4431 err
= sock_has_perm(current
, sk
, SOCKET__CONNECT
);
4436 * If a TCP or DCCP socket, check name_connect permission for the port.
4438 if (sksec
->sclass
== SECCLASS_TCP_SOCKET
||
4439 sksec
->sclass
== SECCLASS_DCCP_SOCKET
) {
4440 struct common_audit_data ad
;
4441 struct lsm_network_audit net
= {0,};
4442 struct sockaddr_in
*addr4
= NULL
;
4443 struct sockaddr_in6
*addr6
= NULL
;
4444 unsigned short snum
;
4447 if (sk
->sk_family
== PF_INET
) {
4448 addr4
= (struct sockaddr_in
*)address
;
4449 if (addrlen
< sizeof(struct sockaddr_in
))
4451 snum
= ntohs(addr4
->sin_port
);
4453 addr6
= (struct sockaddr_in6
*)address
;
4454 if (addrlen
< SIN6_LEN_RFC2133
)
4456 snum
= ntohs(addr6
->sin6_port
);
4459 err
= sel_netport_sid(sk
->sk_protocol
, snum
, &sid
);
4463 perm
= (sksec
->sclass
== SECCLASS_TCP_SOCKET
) ?
4464 TCP_SOCKET__NAME_CONNECT
: DCCP_SOCKET__NAME_CONNECT
;
4466 ad
.type
= LSM_AUDIT_DATA_NET
;
4468 ad
.u
.net
->dport
= htons(snum
);
4469 ad
.u
.net
->family
= sk
->sk_family
;
4470 err
= avc_has_perm(sksec
->sid
, sid
, sksec
->sclass
, perm
, &ad
);
4475 err
= selinux_netlbl_socket_connect(sk
, address
);
4481 static int selinux_socket_listen(struct socket
*sock
, int backlog
)
4483 return sock_has_perm(current
, sock
->sk
, SOCKET__LISTEN
);
4486 static int selinux_socket_accept(struct socket
*sock
, struct socket
*newsock
)
4489 struct inode_security_struct
*isec
;
4490 struct inode_security_struct
*newisec
;
4492 err
= sock_has_perm(current
, sock
->sk
, SOCKET__ACCEPT
);
4496 newisec
= inode_security_novalidate(SOCK_INODE(newsock
));
4498 isec
= inode_security_novalidate(SOCK_INODE(sock
));
4499 newisec
->sclass
= isec
->sclass
;
4500 newisec
->sid
= isec
->sid
;
4501 newisec
->initialized
= LABEL_INITIALIZED
;
4506 static int selinux_socket_sendmsg(struct socket
*sock
, struct msghdr
*msg
,
4509 return sock_has_perm(current
, sock
->sk
, SOCKET__WRITE
);
4512 static int selinux_socket_recvmsg(struct socket
*sock
, struct msghdr
*msg
,
4513 int size
, int flags
)
4515 return sock_has_perm(current
, sock
->sk
, SOCKET__READ
);
4518 static int selinux_socket_getsockname(struct socket
*sock
)
4520 return sock_has_perm(current
, sock
->sk
, SOCKET__GETATTR
);
4523 static int selinux_socket_getpeername(struct socket
*sock
)
4525 return sock_has_perm(current
, sock
->sk
, SOCKET__GETATTR
);
4528 static int selinux_socket_setsockopt(struct socket
*sock
, int level
, int optname
)
4532 err
= sock_has_perm(current
, sock
->sk
, SOCKET__SETOPT
);
4536 return selinux_netlbl_socket_setsockopt(sock
, level
, optname
);
4539 static int selinux_socket_getsockopt(struct socket
*sock
, int level
,
4542 return sock_has_perm(current
, sock
->sk
, SOCKET__GETOPT
);
4545 static int selinux_socket_shutdown(struct socket
*sock
, int how
)
4547 return sock_has_perm(current
, sock
->sk
, SOCKET__SHUTDOWN
);
4550 static int selinux_socket_unix_stream_connect(struct sock
*sock
,
4554 struct sk_security_struct
*sksec_sock
= sock
->sk_security
;
4555 struct sk_security_struct
*sksec_other
= other
->sk_security
;
4556 struct sk_security_struct
*sksec_new
= newsk
->sk_security
;
4557 struct common_audit_data ad
;
4558 struct lsm_network_audit net
= {0,};
4561 ad
.type
= LSM_AUDIT_DATA_NET
;
4563 ad
.u
.net
->sk
= other
;
4565 err
= avc_has_perm(sksec_sock
->sid
, sksec_other
->sid
,
4566 sksec_other
->sclass
,
4567 UNIX_STREAM_SOCKET__CONNECTTO
, &ad
);
4571 /* server child socket */
4572 sksec_new
->peer_sid
= sksec_sock
->sid
;
4573 err
= security_sid_mls_copy(sksec_other
->sid
, sksec_sock
->sid
,
4578 /* connecting socket */
4579 sksec_sock
->peer_sid
= sksec_new
->sid
;
4584 static int selinux_socket_unix_may_send(struct socket
*sock
,
4585 struct socket
*other
)
4587 struct sk_security_struct
*ssec
= sock
->sk
->sk_security
;
4588 struct sk_security_struct
*osec
= other
->sk
->sk_security
;
4589 struct common_audit_data ad
;
4590 struct lsm_network_audit net
= {0,};
4592 ad
.type
= LSM_AUDIT_DATA_NET
;
4594 ad
.u
.net
->sk
= other
->sk
;
4596 return avc_has_perm(ssec
->sid
, osec
->sid
, osec
->sclass
, SOCKET__SENDTO
,
4600 static int selinux_inet_sys_rcv_skb(struct net
*ns
, int ifindex
,
4601 char *addrp
, u16 family
, u32 peer_sid
,
4602 struct common_audit_data
*ad
)
4608 err
= sel_netif_sid(ns
, ifindex
, &if_sid
);
4611 err
= avc_has_perm(peer_sid
, if_sid
,
4612 SECCLASS_NETIF
, NETIF__INGRESS
, ad
);
4616 err
= sel_netnode_sid(addrp
, family
, &node_sid
);
4619 return avc_has_perm(peer_sid
, node_sid
,
4620 SECCLASS_NODE
, NODE__RECVFROM
, ad
);
4623 static int selinux_sock_rcv_skb_compat(struct sock
*sk
, struct sk_buff
*skb
,
4627 struct sk_security_struct
*sksec
= sk
->sk_security
;
4628 u32 sk_sid
= sksec
->sid
;
4629 struct common_audit_data ad
;
4630 struct lsm_network_audit net
= {0,};
4633 ad
.type
= LSM_AUDIT_DATA_NET
;
4635 ad
.u
.net
->netif
= skb
->skb_iif
;
4636 ad
.u
.net
->family
= family
;
4637 err
= selinux_parse_skb(skb
, &ad
, &addrp
, 1, NULL
);
4641 if (selinux_secmark_enabled()) {
4642 err
= avc_has_perm(sk_sid
, skb
->secmark
, SECCLASS_PACKET
,
4648 err
= selinux_netlbl_sock_rcv_skb(sksec
, skb
, family
, &ad
);
4651 err
= selinux_xfrm_sock_rcv_skb(sksec
->sid
, skb
, &ad
);
4656 static int selinux_socket_sock_rcv_skb(struct sock
*sk
, struct sk_buff
*skb
)
4659 struct sk_security_struct
*sksec
= sk
->sk_security
;
4660 u16 family
= sk
->sk_family
;
4661 u32 sk_sid
= sksec
->sid
;
4662 struct common_audit_data ad
;
4663 struct lsm_network_audit net
= {0,};
4668 if (family
!= PF_INET
&& family
!= PF_INET6
)
4671 /* Handle mapped IPv4 packets arriving via IPv6 sockets */
4672 if (family
== PF_INET6
&& skb
->protocol
== htons(ETH_P_IP
))
4675 /* If any sort of compatibility mode is enabled then handoff processing
4676 * to the selinux_sock_rcv_skb_compat() function to deal with the
4677 * special handling. We do this in an attempt to keep this function
4678 * as fast and as clean as possible. */
4679 if (!selinux_policycap_netpeer
)
4680 return selinux_sock_rcv_skb_compat(sk
, skb
, family
);
4682 secmark_active
= selinux_secmark_enabled();
4683 peerlbl_active
= selinux_peerlbl_enabled();
4684 if (!secmark_active
&& !peerlbl_active
)
4687 ad
.type
= LSM_AUDIT_DATA_NET
;
4689 ad
.u
.net
->netif
= skb
->skb_iif
;
4690 ad
.u
.net
->family
= family
;
4691 err
= selinux_parse_skb(skb
, &ad
, &addrp
, 1, NULL
);
4695 if (peerlbl_active
) {
4698 err
= selinux_skb_peerlbl_sid(skb
, family
, &peer_sid
);
4701 err
= selinux_inet_sys_rcv_skb(sock_net(sk
), skb
->skb_iif
,
4702 addrp
, family
, peer_sid
, &ad
);
4704 selinux_netlbl_err(skb
, family
, err
, 0);
4707 err
= avc_has_perm(sk_sid
, peer_sid
, SECCLASS_PEER
,
4710 selinux_netlbl_err(skb
, family
, err
, 0);
4715 if (secmark_active
) {
4716 err
= avc_has_perm(sk_sid
, skb
->secmark
, SECCLASS_PACKET
,
4725 static int selinux_socket_getpeersec_stream(struct socket
*sock
, char __user
*optval
,
4726 int __user
*optlen
, unsigned len
)
4731 struct sk_security_struct
*sksec
= sock
->sk
->sk_security
;
4732 u32 peer_sid
= SECSID_NULL
;
4734 if (sksec
->sclass
== SECCLASS_UNIX_STREAM_SOCKET
||
4735 sksec
->sclass
== SECCLASS_TCP_SOCKET
)
4736 peer_sid
= sksec
->peer_sid
;
4737 if (peer_sid
== SECSID_NULL
)
4738 return -ENOPROTOOPT
;
4740 err
= security_sid_to_context(peer_sid
, &scontext
, &scontext_len
);
4744 if (scontext_len
> len
) {
4749 if (copy_to_user(optval
, scontext
, scontext_len
))
4753 if (put_user(scontext_len
, optlen
))
4759 static int selinux_socket_getpeersec_dgram(struct socket
*sock
, struct sk_buff
*skb
, u32
*secid
)
4761 u32 peer_secid
= SECSID_NULL
;
4763 struct inode_security_struct
*isec
;
4765 if (skb
&& skb
->protocol
== htons(ETH_P_IP
))
4767 else if (skb
&& skb
->protocol
== htons(ETH_P_IPV6
))
4770 family
= sock
->sk
->sk_family
;
4774 if (sock
&& family
== PF_UNIX
) {
4775 isec
= inode_security_novalidate(SOCK_INODE(sock
));
4776 peer_secid
= isec
->sid
;
4778 selinux_skb_peerlbl_sid(skb
, family
, &peer_secid
);
4781 *secid
= peer_secid
;
4782 if (peer_secid
== SECSID_NULL
)
4787 static int selinux_sk_alloc_security(struct sock
*sk
, int family
, gfp_t priority
)
4789 struct sk_security_struct
*sksec
;
4791 sksec
= kzalloc(sizeof(*sksec
), priority
);
4795 sksec
->peer_sid
= SECINITSID_UNLABELED
;
4796 sksec
->sid
= SECINITSID_UNLABELED
;
4797 sksec
->sclass
= SECCLASS_SOCKET
;
4798 selinux_netlbl_sk_security_reset(sksec
);
4799 sk
->sk_security
= sksec
;
4804 static void selinux_sk_free_security(struct sock
*sk
)
4806 struct sk_security_struct
*sksec
= sk
->sk_security
;
4808 sk
->sk_security
= NULL
;
4809 selinux_netlbl_sk_security_free(sksec
);
4813 static void selinux_sk_clone_security(const struct sock
*sk
, struct sock
*newsk
)
4815 struct sk_security_struct
*sksec
= sk
->sk_security
;
4816 struct sk_security_struct
*newsksec
= newsk
->sk_security
;
4818 newsksec
->sid
= sksec
->sid
;
4819 newsksec
->peer_sid
= sksec
->peer_sid
;
4820 newsksec
->sclass
= sksec
->sclass
;
4822 selinux_netlbl_sk_security_reset(newsksec
);
4825 static void selinux_sk_getsecid(struct sock
*sk
, u32
*secid
)
4828 *secid
= SECINITSID_ANY_SOCKET
;
4830 struct sk_security_struct
*sksec
= sk
->sk_security
;
4832 *secid
= sksec
->sid
;
4836 static void selinux_sock_graft(struct sock
*sk
, struct socket
*parent
)
4838 struct inode_security_struct
*isec
=
4839 inode_security_novalidate(SOCK_INODE(parent
));
4840 struct sk_security_struct
*sksec
= sk
->sk_security
;
4842 if (sk
->sk_family
== PF_INET
|| sk
->sk_family
== PF_INET6
||
4843 sk
->sk_family
== PF_UNIX
)
4844 isec
->sid
= sksec
->sid
;
4845 sksec
->sclass
= isec
->sclass
;
4848 static int selinux_inet_conn_request(struct sock
*sk
, struct sk_buff
*skb
,
4849 struct request_sock
*req
)
4851 struct sk_security_struct
*sksec
= sk
->sk_security
;
4853 u16 family
= req
->rsk_ops
->family
;
4857 err
= selinux_skb_peerlbl_sid(skb
, family
, &peersid
);
4860 err
= selinux_conn_sid(sksec
->sid
, peersid
, &connsid
);
4863 req
->secid
= connsid
;
4864 req
->peer_secid
= peersid
;
4866 return selinux_netlbl_inet_conn_request(req
, family
);
4869 static void selinux_inet_csk_clone(struct sock
*newsk
,
4870 const struct request_sock
*req
)
4872 struct sk_security_struct
*newsksec
= newsk
->sk_security
;
4874 newsksec
->sid
= req
->secid
;
4875 newsksec
->peer_sid
= req
->peer_secid
;
4876 /* NOTE: Ideally, we should also get the isec->sid for the
4877 new socket in sync, but we don't have the isec available yet.
4878 So we will wait until sock_graft to do it, by which
4879 time it will have been created and available. */
4881 /* We don't need to take any sort of lock here as we are the only
4882 * thread with access to newsksec */
4883 selinux_netlbl_inet_csk_clone(newsk
, req
->rsk_ops
->family
);
4886 static void selinux_inet_conn_established(struct sock
*sk
, struct sk_buff
*skb
)
4888 u16 family
= sk
->sk_family
;
4889 struct sk_security_struct
*sksec
= sk
->sk_security
;
4891 /* handle mapped IPv4 packets arriving via IPv6 sockets */
4892 if (family
== PF_INET6
&& skb
->protocol
== htons(ETH_P_IP
))
4895 selinux_skb_peerlbl_sid(skb
, family
, &sksec
->peer_sid
);
4898 static int selinux_secmark_relabel_packet(u32 sid
)
4900 const struct task_security_struct
*__tsec
;
4903 __tsec
= current_security();
4906 return avc_has_perm(tsid
, sid
, SECCLASS_PACKET
, PACKET__RELABELTO
, NULL
);
4909 static void selinux_secmark_refcount_inc(void)
4911 atomic_inc(&selinux_secmark_refcount
);
4914 static void selinux_secmark_refcount_dec(void)
4916 atomic_dec(&selinux_secmark_refcount
);
4919 static void selinux_req_classify_flow(const struct request_sock
*req
,
4922 fl
->flowi_secid
= req
->secid
;
4925 static int selinux_tun_dev_alloc_security(void **security
)
4927 struct tun_security_struct
*tunsec
;
4929 tunsec
= kzalloc(sizeof(*tunsec
), GFP_KERNEL
);
4932 tunsec
->sid
= current_sid();
4938 static void selinux_tun_dev_free_security(void *security
)
4943 static int selinux_tun_dev_create(void)
4945 u32 sid
= current_sid();
4947 /* we aren't taking into account the "sockcreate" SID since the socket
4948 * that is being created here is not a socket in the traditional sense,
4949 * instead it is a private sock, accessible only to the kernel, and
4950 * representing a wide range of network traffic spanning multiple
4951 * connections unlike traditional sockets - check the TUN driver to
4952 * get a better understanding of why this socket is special */
4954 return avc_has_perm(sid
, sid
, SECCLASS_TUN_SOCKET
, TUN_SOCKET__CREATE
,
4958 static int selinux_tun_dev_attach_queue(void *security
)
4960 struct tun_security_struct
*tunsec
= security
;
4962 return avc_has_perm(current_sid(), tunsec
->sid
, SECCLASS_TUN_SOCKET
,
4963 TUN_SOCKET__ATTACH_QUEUE
, NULL
);
4966 static int selinux_tun_dev_attach(struct sock
*sk
, void *security
)
4968 struct tun_security_struct
*tunsec
= security
;
4969 struct sk_security_struct
*sksec
= sk
->sk_security
;
4971 /* we don't currently perform any NetLabel based labeling here and it
4972 * isn't clear that we would want to do so anyway; while we could apply
4973 * labeling without the support of the TUN user the resulting labeled
4974 * traffic from the other end of the connection would almost certainly
4975 * cause confusion to the TUN user that had no idea network labeling
4976 * protocols were being used */
4978 sksec
->sid
= tunsec
->sid
;
4979 sksec
->sclass
= SECCLASS_TUN_SOCKET
;
4984 static int selinux_tun_dev_open(void *security
)
4986 struct tun_security_struct
*tunsec
= security
;
4987 u32 sid
= current_sid();
4990 err
= avc_has_perm(sid
, tunsec
->sid
, SECCLASS_TUN_SOCKET
,
4991 TUN_SOCKET__RELABELFROM
, NULL
);
4994 err
= avc_has_perm(sid
, sid
, SECCLASS_TUN_SOCKET
,
4995 TUN_SOCKET__RELABELTO
, NULL
);
5003 static int selinux_nlmsg_perm(struct sock
*sk
, struct sk_buff
*skb
)
5007 struct nlmsghdr
*nlh
;
5008 struct sk_security_struct
*sksec
= sk
->sk_security
;
5010 if (skb
->len
< NLMSG_HDRLEN
) {
5014 nlh
= nlmsg_hdr(skb
);
5016 err
= selinux_nlmsg_lookup(sksec
->sclass
, nlh
->nlmsg_type
, &perm
);
5018 if (err
== -EINVAL
) {
5019 pr_warn_ratelimited("SELinux: unrecognized netlink"
5020 " message: protocol=%hu nlmsg_type=%hu sclass=%s"
5021 " pig=%d comm=%s\n",
5022 sk
->sk_protocol
, nlh
->nlmsg_type
,
5023 secclass_map
[sksec
->sclass
- 1].name
,
5024 task_pid_nr(current
), current
->comm
);
5025 if (!selinux_enforcing
|| security_get_allow_unknown())
5035 err
= sock_has_perm(current
, sk
, perm
);
5040 #ifdef CONFIG_NETFILTER
5042 static unsigned int selinux_ip_forward(struct sk_buff
*skb
,
5043 const struct net_device
*indev
,
5049 struct common_audit_data ad
;
5050 struct lsm_network_audit net
= {0,};
5055 if (!selinux_policycap_netpeer
)
5058 secmark_active
= selinux_secmark_enabled();
5059 netlbl_active
= netlbl_enabled();
5060 peerlbl_active
= selinux_peerlbl_enabled();
5061 if (!secmark_active
&& !peerlbl_active
)
5064 if (selinux_skb_peerlbl_sid(skb
, family
, &peer_sid
) != 0)
5067 ad
.type
= LSM_AUDIT_DATA_NET
;
5069 ad
.u
.net
->netif
= indev
->ifindex
;
5070 ad
.u
.net
->family
= family
;
5071 if (selinux_parse_skb(skb
, &ad
, &addrp
, 1, NULL
) != 0)
5074 if (peerlbl_active
) {
5075 err
= selinux_inet_sys_rcv_skb(dev_net(indev
), indev
->ifindex
,
5076 addrp
, family
, peer_sid
, &ad
);
5078 selinux_netlbl_err(skb
, family
, err
, 1);
5084 if (avc_has_perm(peer_sid
, skb
->secmark
,
5085 SECCLASS_PACKET
, PACKET__FORWARD_IN
, &ad
))
5089 /* we do this in the FORWARD path and not the POST_ROUTING
5090 * path because we want to make sure we apply the necessary
5091 * labeling before IPsec is applied so we can leverage AH
5093 if (selinux_netlbl_skbuff_setsid(skb
, family
, peer_sid
) != 0)
5099 static unsigned int selinux_ipv4_forward(void *priv
,
5100 struct sk_buff
*skb
,
5101 const struct nf_hook_state
*state
)
5103 return selinux_ip_forward(skb
, state
->in
, PF_INET
);
5106 #if IS_ENABLED(CONFIG_IPV6)
5107 static unsigned int selinux_ipv6_forward(void *priv
,
5108 struct sk_buff
*skb
,
5109 const struct nf_hook_state
*state
)
5111 return selinux_ip_forward(skb
, state
->in
, PF_INET6
);
5115 static unsigned int selinux_ip_output(struct sk_buff
*skb
,
5121 if (!netlbl_enabled())
5124 /* we do this in the LOCAL_OUT path and not the POST_ROUTING path
5125 * because we want to make sure we apply the necessary labeling
5126 * before IPsec is applied so we can leverage AH protection */
5129 struct sk_security_struct
*sksec
;
5131 if (sk_listener(sk
))
5132 /* if the socket is the listening state then this
5133 * packet is a SYN-ACK packet which means it needs to
5134 * be labeled based on the connection/request_sock and
5135 * not the parent socket. unfortunately, we can't
5136 * lookup the request_sock yet as it isn't queued on
5137 * the parent socket until after the SYN-ACK is sent.
5138 * the "solution" is to simply pass the packet as-is
5139 * as any IP option based labeling should be copied
5140 * from the initial connection request (in the IP
5141 * layer). it is far from ideal, but until we get a
5142 * security label in the packet itself this is the
5143 * best we can do. */
5146 /* standard practice, label using the parent socket */
5147 sksec
= sk
->sk_security
;
5150 sid
= SECINITSID_KERNEL
;
5151 if (selinux_netlbl_skbuff_setsid(skb
, family
, sid
) != 0)
5157 static unsigned int selinux_ipv4_output(void *priv
,
5158 struct sk_buff
*skb
,
5159 const struct nf_hook_state
*state
)
5161 return selinux_ip_output(skb
, PF_INET
);
5164 #if IS_ENABLED(CONFIG_IPV6)
5165 static unsigned int selinux_ipv6_output(void *priv
,
5166 struct sk_buff
*skb
,
5167 const struct nf_hook_state
*state
)
5169 return selinux_ip_output(skb
, PF_INET6
);
5173 static unsigned int selinux_ip_postroute_compat(struct sk_buff
*skb
,
5177 struct sock
*sk
= skb_to_full_sk(skb
);
5178 struct sk_security_struct
*sksec
;
5179 struct common_audit_data ad
;
5180 struct lsm_network_audit net
= {0,};
5186 sksec
= sk
->sk_security
;
5188 ad
.type
= LSM_AUDIT_DATA_NET
;
5190 ad
.u
.net
->netif
= ifindex
;
5191 ad
.u
.net
->family
= family
;
5192 if (selinux_parse_skb(skb
, &ad
, &addrp
, 0, &proto
))
5195 if (selinux_secmark_enabled())
5196 if (avc_has_perm(sksec
->sid
, skb
->secmark
,
5197 SECCLASS_PACKET
, PACKET__SEND
, &ad
))
5198 return NF_DROP_ERR(-ECONNREFUSED
);
5200 if (selinux_xfrm_postroute_last(sksec
->sid
, skb
, &ad
, proto
))
5201 return NF_DROP_ERR(-ECONNREFUSED
);
5206 static unsigned int selinux_ip_postroute(struct sk_buff
*skb
,
5207 const struct net_device
*outdev
,
5212 int ifindex
= outdev
->ifindex
;
5214 struct common_audit_data ad
;
5215 struct lsm_network_audit net
= {0,};
5220 /* If any sort of compatibility mode is enabled then handoff processing
5221 * to the selinux_ip_postroute_compat() function to deal with the
5222 * special handling. We do this in an attempt to keep this function
5223 * as fast and as clean as possible. */
5224 if (!selinux_policycap_netpeer
)
5225 return selinux_ip_postroute_compat(skb
, ifindex
, family
);
5227 secmark_active
= selinux_secmark_enabled();
5228 peerlbl_active
= selinux_peerlbl_enabled();
5229 if (!secmark_active
&& !peerlbl_active
)
5232 sk
= skb_to_full_sk(skb
);
5235 /* If skb->dst->xfrm is non-NULL then the packet is undergoing an IPsec
5236 * packet transformation so allow the packet to pass without any checks
5237 * since we'll have another chance to perform access control checks
5238 * when the packet is on it's final way out.
5239 * NOTE: there appear to be some IPv6 multicast cases where skb->dst
5240 * is NULL, in this case go ahead and apply access control.
5241 * NOTE: if this is a local socket (skb->sk != NULL) that is in the
5242 * TCP listening state we cannot wait until the XFRM processing
5243 * is done as we will miss out on the SA label if we do;
5244 * unfortunately, this means more work, but it is only once per
5246 if (skb_dst(skb
) != NULL
&& skb_dst(skb
)->xfrm
!= NULL
&&
5247 !(sk
&& sk_listener(sk
)))
5252 /* Without an associated socket the packet is either coming
5253 * from the kernel or it is being forwarded; check the packet
5254 * to determine which and if the packet is being forwarded
5255 * query the packet directly to determine the security label. */
5257 secmark_perm
= PACKET__FORWARD_OUT
;
5258 if (selinux_skb_peerlbl_sid(skb
, family
, &peer_sid
))
5261 secmark_perm
= PACKET__SEND
;
5262 peer_sid
= SECINITSID_KERNEL
;
5264 } else if (sk_listener(sk
)) {
5265 /* Locally generated packet but the associated socket is in the
5266 * listening state which means this is a SYN-ACK packet. In
5267 * this particular case the correct security label is assigned
5268 * to the connection/request_sock but unfortunately we can't
5269 * query the request_sock as it isn't queued on the parent
5270 * socket until after the SYN-ACK packet is sent; the only
5271 * viable choice is to regenerate the label like we do in
5272 * selinux_inet_conn_request(). See also selinux_ip_output()
5273 * for similar problems. */
5275 struct sk_security_struct
*sksec
;
5277 sksec
= sk
->sk_security
;
5278 if (selinux_skb_peerlbl_sid(skb
, family
, &skb_sid
))
5280 /* At this point, if the returned skb peerlbl is SECSID_NULL
5281 * and the packet has been through at least one XFRM
5282 * transformation then we must be dealing with the "final"
5283 * form of labeled IPsec packet; since we've already applied
5284 * all of our access controls on this packet we can safely
5285 * pass the packet. */
5286 if (skb_sid
== SECSID_NULL
) {
5289 if (IPCB(skb
)->flags
& IPSKB_XFRM_TRANSFORMED
)
5293 if (IP6CB(skb
)->flags
& IP6SKB_XFRM_TRANSFORMED
)
5297 return NF_DROP_ERR(-ECONNREFUSED
);
5300 if (selinux_conn_sid(sksec
->sid
, skb_sid
, &peer_sid
))
5302 secmark_perm
= PACKET__SEND
;
5304 /* Locally generated packet, fetch the security label from the
5305 * associated socket. */
5306 struct sk_security_struct
*sksec
= sk
->sk_security
;
5307 peer_sid
= sksec
->sid
;
5308 secmark_perm
= PACKET__SEND
;
5311 ad
.type
= LSM_AUDIT_DATA_NET
;
5313 ad
.u
.net
->netif
= ifindex
;
5314 ad
.u
.net
->family
= family
;
5315 if (selinux_parse_skb(skb
, &ad
, &addrp
, 0, NULL
))
5319 if (avc_has_perm(peer_sid
, skb
->secmark
,
5320 SECCLASS_PACKET
, secmark_perm
, &ad
))
5321 return NF_DROP_ERR(-ECONNREFUSED
);
5323 if (peerlbl_active
) {
5327 if (sel_netif_sid(dev_net(outdev
), ifindex
, &if_sid
))
5329 if (avc_has_perm(peer_sid
, if_sid
,
5330 SECCLASS_NETIF
, NETIF__EGRESS
, &ad
))
5331 return NF_DROP_ERR(-ECONNREFUSED
);
5333 if (sel_netnode_sid(addrp
, family
, &node_sid
))
5335 if (avc_has_perm(peer_sid
, node_sid
,
5336 SECCLASS_NODE
, NODE__SENDTO
, &ad
))
5337 return NF_DROP_ERR(-ECONNREFUSED
);
5343 static unsigned int selinux_ipv4_postroute(void *priv
,
5344 struct sk_buff
*skb
,
5345 const struct nf_hook_state
*state
)
5347 return selinux_ip_postroute(skb
, state
->out
, PF_INET
);
5350 #if IS_ENABLED(CONFIG_IPV6)
5351 static unsigned int selinux_ipv6_postroute(void *priv
,
5352 struct sk_buff
*skb
,
5353 const struct nf_hook_state
*state
)
5355 return selinux_ip_postroute(skb
, state
->out
, PF_INET6
);
5359 #endif /* CONFIG_NETFILTER */
5361 static int selinux_netlink_send(struct sock
*sk
, struct sk_buff
*skb
)
5363 return selinux_nlmsg_perm(sk
, skb
);
5366 static int ipc_alloc_security(struct task_struct
*task
,
5367 struct kern_ipc_perm
*perm
,
5370 struct ipc_security_struct
*isec
;
5373 isec
= kzalloc(sizeof(struct ipc_security_struct
), GFP_KERNEL
);
5377 sid
= task_sid(task
);
5378 isec
->sclass
= sclass
;
5380 perm
->security
= isec
;
5385 static void ipc_free_security(struct kern_ipc_perm
*perm
)
5387 struct ipc_security_struct
*isec
= perm
->security
;
5388 perm
->security
= NULL
;
5392 static int msg_msg_alloc_security(struct msg_msg
*msg
)
5394 struct msg_security_struct
*msec
;
5396 msec
= kzalloc(sizeof(struct msg_security_struct
), GFP_KERNEL
);
5400 msec
->sid
= SECINITSID_UNLABELED
;
5401 msg
->security
= msec
;
5406 static void msg_msg_free_security(struct msg_msg
*msg
)
5408 struct msg_security_struct
*msec
= msg
->security
;
5410 msg
->security
= NULL
;
5414 static int ipc_has_perm(struct kern_ipc_perm
*ipc_perms
,
5417 struct ipc_security_struct
*isec
;
5418 struct common_audit_data ad
;
5419 u32 sid
= current_sid();
5421 isec
= ipc_perms
->security
;
5423 ad
.type
= LSM_AUDIT_DATA_IPC
;
5424 ad
.u
.ipc_id
= ipc_perms
->key
;
5426 return avc_has_perm(sid
, isec
->sid
, isec
->sclass
, perms
, &ad
);
5429 static int selinux_msg_msg_alloc_security(struct msg_msg
*msg
)
5431 return msg_msg_alloc_security(msg
);
5434 static void selinux_msg_msg_free_security(struct msg_msg
*msg
)
5436 msg_msg_free_security(msg
);
5439 /* message queue security operations */
5440 static int selinux_msg_queue_alloc_security(struct msg_queue
*msq
)
5442 struct ipc_security_struct
*isec
;
5443 struct common_audit_data ad
;
5444 u32 sid
= current_sid();
5447 rc
= ipc_alloc_security(current
, &msq
->q_perm
, SECCLASS_MSGQ
);
5451 isec
= msq
->q_perm
.security
;
5453 ad
.type
= LSM_AUDIT_DATA_IPC
;
5454 ad
.u
.ipc_id
= msq
->q_perm
.key
;
5456 rc
= avc_has_perm(sid
, isec
->sid
, SECCLASS_MSGQ
,
5459 ipc_free_security(&msq
->q_perm
);
5465 static void selinux_msg_queue_free_security(struct msg_queue
*msq
)
5467 ipc_free_security(&msq
->q_perm
);
5470 static int selinux_msg_queue_associate(struct msg_queue
*msq
, int msqflg
)
5472 struct ipc_security_struct
*isec
;
5473 struct common_audit_data ad
;
5474 u32 sid
= current_sid();
5476 isec
= msq
->q_perm
.security
;
5478 ad
.type
= LSM_AUDIT_DATA_IPC
;
5479 ad
.u
.ipc_id
= msq
->q_perm
.key
;
5481 return avc_has_perm(sid
, isec
->sid
, SECCLASS_MSGQ
,
5482 MSGQ__ASSOCIATE
, &ad
);
5485 static int selinux_msg_queue_msgctl(struct msg_queue
*msq
, int cmd
)
5493 /* No specific object, just general system-wide information. */
5494 return task_has_system(current
, SYSTEM__IPC_INFO
);
5497 perms
= MSGQ__GETATTR
| MSGQ__ASSOCIATE
;
5500 perms
= MSGQ__SETATTR
;
5503 perms
= MSGQ__DESTROY
;
5509 err
= ipc_has_perm(&msq
->q_perm
, perms
);
5513 static int selinux_msg_queue_msgsnd(struct msg_queue
*msq
, struct msg_msg
*msg
, int msqflg
)
5515 struct ipc_security_struct
*isec
;
5516 struct msg_security_struct
*msec
;
5517 struct common_audit_data ad
;
5518 u32 sid
= current_sid();
5521 isec
= msq
->q_perm
.security
;
5522 msec
= msg
->security
;
5525 * First time through, need to assign label to the message
5527 if (msec
->sid
== SECINITSID_UNLABELED
) {
5529 * Compute new sid based on current process and
5530 * message queue this message will be stored in
5532 rc
= security_transition_sid(sid
, isec
->sid
, SECCLASS_MSG
,
5538 ad
.type
= LSM_AUDIT_DATA_IPC
;
5539 ad
.u
.ipc_id
= msq
->q_perm
.key
;
5541 /* Can this process write to the queue? */
5542 rc
= avc_has_perm(sid
, isec
->sid
, SECCLASS_MSGQ
,
5545 /* Can this process send the message */
5546 rc
= avc_has_perm(sid
, msec
->sid
, SECCLASS_MSG
,
5549 /* Can the message be put in the queue? */
5550 rc
= avc_has_perm(msec
->sid
, isec
->sid
, SECCLASS_MSGQ
,
5551 MSGQ__ENQUEUE
, &ad
);
5556 static int selinux_msg_queue_msgrcv(struct msg_queue
*msq
, struct msg_msg
*msg
,
5557 struct task_struct
*target
,
5558 long type
, int mode
)
5560 struct ipc_security_struct
*isec
;
5561 struct msg_security_struct
*msec
;
5562 struct common_audit_data ad
;
5563 u32 sid
= task_sid(target
);
5566 isec
= msq
->q_perm
.security
;
5567 msec
= msg
->security
;
5569 ad
.type
= LSM_AUDIT_DATA_IPC
;
5570 ad
.u
.ipc_id
= msq
->q_perm
.key
;
5572 rc
= avc_has_perm(sid
, isec
->sid
,
5573 SECCLASS_MSGQ
, MSGQ__READ
, &ad
);
5575 rc
= avc_has_perm(sid
, msec
->sid
,
5576 SECCLASS_MSG
, MSG__RECEIVE
, &ad
);
5580 /* Shared Memory security operations */
5581 static int selinux_shm_alloc_security(struct shmid_kernel
*shp
)
5583 struct ipc_security_struct
*isec
;
5584 struct common_audit_data ad
;
5585 u32 sid
= current_sid();
5588 rc
= ipc_alloc_security(current
, &shp
->shm_perm
, SECCLASS_SHM
);
5592 isec
= shp
->shm_perm
.security
;
5594 ad
.type
= LSM_AUDIT_DATA_IPC
;
5595 ad
.u
.ipc_id
= shp
->shm_perm
.key
;
5597 rc
= avc_has_perm(sid
, isec
->sid
, SECCLASS_SHM
,
5600 ipc_free_security(&shp
->shm_perm
);
5606 static void selinux_shm_free_security(struct shmid_kernel
*shp
)
5608 ipc_free_security(&shp
->shm_perm
);
5611 static int selinux_shm_associate(struct shmid_kernel
*shp
, int shmflg
)
5613 struct ipc_security_struct
*isec
;
5614 struct common_audit_data ad
;
5615 u32 sid
= current_sid();
5617 isec
= shp
->shm_perm
.security
;
5619 ad
.type
= LSM_AUDIT_DATA_IPC
;
5620 ad
.u
.ipc_id
= shp
->shm_perm
.key
;
5622 return avc_has_perm(sid
, isec
->sid
, SECCLASS_SHM
,
5623 SHM__ASSOCIATE
, &ad
);
5626 /* Note, at this point, shp is locked down */
5627 static int selinux_shm_shmctl(struct shmid_kernel
*shp
, int cmd
)
5635 /* No specific object, just general system-wide information. */
5636 return task_has_system(current
, SYSTEM__IPC_INFO
);
5639 perms
= SHM__GETATTR
| SHM__ASSOCIATE
;
5642 perms
= SHM__SETATTR
;
5649 perms
= SHM__DESTROY
;
5655 err
= ipc_has_perm(&shp
->shm_perm
, perms
);
5659 static int selinux_shm_shmat(struct shmid_kernel
*shp
,
5660 char __user
*shmaddr
, int shmflg
)
5664 if (shmflg
& SHM_RDONLY
)
5667 perms
= SHM__READ
| SHM__WRITE
;
5669 return ipc_has_perm(&shp
->shm_perm
, perms
);
5672 /* Semaphore security operations */
5673 static int selinux_sem_alloc_security(struct sem_array
*sma
)
5675 struct ipc_security_struct
*isec
;
5676 struct common_audit_data ad
;
5677 u32 sid
= current_sid();
5680 rc
= ipc_alloc_security(current
, &sma
->sem_perm
, SECCLASS_SEM
);
5684 isec
= sma
->sem_perm
.security
;
5686 ad
.type
= LSM_AUDIT_DATA_IPC
;
5687 ad
.u
.ipc_id
= sma
->sem_perm
.key
;
5689 rc
= avc_has_perm(sid
, isec
->sid
, SECCLASS_SEM
,
5692 ipc_free_security(&sma
->sem_perm
);
5698 static void selinux_sem_free_security(struct sem_array
*sma
)
5700 ipc_free_security(&sma
->sem_perm
);
5703 static int selinux_sem_associate(struct sem_array
*sma
, int semflg
)
5705 struct ipc_security_struct
*isec
;
5706 struct common_audit_data ad
;
5707 u32 sid
= current_sid();
5709 isec
= sma
->sem_perm
.security
;
5711 ad
.type
= LSM_AUDIT_DATA_IPC
;
5712 ad
.u
.ipc_id
= sma
->sem_perm
.key
;
5714 return avc_has_perm(sid
, isec
->sid
, SECCLASS_SEM
,
5715 SEM__ASSOCIATE
, &ad
);
5718 /* Note, at this point, sma is locked down */
5719 static int selinux_sem_semctl(struct sem_array
*sma
, int cmd
)
5727 /* No specific object, just general system-wide information. */
5728 return task_has_system(current
, SYSTEM__IPC_INFO
);
5732 perms
= SEM__GETATTR
;
5743 perms
= SEM__DESTROY
;
5746 perms
= SEM__SETATTR
;
5750 perms
= SEM__GETATTR
| SEM__ASSOCIATE
;
5756 err
= ipc_has_perm(&sma
->sem_perm
, perms
);
5760 static int selinux_sem_semop(struct sem_array
*sma
,
5761 struct sembuf
*sops
, unsigned nsops
, int alter
)
5766 perms
= SEM__READ
| SEM__WRITE
;
5770 return ipc_has_perm(&sma
->sem_perm
, perms
);
5773 static int selinux_ipc_permission(struct kern_ipc_perm
*ipcp
, short flag
)
5779 av
|= IPC__UNIX_READ
;
5781 av
|= IPC__UNIX_WRITE
;
5786 return ipc_has_perm(ipcp
, av
);
5789 static void selinux_ipc_getsecid(struct kern_ipc_perm
*ipcp
, u32
*secid
)
5791 struct ipc_security_struct
*isec
= ipcp
->security
;
5795 static void selinux_d_instantiate(struct dentry
*dentry
, struct inode
*inode
)
5798 inode_doinit_with_dentry(inode
, dentry
);
5801 static int selinux_getprocattr(struct task_struct
*p
,
5802 char *name
, char **value
)
5804 const struct task_security_struct
*__tsec
;
5810 error
= current_has_perm(p
, PROCESS__GETATTR
);
5816 __tsec
= __task_cred(p
)->security
;
5818 if (!strcmp(name
, "current"))
5820 else if (!strcmp(name
, "prev"))
5822 else if (!strcmp(name
, "exec"))
5823 sid
= __tsec
->exec_sid
;
5824 else if (!strcmp(name
, "fscreate"))
5825 sid
= __tsec
->create_sid
;
5826 else if (!strcmp(name
, "keycreate"))
5827 sid
= __tsec
->keycreate_sid
;
5828 else if (!strcmp(name
, "sockcreate"))
5829 sid
= __tsec
->sockcreate_sid
;
5837 error
= security_sid_to_context(sid
, value
, &len
);
5847 static int selinux_setprocattr(struct task_struct
*p
,
5848 char *name
, void *value
, size_t size
)
5850 struct task_security_struct
*tsec
;
5857 /* SELinux only allows a process to change its own
5858 security attributes. */
5863 * Basic control over ability to set these attributes at all.
5864 * current == p, but we'll pass them separately in case the
5865 * above restriction is ever removed.
5867 if (!strcmp(name
, "exec"))
5868 error
= current_has_perm(p
, PROCESS__SETEXEC
);
5869 else if (!strcmp(name
, "fscreate"))
5870 error
= current_has_perm(p
, PROCESS__SETFSCREATE
);
5871 else if (!strcmp(name
, "keycreate"))
5872 error
= current_has_perm(p
, PROCESS__SETKEYCREATE
);
5873 else if (!strcmp(name
, "sockcreate"))
5874 error
= current_has_perm(p
, PROCESS__SETSOCKCREATE
);
5875 else if (!strcmp(name
, "current"))
5876 error
= current_has_perm(p
, PROCESS__SETCURRENT
);
5882 /* Obtain a SID for the context, if one was specified. */
5883 if (size
&& str
[0] && str
[0] != '\n') {
5884 if (str
[size
-1] == '\n') {
5888 error
= security_context_to_sid(value
, size
, &sid
, GFP_KERNEL
);
5889 if (error
== -EINVAL
&& !strcmp(name
, "fscreate")) {
5890 if (!capable(CAP_MAC_ADMIN
)) {
5891 struct audit_buffer
*ab
;
5894 /* We strip a nul only if it is at the end, otherwise the
5895 * context contains a nul and we should audit that */
5896 if (str
[size
- 1] == '\0')
5897 audit_size
= size
- 1;
5900 ab
= audit_log_start(current
->audit_context
, GFP_ATOMIC
, AUDIT_SELINUX_ERR
);
5901 audit_log_format(ab
, "op=fscreate invalid_context=");
5902 audit_log_n_untrustedstring(ab
, value
, audit_size
);
5907 error
= security_context_to_sid_force(value
, size
,
5914 new = prepare_creds();
5918 /* Permission checking based on the specified context is
5919 performed during the actual operation (execve,
5920 open/mkdir/...), when we know the full context of the
5921 operation. See selinux_bprm_set_creds for the execve
5922 checks and may_create for the file creation checks. The
5923 operation will then fail if the context is not permitted. */
5924 tsec
= new->security
;
5925 if (!strcmp(name
, "exec")) {
5926 tsec
->exec_sid
= sid
;
5927 } else if (!strcmp(name
, "fscreate")) {
5928 tsec
->create_sid
= sid
;
5929 } else if (!strcmp(name
, "keycreate")) {
5930 error
= may_create_key(sid
, p
);
5933 tsec
->keycreate_sid
= sid
;
5934 } else if (!strcmp(name
, "sockcreate")) {
5935 tsec
->sockcreate_sid
= sid
;
5936 } else if (!strcmp(name
, "current")) {
5941 /* Only allow single threaded processes to change context */
5943 if (!current_is_single_threaded()) {
5944 error
= security_bounded_transition(tsec
->sid
, sid
);
5949 /* Check permissions for the transition. */
5950 error
= avc_has_perm(tsec
->sid
, sid
, SECCLASS_PROCESS
,
5951 PROCESS__DYNTRANSITION
, NULL
);
5955 /* Check for ptracing, and update the task SID if ok.
5956 Otherwise, leave SID unchanged and fail. */
5957 ptsid
= ptrace_parent_sid(p
);
5959 error
= avc_has_perm(ptsid
, sid
, SECCLASS_PROCESS
,
5960 PROCESS__PTRACE
, NULL
);
5979 static int selinux_ismaclabel(const char *name
)
5981 return (strcmp(name
, XATTR_SELINUX_SUFFIX
) == 0);
5984 static int selinux_secid_to_secctx(u32 secid
, char **secdata
, u32
*seclen
)
5986 return security_sid_to_context(secid
, secdata
, seclen
);
5989 static int selinux_secctx_to_secid(const char *secdata
, u32 seclen
, u32
*secid
)
5991 return security_context_to_sid(secdata
, seclen
, secid
, GFP_KERNEL
);
5994 static void selinux_release_secctx(char *secdata
, u32 seclen
)
5999 static void selinux_inode_invalidate_secctx(struct inode
*inode
)
6001 struct inode_security_struct
*isec
= inode
->i_security
;
6003 mutex_lock(&isec
->lock
);
6004 isec
->initialized
= LABEL_INVALID
;
6005 mutex_unlock(&isec
->lock
);
6009 * called with inode->i_mutex locked
6011 static int selinux_inode_notifysecctx(struct inode
*inode
, void *ctx
, u32 ctxlen
)
6013 int rc
= selinux_inode_setsecurity(inode
, XATTR_SELINUX_SUFFIX
,
6015 /* Do not return error when suppressing label (SBLABEL_MNT not set). */
6016 return rc
== -EOPNOTSUPP
? 0 : rc
;
6020 * called with inode->i_mutex locked
6022 static int selinux_inode_setsecctx(struct dentry
*dentry
, void *ctx
, u32 ctxlen
)
6024 return __vfs_setxattr_noperm(dentry
, XATTR_NAME_SELINUX
, ctx
, ctxlen
, 0);
6027 static int selinux_inode_getsecctx(struct inode
*inode
, void **ctx
, u32
*ctxlen
)
6030 len
= selinux_inode_getsecurity(inode
, XATTR_SELINUX_SUFFIX
,
6039 static int selinux_key_alloc(struct key
*k
, const struct cred
*cred
,
6040 unsigned long flags
)
6042 const struct task_security_struct
*tsec
;
6043 struct key_security_struct
*ksec
;
6045 ksec
= kzalloc(sizeof(struct key_security_struct
), GFP_KERNEL
);
6049 tsec
= cred
->security
;
6050 if (tsec
->keycreate_sid
)
6051 ksec
->sid
= tsec
->keycreate_sid
;
6053 ksec
->sid
= tsec
->sid
;
6059 static void selinux_key_free(struct key
*k
)
6061 struct key_security_struct
*ksec
= k
->security
;
6067 static int selinux_key_permission(key_ref_t key_ref
,
6068 const struct cred
*cred
,
6072 struct key_security_struct
*ksec
;
6075 /* if no specific permissions are requested, we skip the
6076 permission check. No serious, additional covert channels
6077 appear to be created. */
6081 sid
= cred_sid(cred
);
6083 key
= key_ref_to_ptr(key_ref
);
6084 ksec
= key
->security
;
6086 return avc_has_perm(sid
, ksec
->sid
, SECCLASS_KEY
, perm
, NULL
);
6089 static int selinux_key_getsecurity(struct key
*key
, char **_buffer
)
6091 struct key_security_struct
*ksec
= key
->security
;
6092 char *context
= NULL
;
6096 rc
= security_sid_to_context(ksec
->sid
, &context
, &len
);
6105 static struct security_hook_list selinux_hooks
[] = {
6106 LSM_HOOK_INIT(binder_set_context_mgr
, selinux_binder_set_context_mgr
),
6107 LSM_HOOK_INIT(binder_transaction
, selinux_binder_transaction
),
6108 LSM_HOOK_INIT(binder_transfer_binder
, selinux_binder_transfer_binder
),
6109 LSM_HOOK_INIT(binder_transfer_file
, selinux_binder_transfer_file
),
6111 LSM_HOOK_INIT(ptrace_access_check
, selinux_ptrace_access_check
),
6112 LSM_HOOK_INIT(ptrace_traceme
, selinux_ptrace_traceme
),
6113 LSM_HOOK_INIT(capget
, selinux_capget
),
6114 LSM_HOOK_INIT(capset
, selinux_capset
),
6115 LSM_HOOK_INIT(capable
, selinux_capable
),
6116 LSM_HOOK_INIT(quotactl
, selinux_quotactl
),
6117 LSM_HOOK_INIT(quota_on
, selinux_quota_on
),
6118 LSM_HOOK_INIT(syslog
, selinux_syslog
),
6119 LSM_HOOK_INIT(vm_enough_memory
, selinux_vm_enough_memory
),
6121 LSM_HOOK_INIT(netlink_send
, selinux_netlink_send
),
6123 LSM_HOOK_INIT(bprm_set_creds
, selinux_bprm_set_creds
),
6124 LSM_HOOK_INIT(bprm_committing_creds
, selinux_bprm_committing_creds
),
6125 LSM_HOOK_INIT(bprm_committed_creds
, selinux_bprm_committed_creds
),
6126 LSM_HOOK_INIT(bprm_secureexec
, selinux_bprm_secureexec
),
6128 LSM_HOOK_INIT(sb_alloc_security
, selinux_sb_alloc_security
),
6129 LSM_HOOK_INIT(sb_free_security
, selinux_sb_free_security
),
6130 LSM_HOOK_INIT(sb_copy_data
, selinux_sb_copy_data
),
6131 LSM_HOOK_INIT(sb_remount
, selinux_sb_remount
),
6132 LSM_HOOK_INIT(sb_kern_mount
, selinux_sb_kern_mount
),
6133 LSM_HOOK_INIT(sb_show_options
, selinux_sb_show_options
),
6134 LSM_HOOK_INIT(sb_statfs
, selinux_sb_statfs
),
6135 LSM_HOOK_INIT(sb_mount
, selinux_mount
),
6136 LSM_HOOK_INIT(sb_umount
, selinux_umount
),
6137 LSM_HOOK_INIT(sb_set_mnt_opts
, selinux_set_mnt_opts
),
6138 LSM_HOOK_INIT(sb_clone_mnt_opts
, selinux_sb_clone_mnt_opts
),
6139 LSM_HOOK_INIT(sb_parse_opts_str
, selinux_parse_opts_str
),
6141 LSM_HOOK_INIT(dentry_init_security
, selinux_dentry_init_security
),
6142 LSM_HOOK_INIT(dentry_create_files_as
, selinux_dentry_create_files_as
),
6144 LSM_HOOK_INIT(inode_alloc_security
, selinux_inode_alloc_security
),
6145 LSM_HOOK_INIT(inode_free_security
, selinux_inode_free_security
),
6146 LSM_HOOK_INIT(inode_init_security
, selinux_inode_init_security
),
6147 LSM_HOOK_INIT(inode_create
, selinux_inode_create
),
6148 LSM_HOOK_INIT(inode_link
, selinux_inode_link
),
6149 LSM_HOOK_INIT(inode_unlink
, selinux_inode_unlink
),
6150 LSM_HOOK_INIT(inode_symlink
, selinux_inode_symlink
),
6151 LSM_HOOK_INIT(inode_mkdir
, selinux_inode_mkdir
),
6152 LSM_HOOK_INIT(inode_rmdir
, selinux_inode_rmdir
),
6153 LSM_HOOK_INIT(inode_mknod
, selinux_inode_mknod
),
6154 LSM_HOOK_INIT(inode_rename
, selinux_inode_rename
),
6155 LSM_HOOK_INIT(inode_readlink
, selinux_inode_readlink
),
6156 LSM_HOOK_INIT(inode_follow_link
, selinux_inode_follow_link
),
6157 LSM_HOOK_INIT(inode_permission
, selinux_inode_permission
),
6158 LSM_HOOK_INIT(inode_setattr
, selinux_inode_setattr
),
6159 LSM_HOOK_INIT(inode_getattr
, selinux_inode_getattr
),
6160 LSM_HOOK_INIT(inode_setxattr
, selinux_inode_setxattr
),
6161 LSM_HOOK_INIT(inode_post_setxattr
, selinux_inode_post_setxattr
),
6162 LSM_HOOK_INIT(inode_getxattr
, selinux_inode_getxattr
),
6163 LSM_HOOK_INIT(inode_listxattr
, selinux_inode_listxattr
),
6164 LSM_HOOK_INIT(inode_removexattr
, selinux_inode_removexattr
),
6165 LSM_HOOK_INIT(inode_getsecurity
, selinux_inode_getsecurity
),
6166 LSM_HOOK_INIT(inode_setsecurity
, selinux_inode_setsecurity
),
6167 LSM_HOOK_INIT(inode_listsecurity
, selinux_inode_listsecurity
),
6168 LSM_HOOK_INIT(inode_getsecid
, selinux_inode_getsecid
),
6169 LSM_HOOK_INIT(inode_copy_up
, selinux_inode_copy_up
),
6170 LSM_HOOK_INIT(inode_copy_up_xattr
, selinux_inode_copy_up_xattr
),
6172 LSM_HOOK_INIT(file_permission
, selinux_file_permission
),
6173 LSM_HOOK_INIT(file_alloc_security
, selinux_file_alloc_security
),
6174 LSM_HOOK_INIT(file_free_security
, selinux_file_free_security
),
6175 LSM_HOOK_INIT(file_ioctl
, selinux_file_ioctl
),
6176 LSM_HOOK_INIT(mmap_file
, selinux_mmap_file
),
6177 LSM_HOOK_INIT(mmap_addr
, selinux_mmap_addr
),
6178 LSM_HOOK_INIT(file_mprotect
, selinux_file_mprotect
),
6179 LSM_HOOK_INIT(file_lock
, selinux_file_lock
),
6180 LSM_HOOK_INIT(file_fcntl
, selinux_file_fcntl
),
6181 LSM_HOOK_INIT(file_set_fowner
, selinux_file_set_fowner
),
6182 LSM_HOOK_INIT(file_send_sigiotask
, selinux_file_send_sigiotask
),
6183 LSM_HOOK_INIT(file_receive
, selinux_file_receive
),
6185 LSM_HOOK_INIT(file_open
, selinux_file_open
),
6187 LSM_HOOK_INIT(task_create
, selinux_task_create
),
6188 LSM_HOOK_INIT(cred_alloc_blank
, selinux_cred_alloc_blank
),
6189 LSM_HOOK_INIT(cred_free
, selinux_cred_free
),
6190 LSM_HOOK_INIT(cred_prepare
, selinux_cred_prepare
),
6191 LSM_HOOK_INIT(cred_transfer
, selinux_cred_transfer
),
6192 LSM_HOOK_INIT(kernel_act_as
, selinux_kernel_act_as
),
6193 LSM_HOOK_INIT(kernel_create_files_as
, selinux_kernel_create_files_as
),
6194 LSM_HOOK_INIT(kernel_module_request
, selinux_kernel_module_request
),
6195 LSM_HOOK_INIT(kernel_read_file
, selinux_kernel_read_file
),
6196 LSM_HOOK_INIT(task_setpgid
, selinux_task_setpgid
),
6197 LSM_HOOK_INIT(task_getpgid
, selinux_task_getpgid
),
6198 LSM_HOOK_INIT(task_getsid
, selinux_task_getsid
),
6199 LSM_HOOK_INIT(task_getsecid
, selinux_task_getsecid
),
6200 LSM_HOOK_INIT(task_setnice
, selinux_task_setnice
),
6201 LSM_HOOK_INIT(task_setioprio
, selinux_task_setioprio
),
6202 LSM_HOOK_INIT(task_getioprio
, selinux_task_getioprio
),
6203 LSM_HOOK_INIT(task_setrlimit
, selinux_task_setrlimit
),
6204 LSM_HOOK_INIT(task_setscheduler
, selinux_task_setscheduler
),
6205 LSM_HOOK_INIT(task_getscheduler
, selinux_task_getscheduler
),
6206 LSM_HOOK_INIT(task_movememory
, selinux_task_movememory
),
6207 LSM_HOOK_INIT(task_kill
, selinux_task_kill
),
6208 LSM_HOOK_INIT(task_wait
, selinux_task_wait
),
6209 LSM_HOOK_INIT(task_to_inode
, selinux_task_to_inode
),
6211 LSM_HOOK_INIT(ipc_permission
, selinux_ipc_permission
),
6212 LSM_HOOK_INIT(ipc_getsecid
, selinux_ipc_getsecid
),
6214 LSM_HOOK_INIT(msg_msg_alloc_security
, selinux_msg_msg_alloc_security
),
6215 LSM_HOOK_INIT(msg_msg_free_security
, selinux_msg_msg_free_security
),
6217 LSM_HOOK_INIT(msg_queue_alloc_security
,
6218 selinux_msg_queue_alloc_security
),
6219 LSM_HOOK_INIT(msg_queue_free_security
, selinux_msg_queue_free_security
),
6220 LSM_HOOK_INIT(msg_queue_associate
, selinux_msg_queue_associate
),
6221 LSM_HOOK_INIT(msg_queue_msgctl
, selinux_msg_queue_msgctl
),
6222 LSM_HOOK_INIT(msg_queue_msgsnd
, selinux_msg_queue_msgsnd
),
6223 LSM_HOOK_INIT(msg_queue_msgrcv
, selinux_msg_queue_msgrcv
),
6225 LSM_HOOK_INIT(shm_alloc_security
, selinux_shm_alloc_security
),
6226 LSM_HOOK_INIT(shm_free_security
, selinux_shm_free_security
),
6227 LSM_HOOK_INIT(shm_associate
, selinux_shm_associate
),
6228 LSM_HOOK_INIT(shm_shmctl
, selinux_shm_shmctl
),
6229 LSM_HOOK_INIT(shm_shmat
, selinux_shm_shmat
),
6231 LSM_HOOK_INIT(sem_alloc_security
, selinux_sem_alloc_security
),
6232 LSM_HOOK_INIT(sem_free_security
, selinux_sem_free_security
),
6233 LSM_HOOK_INIT(sem_associate
, selinux_sem_associate
),
6234 LSM_HOOK_INIT(sem_semctl
, selinux_sem_semctl
),
6235 LSM_HOOK_INIT(sem_semop
, selinux_sem_semop
),
6237 LSM_HOOK_INIT(d_instantiate
, selinux_d_instantiate
),
6239 LSM_HOOK_INIT(getprocattr
, selinux_getprocattr
),
6240 LSM_HOOK_INIT(setprocattr
, selinux_setprocattr
),
6242 LSM_HOOK_INIT(ismaclabel
, selinux_ismaclabel
),
6243 LSM_HOOK_INIT(secid_to_secctx
, selinux_secid_to_secctx
),
6244 LSM_HOOK_INIT(secctx_to_secid
, selinux_secctx_to_secid
),
6245 LSM_HOOK_INIT(release_secctx
, selinux_release_secctx
),
6246 LSM_HOOK_INIT(inode_invalidate_secctx
, selinux_inode_invalidate_secctx
),
6247 LSM_HOOK_INIT(inode_notifysecctx
, selinux_inode_notifysecctx
),
6248 LSM_HOOK_INIT(inode_setsecctx
, selinux_inode_setsecctx
),
6249 LSM_HOOK_INIT(inode_getsecctx
, selinux_inode_getsecctx
),
6251 LSM_HOOK_INIT(unix_stream_connect
, selinux_socket_unix_stream_connect
),
6252 LSM_HOOK_INIT(unix_may_send
, selinux_socket_unix_may_send
),
6254 LSM_HOOK_INIT(socket_create
, selinux_socket_create
),
6255 LSM_HOOK_INIT(socket_post_create
, selinux_socket_post_create
),
6256 LSM_HOOK_INIT(socket_bind
, selinux_socket_bind
),
6257 LSM_HOOK_INIT(socket_connect
, selinux_socket_connect
),
6258 LSM_HOOK_INIT(socket_listen
, selinux_socket_listen
),
6259 LSM_HOOK_INIT(socket_accept
, selinux_socket_accept
),
6260 LSM_HOOK_INIT(socket_sendmsg
, selinux_socket_sendmsg
),
6261 LSM_HOOK_INIT(socket_recvmsg
, selinux_socket_recvmsg
),
6262 LSM_HOOK_INIT(socket_getsockname
, selinux_socket_getsockname
),
6263 LSM_HOOK_INIT(socket_getpeername
, selinux_socket_getpeername
),
6264 LSM_HOOK_INIT(socket_getsockopt
, selinux_socket_getsockopt
),
6265 LSM_HOOK_INIT(socket_setsockopt
, selinux_socket_setsockopt
),
6266 LSM_HOOK_INIT(socket_shutdown
, selinux_socket_shutdown
),
6267 LSM_HOOK_INIT(socket_sock_rcv_skb
, selinux_socket_sock_rcv_skb
),
6268 LSM_HOOK_INIT(socket_getpeersec_stream
,
6269 selinux_socket_getpeersec_stream
),
6270 LSM_HOOK_INIT(socket_getpeersec_dgram
, selinux_socket_getpeersec_dgram
),
6271 LSM_HOOK_INIT(sk_alloc_security
, selinux_sk_alloc_security
),
6272 LSM_HOOK_INIT(sk_free_security
, selinux_sk_free_security
),
6273 LSM_HOOK_INIT(sk_clone_security
, selinux_sk_clone_security
),
6274 LSM_HOOK_INIT(sk_getsecid
, selinux_sk_getsecid
),
6275 LSM_HOOK_INIT(sock_graft
, selinux_sock_graft
),
6276 LSM_HOOK_INIT(inet_conn_request
, selinux_inet_conn_request
),
6277 LSM_HOOK_INIT(inet_csk_clone
, selinux_inet_csk_clone
),
6278 LSM_HOOK_INIT(inet_conn_established
, selinux_inet_conn_established
),
6279 LSM_HOOK_INIT(secmark_relabel_packet
, selinux_secmark_relabel_packet
),
6280 LSM_HOOK_INIT(secmark_refcount_inc
, selinux_secmark_refcount_inc
),
6281 LSM_HOOK_INIT(secmark_refcount_dec
, selinux_secmark_refcount_dec
),
6282 LSM_HOOK_INIT(req_classify_flow
, selinux_req_classify_flow
),
6283 LSM_HOOK_INIT(tun_dev_alloc_security
, selinux_tun_dev_alloc_security
),
6284 LSM_HOOK_INIT(tun_dev_free_security
, selinux_tun_dev_free_security
),
6285 LSM_HOOK_INIT(tun_dev_create
, selinux_tun_dev_create
),
6286 LSM_HOOK_INIT(tun_dev_attach_queue
, selinux_tun_dev_attach_queue
),
6287 LSM_HOOK_INIT(tun_dev_attach
, selinux_tun_dev_attach
),
6288 LSM_HOOK_INIT(tun_dev_open
, selinux_tun_dev_open
),
6290 #ifdef CONFIG_SECURITY_NETWORK_XFRM
6291 LSM_HOOK_INIT(xfrm_policy_alloc_security
, selinux_xfrm_policy_alloc
),
6292 LSM_HOOK_INIT(xfrm_policy_clone_security
, selinux_xfrm_policy_clone
),
6293 LSM_HOOK_INIT(xfrm_policy_free_security
, selinux_xfrm_policy_free
),
6294 LSM_HOOK_INIT(xfrm_policy_delete_security
, selinux_xfrm_policy_delete
),
6295 LSM_HOOK_INIT(xfrm_state_alloc
, selinux_xfrm_state_alloc
),
6296 LSM_HOOK_INIT(xfrm_state_alloc_acquire
,
6297 selinux_xfrm_state_alloc_acquire
),
6298 LSM_HOOK_INIT(xfrm_state_free_security
, selinux_xfrm_state_free
),
6299 LSM_HOOK_INIT(xfrm_state_delete_security
, selinux_xfrm_state_delete
),
6300 LSM_HOOK_INIT(xfrm_policy_lookup
, selinux_xfrm_policy_lookup
),
6301 LSM_HOOK_INIT(xfrm_state_pol_flow_match
,
6302 selinux_xfrm_state_pol_flow_match
),
6303 LSM_HOOK_INIT(xfrm_decode_session
, selinux_xfrm_decode_session
),
6307 LSM_HOOK_INIT(key_alloc
, selinux_key_alloc
),
6308 LSM_HOOK_INIT(key_free
, selinux_key_free
),
6309 LSM_HOOK_INIT(key_permission
, selinux_key_permission
),
6310 LSM_HOOK_INIT(key_getsecurity
, selinux_key_getsecurity
),
6314 LSM_HOOK_INIT(audit_rule_init
, selinux_audit_rule_init
),
6315 LSM_HOOK_INIT(audit_rule_known
, selinux_audit_rule_known
),
6316 LSM_HOOK_INIT(audit_rule_match
, selinux_audit_rule_match
),
6317 LSM_HOOK_INIT(audit_rule_free
, selinux_audit_rule_free
),
6321 static __init
int selinux_init(void)
6323 if (!security_module_enable("selinux")) {
6324 selinux_enabled
= 0;
6328 if (!selinux_enabled
) {
6329 printk(KERN_INFO
"SELinux: Disabled at boot.\n");
6333 printk(KERN_INFO
"SELinux: Initializing.\n");
6335 /* Set the security state for the initial task. */
6336 cred_init_security();
6338 default_noexec
= !(VM_DATA_DEFAULT_FLAGS
& VM_EXEC
);
6340 sel_inode_cache
= kmem_cache_create("selinux_inode_security",
6341 sizeof(struct inode_security_struct
),
6342 0, SLAB_PANIC
, NULL
);
6343 file_security_cache
= kmem_cache_create("selinux_file_security",
6344 sizeof(struct file_security_struct
),
6345 0, SLAB_PANIC
, NULL
);
6348 security_add_hooks(selinux_hooks
, ARRAY_SIZE(selinux_hooks
));
6350 if (avc_add_callback(selinux_netcache_avc_callback
, AVC_CALLBACK_RESET
))
6351 panic("SELinux: Unable to register AVC netcache callback\n");
6353 if (selinux_enforcing
)
6354 printk(KERN_DEBUG
"SELinux: Starting in enforcing mode\n");
6356 printk(KERN_DEBUG
"SELinux: Starting in permissive mode\n");
6361 static void delayed_superblock_init(struct super_block
*sb
, void *unused
)
6363 superblock_doinit(sb
, NULL
);
6366 void selinux_complete_init(void)
6368 printk(KERN_DEBUG
"SELinux: Completing initialization.\n");
6370 /* Set up any superblocks initialized prior to the policy load. */
6371 printk(KERN_DEBUG
"SELinux: Setting up existing superblocks.\n");
6372 iterate_supers(delayed_superblock_init
, NULL
);
6375 /* SELinux requires early initialization in order to label
6376 all processes and objects when they are created. */
6377 security_initcall(selinux_init
);
6379 #if defined(CONFIG_NETFILTER)
6381 static struct nf_hook_ops selinux_nf_ops
[] = {
6383 .hook
= selinux_ipv4_postroute
,
6385 .hooknum
= NF_INET_POST_ROUTING
,
6386 .priority
= NF_IP_PRI_SELINUX_LAST
,
6389 .hook
= selinux_ipv4_forward
,
6391 .hooknum
= NF_INET_FORWARD
,
6392 .priority
= NF_IP_PRI_SELINUX_FIRST
,
6395 .hook
= selinux_ipv4_output
,
6397 .hooknum
= NF_INET_LOCAL_OUT
,
6398 .priority
= NF_IP_PRI_SELINUX_FIRST
,
6400 #if IS_ENABLED(CONFIG_IPV6)
6402 .hook
= selinux_ipv6_postroute
,
6404 .hooknum
= NF_INET_POST_ROUTING
,
6405 .priority
= NF_IP6_PRI_SELINUX_LAST
,
6408 .hook
= selinux_ipv6_forward
,
6410 .hooknum
= NF_INET_FORWARD
,
6411 .priority
= NF_IP6_PRI_SELINUX_FIRST
,
6414 .hook
= selinux_ipv6_output
,
6416 .hooknum
= NF_INET_LOCAL_OUT
,
6417 .priority
= NF_IP6_PRI_SELINUX_FIRST
,
6422 static int __init
selinux_nf_ip_init(void)
6426 if (!selinux_enabled
)
6429 printk(KERN_DEBUG
"SELinux: Registering netfilter hooks\n");
6431 err
= nf_register_hooks(selinux_nf_ops
, ARRAY_SIZE(selinux_nf_ops
));
6433 panic("SELinux: nf_register_hooks: error %d\n", err
);
6438 __initcall(selinux_nf_ip_init
);
6440 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
6441 static void selinux_nf_ip_exit(void)
6443 printk(KERN_DEBUG
"SELinux: Unregistering netfilter hooks\n");
6445 nf_unregister_hooks(selinux_nf_ops
, ARRAY_SIZE(selinux_nf_ops
));
6449 #else /* CONFIG_NETFILTER */
6451 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
6452 #define selinux_nf_ip_exit()
6455 #endif /* CONFIG_NETFILTER */
6457 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
6458 static int selinux_disabled
;
6460 int selinux_disable(void)
6462 if (ss_initialized
) {
6463 /* Not permitted after initial policy load. */
6467 if (selinux_disabled
) {
6468 /* Only do this once. */
6472 printk(KERN_INFO
"SELinux: Disabled at runtime.\n");
6474 selinux_disabled
= 1;
6475 selinux_enabled
= 0;
6477 security_delete_hooks(selinux_hooks
, ARRAY_SIZE(selinux_hooks
));
6479 /* Try to destroy the avc node cache */
6482 /* Unregister netfilter hooks. */
6483 selinux_nf_ip_exit();
6485 /* Unregister selinuxfs. */