1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * NSA Security-Enhanced Linux (SELinux) security module 4 * 5 * This file contains the SELinux hook function implementations. 6 * 7 * Authors: Stephen Smalley, <sds@tycho.nsa.gov> 8 * Chris Vance, <cvance@nai.com> 9 * Wayne Salamon, <wsalamon@nai.com> 10 * James Morris <jmorris@redhat.com> 11 * 12 * Copyright (C) 2001,2002 Networks Associates Technology, Inc. 13 * Copyright (C) 2003-2008 Red Hat, Inc., James Morris <jmorris@redhat.com> 14 * Eric Paris <eparis@redhat.com> 15 * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc. 16 * <dgoeddel@trustedcs.com> 17 * Copyright (C) 2006, 2007, 2009 Hewlett-Packard Development Company, L.P. 18 * Paul Moore <paul@paul-moore.com> 19 * Copyright (C) 2007 Hitachi Software Engineering Co., Ltd. 20 * Yuichi Nakamura <ynakam@hitachisoft.jp> 21 * Copyright (C) 2016 Mellanox Technologies 22 */ 23 24 #include <linux/init.h> 25 #include <linux/kd.h> 26 #include <linux/kernel.h> 27 #include <linux/kernel_read_file.h> 28 #include <linux/errno.h> 29 #include <linux/sched/signal.h> 30 #include <linux/sched/task.h> 31 #include <linux/lsm_hooks.h> 32 #include <linux/xattr.h> 33 #include <linux/capability.h> 34 #include <linux/unistd.h> 35 #include <linux/mm.h> 36 #include <linux/mman.h> 37 #include <linux/slab.h> 38 #include <linux/pagemap.h> 39 #include <linux/proc_fs.h> 40 #include <linux/swap.h> 41 #include <linux/spinlock.h> 42 #include <linux/syscalls.h> 43 #include <linux/dcache.h> 44 #include <linux/file.h> 45 #include <linux/fdtable.h> 46 #include <linux/namei.h> 47 #include <linux/mount.h> 48 #include <linux/fs_context.h> 49 #include <linux/fs_parser.h> 50 #include <linux/netfilter_ipv4.h> 51 #include <linux/netfilter_ipv6.h> 52 #include <linux/tty.h> 53 #include <net/icmp.h> 54 #include <net/ip.h> /* for local_port_range[] */ 55 #include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */ 56 #include <net/inet_connection_sock.h> 57 #include <net/net_namespace.h> 58 #include <net/netlabel.h> 59 #include <linux/uaccess.h> 60 #include <asm/ioctls.h> 61 #include <linux/atomic.h> 62 #include <linux/bitops.h> 63 #include <linux/interrupt.h> 64 #include <linux/netdevice.h> /* for network interface checks */ 65 #include <net/netlink.h> 66 #include <linux/tcp.h> 67 #include <linux/udp.h> 68 #include <linux/dccp.h> 69 #include <linux/sctp.h> 70 #include <net/sctp/structs.h> 71 #include <linux/quota.h> 72 #include <linux/un.h> /* for Unix socket types */ 73 #include <net/af_unix.h> /* for Unix socket types */ 74 #include <linux/parser.h> 75 #include <linux/nfs_mount.h> 76 #include <net/ipv6.h> 77 #include <linux/hugetlb.h> 78 #include <linux/personality.h> 79 #include <linux/audit.h> 80 #include <linux/string.h> 81 #include <linux/mutex.h> 82 #include <linux/posix-timers.h> 83 #include <linux/syslog.h> 84 #include <linux/user_namespace.h> 85 #include <linux/export.h> 86 #include <linux/msg.h> 87 #include <linux/shm.h> 88 #include <linux/bpf.h> 89 #include <linux/kernfs.h> 90 #include <linux/stringhash.h> /* for hashlen_string() */ 91 #include <uapi/linux/mount.h> 92 #include <linux/fsnotify.h> 93 #include <linux/fanotify.h> 94 #include <linux/io_uring.h> 95 96 #include "avc.h" 97 #include "objsec.h" 98 #include "netif.h" 99 #include "netnode.h" 100 #include "netport.h" 101 #include "ibpkey.h" 102 #include "xfrm.h" 103 #include "netlabel.h" 104 #include "audit.h" 105 #include "avc_ss.h" 106 107 struct selinux_state selinux_state; 108 109 /* SECMARK reference count */ 110 static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0); 111 112 #ifdef CONFIG_SECURITY_SELINUX_DEVELOP 113 static int selinux_enforcing_boot __initdata; 114 115 static int __init enforcing_setup(char *str) 116 { 117 unsigned long enforcing; 118 if (!kstrtoul(str, 0, &enforcing)) 119 selinux_enforcing_boot = enforcing ? 1 : 0; 120 return 1; 121 } 122 __setup("enforcing=", enforcing_setup); 123 #else 124 #define selinux_enforcing_boot 1 125 #endif 126 127 int selinux_enabled_boot __initdata = 1; 128 #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM 129 static int __init selinux_enabled_setup(char *str) 130 { 131 unsigned long enabled; 132 if (!kstrtoul(str, 0, &enabled)) 133 selinux_enabled_boot = enabled ? 1 : 0; 134 return 1; 135 } 136 __setup("selinux=", selinux_enabled_setup); 137 #endif 138 139 static int __init checkreqprot_setup(char *str) 140 { 141 unsigned long checkreqprot; 142 143 if (!kstrtoul(str, 0, &checkreqprot)) { 144 if (checkreqprot) 145 pr_err("SELinux: checkreqprot set to 1 via kernel parameter. This is no longer supported.\n"); 146 } 147 return 1; 148 } 149 __setup("checkreqprot=", checkreqprot_setup); 150 151 /** 152 * selinux_secmark_enabled - Check to see if SECMARK is currently enabled 153 * 154 * Description: 155 * This function checks the SECMARK reference counter to see if any SECMARK 156 * targets are currently configured, if the reference counter is greater than 157 * zero SECMARK is considered to be enabled. Returns true (1) if SECMARK is 158 * enabled, false (0) if SECMARK is disabled. If the always_check_network 159 * policy capability is enabled, SECMARK is always considered enabled. 160 * 161 */ 162 static int selinux_secmark_enabled(void) 163 { 164 return (selinux_policycap_alwaysnetwork() || 165 atomic_read(&selinux_secmark_refcount)); 166 } 167 168 /** 169 * selinux_peerlbl_enabled - Check to see if peer labeling is currently enabled 170 * 171 * Description: 172 * This function checks if NetLabel or labeled IPSEC is enabled. Returns true 173 * (1) if any are enabled or false (0) if neither are enabled. If the 174 * always_check_network policy capability is enabled, peer labeling 175 * is always considered enabled. 176 * 177 */ 178 static int selinux_peerlbl_enabled(void) 179 { 180 return (selinux_policycap_alwaysnetwork() || 181 netlbl_enabled() || selinux_xfrm_enabled()); 182 } 183 184 static int selinux_netcache_avc_callback(u32 event) 185 { 186 if (event == AVC_CALLBACK_RESET) { 187 sel_netif_flush(); 188 sel_netnode_flush(); 189 sel_netport_flush(); 190 synchronize_net(); 191 } 192 return 0; 193 } 194 195 static int selinux_lsm_notifier_avc_callback(u32 event) 196 { 197 if (event == AVC_CALLBACK_RESET) { 198 sel_ib_pkey_flush(); 199 call_blocking_lsm_notifier(LSM_POLICY_CHANGE, NULL); 200 } 201 202 return 0; 203 } 204 205 /* 206 * initialise the security for the init task 207 */ 208 static void cred_init_security(void) 209 { 210 struct task_security_struct *tsec; 211 212 tsec = selinux_cred(unrcu_pointer(current->real_cred)); 213 tsec->osid = tsec->sid = SECINITSID_KERNEL; 214 } 215 216 /* 217 * get the security ID of a set of credentials 218 */ 219 static inline u32 cred_sid(const struct cred *cred) 220 { 221 const struct task_security_struct *tsec; 222 223 tsec = selinux_cred(cred); 224 return tsec->sid; 225 } 226 227 /* 228 * get the objective security ID of a task 229 */ 230 static inline u32 task_sid_obj(const struct task_struct *task) 231 { 232 u32 sid; 233 234 rcu_read_lock(); 235 sid = cred_sid(__task_cred(task)); 236 rcu_read_unlock(); 237 return sid; 238 } 239 240 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry); 241 242 /* 243 * Try reloading inode security labels that have been marked as invalid. The 244 * @may_sleep parameter indicates when sleeping and thus reloading labels is 245 * allowed; when set to false, returns -ECHILD when the label is 246 * invalid. The @dentry parameter should be set to a dentry of the inode. 247 */ 248 static int __inode_security_revalidate(struct inode *inode, 249 struct dentry *dentry, 250 bool may_sleep) 251 { 252 struct inode_security_struct *isec = selinux_inode(inode); 253 254 might_sleep_if(may_sleep); 255 256 if (selinux_initialized() && 257 isec->initialized != LABEL_INITIALIZED) { 258 if (!may_sleep) 259 return -ECHILD; 260 261 /* 262 * Try reloading the inode security label. This will fail if 263 * @opt_dentry is NULL and no dentry for this inode can be 264 * found; in that case, continue using the old label. 265 */ 266 inode_doinit_with_dentry(inode, dentry); 267 } 268 return 0; 269 } 270 271 static struct inode_security_struct *inode_security_novalidate(struct inode *inode) 272 { 273 return selinux_inode(inode); 274 } 275 276 static struct inode_security_struct *inode_security_rcu(struct inode *inode, bool rcu) 277 { 278 int error; 279 280 error = __inode_security_revalidate(inode, NULL, !rcu); 281 if (error) 282 return ERR_PTR(error); 283 return selinux_inode(inode); 284 } 285 286 /* 287 * Get the security label of an inode. 288 */ 289 static struct inode_security_struct *inode_security(struct inode *inode) 290 { 291 __inode_security_revalidate(inode, NULL, true); 292 return selinux_inode(inode); 293 } 294 295 static struct inode_security_struct *backing_inode_security_novalidate(struct dentry *dentry) 296 { 297 struct inode *inode = d_backing_inode(dentry); 298 299 return selinux_inode(inode); 300 } 301 302 /* 303 * Get the security label of a dentry's backing inode. 304 */ 305 static struct inode_security_struct *backing_inode_security(struct dentry *dentry) 306 { 307 struct inode *inode = d_backing_inode(dentry); 308 309 __inode_security_revalidate(inode, dentry, true); 310 return selinux_inode(inode); 311 } 312 313 static void inode_free_security(struct inode *inode) 314 { 315 struct inode_security_struct *isec = selinux_inode(inode); 316 struct superblock_security_struct *sbsec; 317 318 if (!isec) 319 return; 320 sbsec = selinux_superblock(inode->i_sb); 321 /* 322 * As not all inode security structures are in a list, we check for 323 * empty list outside of the lock to make sure that we won't waste 324 * time taking a lock doing nothing. 325 * 326 * The list_del_init() function can be safely called more than once. 327 * It should not be possible for this function to be called with 328 * concurrent list_add(), but for better safety against future changes 329 * in the code, we use list_empty_careful() here. 330 */ 331 if (!list_empty_careful(&isec->list)) { 332 spin_lock(&sbsec->isec_lock); 333 list_del_init(&isec->list); 334 spin_unlock(&sbsec->isec_lock); 335 } 336 } 337 338 struct selinux_mnt_opts { 339 u32 fscontext_sid; 340 u32 context_sid; 341 u32 rootcontext_sid; 342 u32 defcontext_sid; 343 }; 344 345 static void selinux_free_mnt_opts(void *mnt_opts) 346 { 347 kfree(mnt_opts); 348 } 349 350 enum { 351 Opt_error = -1, 352 Opt_context = 0, 353 Opt_defcontext = 1, 354 Opt_fscontext = 2, 355 Opt_rootcontext = 3, 356 Opt_seclabel = 4, 357 }; 358 359 #define A(s, has_arg) {#s, sizeof(#s) - 1, Opt_##s, has_arg} 360 static const struct { 361 const char *name; 362 int len; 363 int opt; 364 bool has_arg; 365 } tokens[] = { 366 A(context, true), 367 A(fscontext, true), 368 A(defcontext, true), 369 A(rootcontext, true), 370 A(seclabel, false), 371 }; 372 #undef A 373 374 static int match_opt_prefix(char *s, int l, char **arg) 375 { 376 int i; 377 378 for (i = 0; i < ARRAY_SIZE(tokens); i++) { 379 size_t len = tokens[i].len; 380 if (len > l || memcmp(s, tokens[i].name, len)) 381 continue; 382 if (tokens[i].has_arg) { 383 if (len == l || s[len] != '=') 384 continue; 385 *arg = s + len + 1; 386 } else if (len != l) 387 continue; 388 return tokens[i].opt; 389 } 390 return Opt_error; 391 } 392 393 #define SEL_MOUNT_FAIL_MSG "SELinux: duplicate or incompatible mount options\n" 394 395 static int may_context_mount_sb_relabel(u32 sid, 396 struct superblock_security_struct *sbsec, 397 const struct cred *cred) 398 { 399 const struct task_security_struct *tsec = selinux_cred(cred); 400 int rc; 401 402 rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM, 403 FILESYSTEM__RELABELFROM, NULL); 404 if (rc) 405 return rc; 406 407 rc = avc_has_perm(tsec->sid, sid, SECCLASS_FILESYSTEM, 408 FILESYSTEM__RELABELTO, NULL); 409 return rc; 410 } 411 412 static int may_context_mount_inode_relabel(u32 sid, 413 struct superblock_security_struct *sbsec, 414 const struct cred *cred) 415 { 416 const struct task_security_struct *tsec = selinux_cred(cred); 417 int rc; 418 rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM, 419 FILESYSTEM__RELABELFROM, NULL); 420 if (rc) 421 return rc; 422 423 rc = avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM, 424 FILESYSTEM__ASSOCIATE, NULL); 425 return rc; 426 } 427 428 static int selinux_is_genfs_special_handling(struct super_block *sb) 429 { 430 /* Special handling. Genfs but also in-core setxattr handler */ 431 return !strcmp(sb->s_type->name, "sysfs") || 432 !strcmp(sb->s_type->name, "pstore") || 433 !strcmp(sb->s_type->name, "debugfs") || 434 !strcmp(sb->s_type->name, "tracefs") || 435 !strcmp(sb->s_type->name, "rootfs") || 436 (selinux_policycap_cgroupseclabel() && 437 (!strcmp(sb->s_type->name, "cgroup") || 438 !strcmp(sb->s_type->name, "cgroup2"))); 439 } 440 441 static int selinux_is_sblabel_mnt(struct super_block *sb) 442 { 443 struct superblock_security_struct *sbsec = selinux_superblock(sb); 444 445 /* 446 * IMPORTANT: Double-check logic in this function when adding a new 447 * SECURITY_FS_USE_* definition! 448 */ 449 BUILD_BUG_ON(SECURITY_FS_USE_MAX != 7); 450 451 switch (sbsec->behavior) { 452 case SECURITY_FS_USE_XATTR: 453 case SECURITY_FS_USE_TRANS: 454 case SECURITY_FS_USE_TASK: 455 case SECURITY_FS_USE_NATIVE: 456 return 1; 457 458 case SECURITY_FS_USE_GENFS: 459 return selinux_is_genfs_special_handling(sb); 460 461 /* Never allow relabeling on context mounts */ 462 case SECURITY_FS_USE_MNTPOINT: 463 case SECURITY_FS_USE_NONE: 464 default: 465 return 0; 466 } 467 } 468 469 static int sb_check_xattr_support(struct super_block *sb) 470 { 471 struct superblock_security_struct *sbsec = selinux_superblock(sb); 472 struct dentry *root = sb->s_root; 473 struct inode *root_inode = d_backing_inode(root); 474 u32 sid; 475 int rc; 476 477 /* 478 * Make sure that the xattr handler exists and that no 479 * error other than -ENODATA is returned by getxattr on 480 * the root directory. -ENODATA is ok, as this may be 481 * the first boot of the SELinux kernel before we have 482 * assigned xattr values to the filesystem. 483 */ 484 if (!(root_inode->i_opflags & IOP_XATTR)) { 485 pr_warn("SELinux: (dev %s, type %s) has no xattr support\n", 486 sb->s_id, sb->s_type->name); 487 goto fallback; 488 } 489 490 rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0); 491 if (rc < 0 && rc != -ENODATA) { 492 if (rc == -EOPNOTSUPP) { 493 pr_warn("SELinux: (dev %s, type %s) has no security xattr handler\n", 494 sb->s_id, sb->s_type->name); 495 goto fallback; 496 } else { 497 pr_warn("SELinux: (dev %s, type %s) getxattr errno %d\n", 498 sb->s_id, sb->s_type->name, -rc); 499 return rc; 500 } 501 } 502 return 0; 503 504 fallback: 505 /* No xattr support - try to fallback to genfs if possible. */ 506 rc = security_genfs_sid(sb->s_type->name, "/", 507 SECCLASS_DIR, &sid); 508 if (rc) 509 return -EOPNOTSUPP; 510 511 pr_warn("SELinux: (dev %s, type %s) falling back to genfs\n", 512 sb->s_id, sb->s_type->name); 513 sbsec->behavior = SECURITY_FS_USE_GENFS; 514 sbsec->sid = sid; 515 return 0; 516 } 517 518 static int sb_finish_set_opts(struct super_block *sb) 519 { 520 struct superblock_security_struct *sbsec = selinux_superblock(sb); 521 struct dentry *root = sb->s_root; 522 struct inode *root_inode = d_backing_inode(root); 523 int rc = 0; 524 525 if (sbsec->behavior == SECURITY_FS_USE_XATTR) { 526 rc = sb_check_xattr_support(sb); 527 if (rc) 528 return rc; 529 } 530 531 sbsec->flags |= SE_SBINITIALIZED; 532 533 /* 534 * Explicitly set or clear SBLABEL_MNT. It's not sufficient to simply 535 * leave the flag untouched because sb_clone_mnt_opts might be handing 536 * us a superblock that needs the flag to be cleared. 537 */ 538 if (selinux_is_sblabel_mnt(sb)) 539 sbsec->flags |= SBLABEL_MNT; 540 else 541 sbsec->flags &= ~SBLABEL_MNT; 542 543 /* Initialize the root inode. */ 544 rc = inode_doinit_with_dentry(root_inode, root); 545 546 /* Initialize any other inodes associated with the superblock, e.g. 547 inodes created prior to initial policy load or inodes created 548 during get_sb by a pseudo filesystem that directly 549 populates itself. */ 550 spin_lock(&sbsec->isec_lock); 551 while (!list_empty(&sbsec->isec_head)) { 552 struct inode_security_struct *isec = 553 list_first_entry(&sbsec->isec_head, 554 struct inode_security_struct, list); 555 struct inode *inode = isec->inode; 556 list_del_init(&isec->list); 557 spin_unlock(&sbsec->isec_lock); 558 inode = igrab(inode); 559 if (inode) { 560 if (!IS_PRIVATE(inode)) 561 inode_doinit_with_dentry(inode, NULL); 562 iput(inode); 563 } 564 spin_lock(&sbsec->isec_lock); 565 } 566 spin_unlock(&sbsec->isec_lock); 567 return rc; 568 } 569 570 static int bad_option(struct superblock_security_struct *sbsec, char flag, 571 u32 old_sid, u32 new_sid) 572 { 573 char mnt_flags = sbsec->flags & SE_MNTMASK; 574 575 /* check if the old mount command had the same options */ 576 if (sbsec->flags & SE_SBINITIALIZED) 577 if (!(sbsec->flags & flag) || 578 (old_sid != new_sid)) 579 return 1; 580 581 /* check if we were passed the same options twice, 582 * aka someone passed context=a,context=b 583 */ 584 if (!(sbsec->flags & SE_SBINITIALIZED)) 585 if (mnt_flags & flag) 586 return 1; 587 return 0; 588 } 589 590 /* 591 * Allow filesystems with binary mount data to explicitly set mount point 592 * labeling information. 593 */ 594 static int selinux_set_mnt_opts(struct super_block *sb, 595 void *mnt_opts, 596 unsigned long kern_flags, 597 unsigned long *set_kern_flags) 598 { 599 const struct cred *cred = current_cred(); 600 struct superblock_security_struct *sbsec = selinux_superblock(sb); 601 struct dentry *root = sb->s_root; 602 struct selinux_mnt_opts *opts = mnt_opts; 603 struct inode_security_struct *root_isec; 604 u32 fscontext_sid = 0, context_sid = 0, rootcontext_sid = 0; 605 u32 defcontext_sid = 0; 606 int rc = 0; 607 608 /* 609 * Specifying internal flags without providing a place to 610 * place the results is not allowed 611 */ 612 if (kern_flags && !set_kern_flags) 613 return -EINVAL; 614 615 mutex_lock(&sbsec->lock); 616 617 if (!selinux_initialized()) { 618 if (!opts) { 619 /* Defer initialization until selinux_complete_init, 620 after the initial policy is loaded and the security 621 server is ready to handle calls. */ 622 if (kern_flags & SECURITY_LSM_NATIVE_LABELS) { 623 sbsec->flags |= SE_SBNATIVE; 624 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS; 625 } 626 goto out; 627 } 628 rc = -EINVAL; 629 pr_warn("SELinux: Unable to set superblock options " 630 "before the security server is initialized\n"); 631 goto out; 632 } 633 634 /* 635 * Binary mount data FS will come through this function twice. Once 636 * from an explicit call and once from the generic calls from the vfs. 637 * Since the generic VFS calls will not contain any security mount data 638 * we need to skip the double mount verification. 639 * 640 * This does open a hole in which we will not notice if the first 641 * mount using this sb set explicit options and a second mount using 642 * this sb does not set any security options. (The first options 643 * will be used for both mounts) 644 */ 645 if ((sbsec->flags & SE_SBINITIALIZED) && (sb->s_type->fs_flags & FS_BINARY_MOUNTDATA) 646 && !opts) 647 goto out; 648 649 root_isec = backing_inode_security_novalidate(root); 650 651 /* 652 * parse the mount options, check if they are valid sids. 653 * also check if someone is trying to mount the same sb more 654 * than once with different security options. 655 */ 656 if (opts) { 657 if (opts->fscontext_sid) { 658 fscontext_sid = opts->fscontext_sid; 659 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, 660 fscontext_sid)) 661 goto out_double_mount; 662 sbsec->flags |= FSCONTEXT_MNT; 663 } 664 if (opts->context_sid) { 665 context_sid = opts->context_sid; 666 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, 667 context_sid)) 668 goto out_double_mount; 669 sbsec->flags |= CONTEXT_MNT; 670 } 671 if (opts->rootcontext_sid) { 672 rootcontext_sid = opts->rootcontext_sid; 673 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, 674 rootcontext_sid)) 675 goto out_double_mount; 676 sbsec->flags |= ROOTCONTEXT_MNT; 677 } 678 if (opts->defcontext_sid) { 679 defcontext_sid = opts->defcontext_sid; 680 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, 681 defcontext_sid)) 682 goto out_double_mount; 683 sbsec->flags |= DEFCONTEXT_MNT; 684 } 685 } 686 687 if (sbsec->flags & SE_SBINITIALIZED) { 688 /* previously mounted with options, but not on this attempt? */ 689 if ((sbsec->flags & SE_MNTMASK) && !opts) 690 goto out_double_mount; 691 rc = 0; 692 goto out; 693 } 694 695 if (strcmp(sb->s_type->name, "proc") == 0) 696 sbsec->flags |= SE_SBPROC | SE_SBGENFS; 697 698 if (!strcmp(sb->s_type->name, "debugfs") || 699 !strcmp(sb->s_type->name, "tracefs") || 700 !strcmp(sb->s_type->name, "binder") || 701 !strcmp(sb->s_type->name, "bpf") || 702 !strcmp(sb->s_type->name, "pstore") || 703 !strcmp(sb->s_type->name, "securityfs")) 704 sbsec->flags |= SE_SBGENFS; 705 706 if (!strcmp(sb->s_type->name, "sysfs") || 707 !strcmp(sb->s_type->name, "cgroup") || 708 !strcmp(sb->s_type->name, "cgroup2")) 709 sbsec->flags |= SE_SBGENFS | SE_SBGENFS_XATTR; 710 711 if (!sbsec->behavior) { 712 /* 713 * Determine the labeling behavior to use for this 714 * filesystem type. 715 */ 716 rc = security_fs_use(sb); 717 if (rc) { 718 pr_warn("%s: security_fs_use(%s) returned %d\n", 719 __func__, sb->s_type->name, rc); 720 goto out; 721 } 722 } 723 724 /* 725 * If this is a user namespace mount and the filesystem type is not 726 * explicitly whitelisted, then no contexts are allowed on the command 727 * line and security labels must be ignored. 728 */ 729 if (sb->s_user_ns != &init_user_ns && 730 strcmp(sb->s_type->name, "tmpfs") && 731 strcmp(sb->s_type->name, "ramfs") && 732 strcmp(sb->s_type->name, "devpts") && 733 strcmp(sb->s_type->name, "overlay")) { 734 if (context_sid || fscontext_sid || rootcontext_sid || 735 defcontext_sid) { 736 rc = -EACCES; 737 goto out; 738 } 739 if (sbsec->behavior == SECURITY_FS_USE_XATTR) { 740 sbsec->behavior = SECURITY_FS_USE_MNTPOINT; 741 rc = security_transition_sid(current_sid(), 742 current_sid(), 743 SECCLASS_FILE, NULL, 744 &sbsec->mntpoint_sid); 745 if (rc) 746 goto out; 747 } 748 goto out_set_opts; 749 } 750 751 /* sets the context of the superblock for the fs being mounted. */ 752 if (fscontext_sid) { 753 rc = may_context_mount_sb_relabel(fscontext_sid, sbsec, cred); 754 if (rc) 755 goto out; 756 757 sbsec->sid = fscontext_sid; 758 } 759 760 /* 761 * Switch to using mount point labeling behavior. 762 * sets the label used on all file below the mountpoint, and will set 763 * the superblock context if not already set. 764 */ 765 if (sbsec->flags & SE_SBNATIVE) { 766 /* 767 * This means we are initializing a superblock that has been 768 * mounted before the SELinux was initialized and the 769 * filesystem requested native labeling. We had already 770 * returned SECURITY_LSM_NATIVE_LABELS in *set_kern_flags 771 * in the original mount attempt, so now we just need to set 772 * the SECURITY_FS_USE_NATIVE behavior. 773 */ 774 sbsec->behavior = SECURITY_FS_USE_NATIVE; 775 } else if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !context_sid) { 776 sbsec->behavior = SECURITY_FS_USE_NATIVE; 777 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS; 778 } 779 780 if (context_sid) { 781 if (!fscontext_sid) { 782 rc = may_context_mount_sb_relabel(context_sid, sbsec, 783 cred); 784 if (rc) 785 goto out; 786 sbsec->sid = context_sid; 787 } else { 788 rc = may_context_mount_inode_relabel(context_sid, sbsec, 789 cred); 790 if (rc) 791 goto out; 792 } 793 if (!rootcontext_sid) 794 rootcontext_sid = context_sid; 795 796 sbsec->mntpoint_sid = context_sid; 797 sbsec->behavior = SECURITY_FS_USE_MNTPOINT; 798 } 799 800 if (rootcontext_sid) { 801 rc = may_context_mount_inode_relabel(rootcontext_sid, sbsec, 802 cred); 803 if (rc) 804 goto out; 805 806 root_isec->sid = rootcontext_sid; 807 root_isec->initialized = LABEL_INITIALIZED; 808 } 809 810 if (defcontext_sid) { 811 if (sbsec->behavior != SECURITY_FS_USE_XATTR && 812 sbsec->behavior != SECURITY_FS_USE_NATIVE) { 813 rc = -EINVAL; 814 pr_warn("SELinux: defcontext option is " 815 "invalid for this filesystem type\n"); 816 goto out; 817 } 818 819 if (defcontext_sid != sbsec->def_sid) { 820 rc = may_context_mount_inode_relabel(defcontext_sid, 821 sbsec, cred); 822 if (rc) 823 goto out; 824 } 825 826 sbsec->def_sid = defcontext_sid; 827 } 828 829 out_set_opts: 830 rc = sb_finish_set_opts(sb); 831 out: 832 mutex_unlock(&sbsec->lock); 833 return rc; 834 out_double_mount: 835 rc = -EINVAL; 836 pr_warn("SELinux: mount invalid. Same superblock, different " 837 "security settings for (dev %s, type %s)\n", sb->s_id, 838 sb->s_type->name); 839 goto out; 840 } 841 842 static int selinux_cmp_sb_context(const struct super_block *oldsb, 843 const struct super_block *newsb) 844 { 845 struct superblock_security_struct *old = selinux_superblock(oldsb); 846 struct superblock_security_struct *new = selinux_superblock(newsb); 847 char oldflags = old->flags & SE_MNTMASK; 848 char newflags = new->flags & SE_MNTMASK; 849 850 if (oldflags != newflags) 851 goto mismatch; 852 if ((oldflags & FSCONTEXT_MNT) && old->sid != new->sid) 853 goto mismatch; 854 if ((oldflags & CONTEXT_MNT) && old->mntpoint_sid != new->mntpoint_sid) 855 goto mismatch; 856 if ((oldflags & DEFCONTEXT_MNT) && old->def_sid != new->def_sid) 857 goto mismatch; 858 if (oldflags & ROOTCONTEXT_MNT) { 859 struct inode_security_struct *oldroot = backing_inode_security(oldsb->s_root); 860 struct inode_security_struct *newroot = backing_inode_security(newsb->s_root); 861 if (oldroot->sid != newroot->sid) 862 goto mismatch; 863 } 864 return 0; 865 mismatch: 866 pr_warn("SELinux: mount invalid. Same superblock, " 867 "different security settings for (dev %s, " 868 "type %s)\n", newsb->s_id, newsb->s_type->name); 869 return -EBUSY; 870 } 871 872 static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb, 873 struct super_block *newsb, 874 unsigned long kern_flags, 875 unsigned long *set_kern_flags) 876 { 877 int rc = 0; 878 const struct superblock_security_struct *oldsbsec = 879 selinux_superblock(oldsb); 880 struct superblock_security_struct *newsbsec = selinux_superblock(newsb); 881 882 int set_fscontext = (oldsbsec->flags & FSCONTEXT_MNT); 883 int set_context = (oldsbsec->flags & CONTEXT_MNT); 884 int set_rootcontext = (oldsbsec->flags & ROOTCONTEXT_MNT); 885 886 /* 887 * Specifying internal flags without providing a place to 888 * place the results is not allowed. 889 */ 890 if (kern_flags && !set_kern_flags) 891 return -EINVAL; 892 893 mutex_lock(&newsbsec->lock); 894 895 /* 896 * if the parent was able to be mounted it clearly had no special lsm 897 * mount options. thus we can safely deal with this superblock later 898 */ 899 if (!selinux_initialized()) { 900 if (kern_flags & SECURITY_LSM_NATIVE_LABELS) { 901 newsbsec->flags |= SE_SBNATIVE; 902 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS; 903 } 904 goto out; 905 } 906 907 /* how can we clone if the old one wasn't set up?? */ 908 BUG_ON(!(oldsbsec->flags & SE_SBINITIALIZED)); 909 910 /* if fs is reusing a sb, make sure that the contexts match */ 911 if (newsbsec->flags & SE_SBINITIALIZED) { 912 mutex_unlock(&newsbsec->lock); 913 if ((kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context) 914 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS; 915 return selinux_cmp_sb_context(oldsb, newsb); 916 } 917 918 newsbsec->flags = oldsbsec->flags; 919 920 newsbsec->sid = oldsbsec->sid; 921 newsbsec->def_sid = oldsbsec->def_sid; 922 newsbsec->behavior = oldsbsec->behavior; 923 924 if (newsbsec->behavior == SECURITY_FS_USE_NATIVE && 925 !(kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context) { 926 rc = security_fs_use(newsb); 927 if (rc) 928 goto out; 929 } 930 931 if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !set_context) { 932 newsbsec->behavior = SECURITY_FS_USE_NATIVE; 933 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS; 934 } 935 936 if (set_context) { 937 u32 sid = oldsbsec->mntpoint_sid; 938 939 if (!set_fscontext) 940 newsbsec->sid = sid; 941 if (!set_rootcontext) { 942 struct inode_security_struct *newisec = backing_inode_security(newsb->s_root); 943 newisec->sid = sid; 944 } 945 newsbsec->mntpoint_sid = sid; 946 } 947 if (set_rootcontext) { 948 const struct inode_security_struct *oldisec = backing_inode_security(oldsb->s_root); 949 struct inode_security_struct *newisec = backing_inode_security(newsb->s_root); 950 951 newisec->sid = oldisec->sid; 952 } 953 954 sb_finish_set_opts(newsb); 955 out: 956 mutex_unlock(&newsbsec->lock); 957 return rc; 958 } 959 960 /* 961 * NOTE: the caller is responsible for freeing the memory even if on error. 962 */ 963 static int selinux_add_opt(int token, const char *s, void **mnt_opts) 964 { 965 struct selinux_mnt_opts *opts = *mnt_opts; 966 u32 *dst_sid; 967 int rc; 968 969 if (token == Opt_seclabel) 970 /* eaten and completely ignored */ 971 return 0; 972 if (!s) 973 return -EINVAL; 974 975 if (!selinux_initialized()) { 976 pr_warn("SELinux: Unable to set superblock options before the security server is initialized\n"); 977 return -EINVAL; 978 } 979 980 if (!opts) { 981 opts = kzalloc(sizeof(*opts), GFP_KERNEL); 982 if (!opts) 983 return -ENOMEM; 984 *mnt_opts = opts; 985 } 986 987 switch (token) { 988 case Opt_context: 989 if (opts->context_sid || opts->defcontext_sid) 990 goto err; 991 dst_sid = &opts->context_sid; 992 break; 993 case Opt_fscontext: 994 if (opts->fscontext_sid) 995 goto err; 996 dst_sid = &opts->fscontext_sid; 997 break; 998 case Opt_rootcontext: 999 if (opts->rootcontext_sid) 1000 goto err; 1001 dst_sid = &opts->rootcontext_sid; 1002 break; 1003 case Opt_defcontext: 1004 if (opts->context_sid || opts->defcontext_sid) 1005 goto err; 1006 dst_sid = &opts->defcontext_sid; 1007 break; 1008 default: 1009 WARN_ON(1); 1010 return -EINVAL; 1011 } 1012 rc = security_context_str_to_sid(s, dst_sid, GFP_KERNEL); 1013 if (rc) 1014 pr_warn("SELinux: security_context_str_to_sid (%s) failed with errno=%d\n", 1015 s, rc); 1016 return rc; 1017 1018 err: 1019 pr_warn(SEL_MOUNT_FAIL_MSG); 1020 return -EINVAL; 1021 } 1022 1023 static int show_sid(struct seq_file *m, u32 sid) 1024 { 1025 char *context = NULL; 1026 u32 len; 1027 int rc; 1028 1029 rc = security_sid_to_context(sid, &context, &len); 1030 if (!rc) { 1031 bool has_comma = strchr(context, ','); 1032 1033 seq_putc(m, '='); 1034 if (has_comma) 1035 seq_putc(m, '\"'); 1036 seq_escape(m, context, "\"\n\\"); 1037 if (has_comma) 1038 seq_putc(m, '\"'); 1039 } 1040 kfree(context); 1041 return rc; 1042 } 1043 1044 static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb) 1045 { 1046 struct superblock_security_struct *sbsec = selinux_superblock(sb); 1047 int rc; 1048 1049 if (!(sbsec->flags & SE_SBINITIALIZED)) 1050 return 0; 1051 1052 if (!selinux_initialized()) 1053 return 0; 1054 1055 if (sbsec->flags & FSCONTEXT_MNT) { 1056 seq_putc(m, ','); 1057 seq_puts(m, FSCONTEXT_STR); 1058 rc = show_sid(m, sbsec->sid); 1059 if (rc) 1060 return rc; 1061 } 1062 if (sbsec->flags & CONTEXT_MNT) { 1063 seq_putc(m, ','); 1064 seq_puts(m, CONTEXT_STR); 1065 rc = show_sid(m, sbsec->mntpoint_sid); 1066 if (rc) 1067 return rc; 1068 } 1069 if (sbsec->flags & DEFCONTEXT_MNT) { 1070 seq_putc(m, ','); 1071 seq_puts(m, DEFCONTEXT_STR); 1072 rc = show_sid(m, sbsec->def_sid); 1073 if (rc) 1074 return rc; 1075 } 1076 if (sbsec->flags & ROOTCONTEXT_MNT) { 1077 struct dentry *root = sb->s_root; 1078 struct inode_security_struct *isec = backing_inode_security(root); 1079 seq_putc(m, ','); 1080 seq_puts(m, ROOTCONTEXT_STR); 1081 rc = show_sid(m, isec->sid); 1082 if (rc) 1083 return rc; 1084 } 1085 if (sbsec->flags & SBLABEL_MNT) { 1086 seq_putc(m, ','); 1087 seq_puts(m, SECLABEL_STR); 1088 } 1089 return 0; 1090 } 1091 1092 static inline u16 inode_mode_to_security_class(umode_t mode) 1093 { 1094 switch (mode & S_IFMT) { 1095 case S_IFSOCK: 1096 return SECCLASS_SOCK_FILE; 1097 case S_IFLNK: 1098 return SECCLASS_LNK_FILE; 1099 case S_IFREG: 1100 return SECCLASS_FILE; 1101 case S_IFBLK: 1102 return SECCLASS_BLK_FILE; 1103 case S_IFDIR: 1104 return SECCLASS_DIR; 1105 case S_IFCHR: 1106 return SECCLASS_CHR_FILE; 1107 case S_IFIFO: 1108 return SECCLASS_FIFO_FILE; 1109 1110 } 1111 1112 return SECCLASS_FILE; 1113 } 1114 1115 static inline int default_protocol_stream(int protocol) 1116 { 1117 return (protocol == IPPROTO_IP || protocol == IPPROTO_TCP || 1118 protocol == IPPROTO_MPTCP); 1119 } 1120 1121 static inline int default_protocol_dgram(int protocol) 1122 { 1123 return (protocol == IPPROTO_IP || protocol == IPPROTO_UDP); 1124 } 1125 1126 static inline u16 socket_type_to_security_class(int family, int type, int protocol) 1127 { 1128 int extsockclass = selinux_policycap_extsockclass(); 1129 1130 switch (family) { 1131 case PF_UNIX: 1132 switch (type) { 1133 case SOCK_STREAM: 1134 case SOCK_SEQPACKET: 1135 return SECCLASS_UNIX_STREAM_SOCKET; 1136 case SOCK_DGRAM: 1137 case SOCK_RAW: 1138 return SECCLASS_UNIX_DGRAM_SOCKET; 1139 } 1140 break; 1141 case PF_INET: 1142 case PF_INET6: 1143 switch (type) { 1144 case SOCK_STREAM: 1145 case SOCK_SEQPACKET: 1146 if (default_protocol_stream(protocol)) 1147 return SECCLASS_TCP_SOCKET; 1148 else if (extsockclass && protocol == IPPROTO_SCTP) 1149 return SECCLASS_SCTP_SOCKET; 1150 else 1151 return SECCLASS_RAWIP_SOCKET; 1152 case SOCK_DGRAM: 1153 if (default_protocol_dgram(protocol)) 1154 return SECCLASS_UDP_SOCKET; 1155 else if (extsockclass && (protocol == IPPROTO_ICMP || 1156 protocol == IPPROTO_ICMPV6)) 1157 return SECCLASS_ICMP_SOCKET; 1158 else 1159 return SECCLASS_RAWIP_SOCKET; 1160 case SOCK_DCCP: 1161 return SECCLASS_DCCP_SOCKET; 1162 default: 1163 return SECCLASS_RAWIP_SOCKET; 1164 } 1165 break; 1166 case PF_NETLINK: 1167 switch (protocol) { 1168 case NETLINK_ROUTE: 1169 return SECCLASS_NETLINK_ROUTE_SOCKET; 1170 case NETLINK_SOCK_DIAG: 1171 return SECCLASS_NETLINK_TCPDIAG_SOCKET; 1172 case NETLINK_NFLOG: 1173 return SECCLASS_NETLINK_NFLOG_SOCKET; 1174 case NETLINK_XFRM: 1175 return SECCLASS_NETLINK_XFRM_SOCKET; 1176 case NETLINK_SELINUX: 1177 return SECCLASS_NETLINK_SELINUX_SOCKET; 1178 case NETLINK_ISCSI: 1179 return SECCLASS_NETLINK_ISCSI_SOCKET; 1180 case NETLINK_AUDIT: 1181 return SECCLASS_NETLINK_AUDIT_SOCKET; 1182 case NETLINK_FIB_LOOKUP: 1183 return SECCLASS_NETLINK_FIB_LOOKUP_SOCKET; 1184 case NETLINK_CONNECTOR: 1185 return SECCLASS_NETLINK_CONNECTOR_SOCKET; 1186 case NETLINK_NETFILTER: 1187 return SECCLASS_NETLINK_NETFILTER_SOCKET; 1188 case NETLINK_DNRTMSG: 1189 return SECCLASS_NETLINK_DNRT_SOCKET; 1190 case NETLINK_KOBJECT_UEVENT: 1191 return SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET; 1192 case NETLINK_GENERIC: 1193 return SECCLASS_NETLINK_GENERIC_SOCKET; 1194 case NETLINK_SCSITRANSPORT: 1195 return SECCLASS_NETLINK_SCSITRANSPORT_SOCKET; 1196 case NETLINK_RDMA: 1197 return SECCLASS_NETLINK_RDMA_SOCKET; 1198 case NETLINK_CRYPTO: 1199 return SECCLASS_NETLINK_CRYPTO_SOCKET; 1200 default: 1201 return SECCLASS_NETLINK_SOCKET; 1202 } 1203 case PF_PACKET: 1204 return SECCLASS_PACKET_SOCKET; 1205 case PF_KEY: 1206 return SECCLASS_KEY_SOCKET; 1207 case PF_APPLETALK: 1208 return SECCLASS_APPLETALK_SOCKET; 1209 } 1210 1211 if (extsockclass) { 1212 switch (family) { 1213 case PF_AX25: 1214 return SECCLASS_AX25_SOCKET; 1215 case PF_IPX: 1216 return SECCLASS_IPX_SOCKET; 1217 case PF_NETROM: 1218 return SECCLASS_NETROM_SOCKET; 1219 case PF_ATMPVC: 1220 return SECCLASS_ATMPVC_SOCKET; 1221 case PF_X25: 1222 return SECCLASS_X25_SOCKET; 1223 case PF_ROSE: 1224 return SECCLASS_ROSE_SOCKET; 1225 case PF_DECnet: 1226 return SECCLASS_DECNET_SOCKET; 1227 case PF_ATMSVC: 1228 return SECCLASS_ATMSVC_SOCKET; 1229 case PF_RDS: 1230 return SECCLASS_RDS_SOCKET; 1231 case PF_IRDA: 1232 return SECCLASS_IRDA_SOCKET; 1233 case PF_PPPOX: 1234 return SECCLASS_PPPOX_SOCKET; 1235 case PF_LLC: 1236 return SECCLASS_LLC_SOCKET; 1237 case PF_CAN: 1238 return SECCLASS_CAN_SOCKET; 1239 case PF_TIPC: 1240 return SECCLASS_TIPC_SOCKET; 1241 case PF_BLUETOOTH: 1242 return SECCLASS_BLUETOOTH_SOCKET; 1243 case PF_IUCV: 1244 return SECCLASS_IUCV_SOCKET; 1245 case PF_RXRPC: 1246 return SECCLASS_RXRPC_SOCKET; 1247 case PF_ISDN: 1248 return SECCLASS_ISDN_SOCKET; 1249 case PF_PHONET: 1250 return SECCLASS_PHONET_SOCKET; 1251 case PF_IEEE802154: 1252 return SECCLASS_IEEE802154_SOCKET; 1253 case PF_CAIF: 1254 return SECCLASS_CAIF_SOCKET; 1255 case PF_ALG: 1256 return SECCLASS_ALG_SOCKET; 1257 case PF_NFC: 1258 return SECCLASS_NFC_SOCKET; 1259 case PF_VSOCK: 1260 return SECCLASS_VSOCK_SOCKET; 1261 case PF_KCM: 1262 return SECCLASS_KCM_SOCKET; 1263 case PF_QIPCRTR: 1264 return SECCLASS_QIPCRTR_SOCKET; 1265 case PF_SMC: 1266 return SECCLASS_SMC_SOCKET; 1267 case PF_XDP: 1268 return SECCLASS_XDP_SOCKET; 1269 case PF_MCTP: 1270 return SECCLASS_MCTP_SOCKET; 1271 #if PF_MAX > 46 1272 #error New address family defined, please update this function. 1273 #endif 1274 } 1275 } 1276 1277 return SECCLASS_SOCKET; 1278 } 1279 1280 static int selinux_genfs_get_sid(struct dentry *dentry, 1281 u16 tclass, 1282 u16 flags, 1283 u32 *sid) 1284 { 1285 int rc; 1286 struct super_block *sb = dentry->d_sb; 1287 char *buffer, *path; 1288 1289 buffer = (char *)__get_free_page(GFP_KERNEL); 1290 if (!buffer) 1291 return -ENOMEM; 1292 1293 path = dentry_path_raw(dentry, buffer, PAGE_SIZE); 1294 if (IS_ERR(path)) 1295 rc = PTR_ERR(path); 1296 else { 1297 if (flags & SE_SBPROC) { 1298 /* each process gets a /proc/PID/ entry. Strip off the 1299 * PID part to get a valid selinux labeling. 1300 * e.g. /proc/1/net/rpc/nfs -> /net/rpc/nfs */ 1301 while (path[1] >= '0' && path[1] <= '9') { 1302 path[1] = '/'; 1303 path++; 1304 } 1305 } 1306 rc = security_genfs_sid(sb->s_type->name, 1307 path, tclass, sid); 1308 if (rc == -ENOENT) { 1309 /* No match in policy, mark as unlabeled. */ 1310 *sid = SECINITSID_UNLABELED; 1311 rc = 0; 1312 } 1313 } 1314 free_page((unsigned long)buffer); 1315 return rc; 1316 } 1317 1318 static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry, 1319 u32 def_sid, u32 *sid) 1320 { 1321 #define INITCONTEXTLEN 255 1322 char *context; 1323 unsigned int len; 1324 int rc; 1325 1326 len = INITCONTEXTLEN; 1327 context = kmalloc(len + 1, GFP_NOFS); 1328 if (!context) 1329 return -ENOMEM; 1330 1331 context[len] = '\0'; 1332 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len); 1333 if (rc == -ERANGE) { 1334 kfree(context); 1335 1336 /* Need a larger buffer. Query for the right size. */ 1337 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0); 1338 if (rc < 0) 1339 return rc; 1340 1341 len = rc; 1342 context = kmalloc(len + 1, GFP_NOFS); 1343 if (!context) 1344 return -ENOMEM; 1345 1346 context[len] = '\0'; 1347 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, 1348 context, len); 1349 } 1350 if (rc < 0) { 1351 kfree(context); 1352 if (rc != -ENODATA) { 1353 pr_warn("SELinux: %s: getxattr returned %d for dev=%s ino=%ld\n", 1354 __func__, -rc, inode->i_sb->s_id, inode->i_ino); 1355 return rc; 1356 } 1357 *sid = def_sid; 1358 return 0; 1359 } 1360 1361 rc = security_context_to_sid_default(context, rc, sid, 1362 def_sid, GFP_NOFS); 1363 if (rc) { 1364 char *dev = inode->i_sb->s_id; 1365 unsigned long ino = inode->i_ino; 1366 1367 if (rc == -EINVAL) { 1368 pr_notice_ratelimited("SELinux: inode=%lu on dev=%s was found to have an invalid context=%s. This indicates you may need to relabel the inode or the filesystem in question.\n", 1369 ino, dev, context); 1370 } else { 1371 pr_warn("SELinux: %s: context_to_sid(%s) returned %d for dev=%s ino=%ld\n", 1372 __func__, context, -rc, dev, ino); 1373 } 1374 } 1375 kfree(context); 1376 return 0; 1377 } 1378 1379 /* The inode's security attributes must be initialized before first use. */ 1380 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry) 1381 { 1382 struct superblock_security_struct *sbsec = NULL; 1383 struct inode_security_struct *isec = selinux_inode(inode); 1384 u32 task_sid, sid = 0; 1385 u16 sclass; 1386 struct dentry *dentry; 1387 int rc = 0; 1388 1389 if (isec->initialized == LABEL_INITIALIZED) 1390 return 0; 1391 1392 spin_lock(&isec->lock); 1393 if (isec->initialized == LABEL_INITIALIZED) 1394 goto out_unlock; 1395 1396 if (isec->sclass == SECCLASS_FILE) 1397 isec->sclass = inode_mode_to_security_class(inode->i_mode); 1398 1399 sbsec = selinux_superblock(inode->i_sb); 1400 if (!(sbsec->flags & SE_SBINITIALIZED)) { 1401 /* Defer initialization until selinux_complete_init, 1402 after the initial policy is loaded and the security 1403 server is ready to handle calls. */ 1404 spin_lock(&sbsec->isec_lock); 1405 if (list_empty(&isec->list)) 1406 list_add(&isec->list, &sbsec->isec_head); 1407 spin_unlock(&sbsec->isec_lock); 1408 goto out_unlock; 1409 } 1410 1411 sclass = isec->sclass; 1412 task_sid = isec->task_sid; 1413 sid = isec->sid; 1414 isec->initialized = LABEL_PENDING; 1415 spin_unlock(&isec->lock); 1416 1417 switch (sbsec->behavior) { 1418 /* 1419 * In case of SECURITY_FS_USE_NATIVE we need to re-fetch the labels 1420 * via xattr when called from delayed_superblock_init(). 1421 */ 1422 case SECURITY_FS_USE_NATIVE: 1423 case SECURITY_FS_USE_XATTR: 1424 if (!(inode->i_opflags & IOP_XATTR)) { 1425 sid = sbsec->def_sid; 1426 break; 1427 } 1428 /* Need a dentry, since the xattr API requires one. 1429 Life would be simpler if we could just pass the inode. */ 1430 if (opt_dentry) { 1431 /* Called from d_instantiate or d_splice_alias. */ 1432 dentry = dget(opt_dentry); 1433 } else { 1434 /* 1435 * Called from selinux_complete_init, try to find a dentry. 1436 * Some filesystems really want a connected one, so try 1437 * that first. We could split SECURITY_FS_USE_XATTR in 1438 * two, depending upon that... 1439 */ 1440 dentry = d_find_alias(inode); 1441 if (!dentry) 1442 dentry = d_find_any_alias(inode); 1443 } 1444 if (!dentry) { 1445 /* 1446 * this is can be hit on boot when a file is accessed 1447 * before the policy is loaded. When we load policy we 1448 * may find inodes that have no dentry on the 1449 * sbsec->isec_head list. No reason to complain as these 1450 * will get fixed up the next time we go through 1451 * inode_doinit with a dentry, before these inodes could 1452 * be used again by userspace. 1453 */ 1454 goto out_invalid; 1455 } 1456 1457 rc = inode_doinit_use_xattr(inode, dentry, sbsec->def_sid, 1458 &sid); 1459 dput(dentry); 1460 if (rc) 1461 goto out; 1462 break; 1463 case SECURITY_FS_USE_TASK: 1464 sid = task_sid; 1465 break; 1466 case SECURITY_FS_USE_TRANS: 1467 /* Default to the fs SID. */ 1468 sid = sbsec->sid; 1469 1470 /* Try to obtain a transition SID. */ 1471 rc = security_transition_sid(task_sid, sid, 1472 sclass, NULL, &sid); 1473 if (rc) 1474 goto out; 1475 break; 1476 case SECURITY_FS_USE_MNTPOINT: 1477 sid = sbsec->mntpoint_sid; 1478 break; 1479 default: 1480 /* Default to the fs superblock SID. */ 1481 sid = sbsec->sid; 1482 1483 if ((sbsec->flags & SE_SBGENFS) && 1484 (!S_ISLNK(inode->i_mode) || 1485 selinux_policycap_genfs_seclabel_symlinks())) { 1486 /* We must have a dentry to determine the label on 1487 * procfs inodes */ 1488 if (opt_dentry) { 1489 /* Called from d_instantiate or 1490 * d_splice_alias. */ 1491 dentry = dget(opt_dentry); 1492 } else { 1493 /* Called from selinux_complete_init, try to 1494 * find a dentry. Some filesystems really want 1495 * a connected one, so try that first. 1496 */ 1497 dentry = d_find_alias(inode); 1498 if (!dentry) 1499 dentry = d_find_any_alias(inode); 1500 } 1501 /* 1502 * This can be hit on boot when a file is accessed 1503 * before the policy is loaded. When we load policy we 1504 * may find inodes that have no dentry on the 1505 * sbsec->isec_head list. No reason to complain as 1506 * these will get fixed up the next time we go through 1507 * inode_doinit() with a dentry, before these inodes 1508 * could be used again by userspace. 1509 */ 1510 if (!dentry) 1511 goto out_invalid; 1512 rc = selinux_genfs_get_sid(dentry, sclass, 1513 sbsec->flags, &sid); 1514 if (rc) { 1515 dput(dentry); 1516 goto out; 1517 } 1518 1519 if ((sbsec->flags & SE_SBGENFS_XATTR) && 1520 (inode->i_opflags & IOP_XATTR)) { 1521 rc = inode_doinit_use_xattr(inode, dentry, 1522 sid, &sid); 1523 if (rc) { 1524 dput(dentry); 1525 goto out; 1526 } 1527 } 1528 dput(dentry); 1529 } 1530 break; 1531 } 1532 1533 out: 1534 spin_lock(&isec->lock); 1535 if (isec->initialized == LABEL_PENDING) { 1536 if (rc) { 1537 isec->initialized = LABEL_INVALID; 1538 goto out_unlock; 1539 } 1540 isec->initialized = LABEL_INITIALIZED; 1541 isec->sid = sid; 1542 } 1543 1544 out_unlock: 1545 spin_unlock(&isec->lock); 1546 return rc; 1547 1548 out_invalid: 1549 spin_lock(&isec->lock); 1550 if (isec->initialized == LABEL_PENDING) { 1551 isec->initialized = LABEL_INVALID; 1552 isec->sid = sid; 1553 } 1554 spin_unlock(&isec->lock); 1555 return 0; 1556 } 1557 1558 /* Convert a Linux signal to an access vector. */ 1559 static inline u32 signal_to_av(int sig) 1560 { 1561 u32 perm = 0; 1562 1563 switch (sig) { 1564 case SIGCHLD: 1565 /* Commonly granted from child to parent. */ 1566 perm = PROCESS__SIGCHLD; 1567 break; 1568 case SIGKILL: 1569 /* Cannot be caught or ignored */ 1570 perm = PROCESS__SIGKILL; 1571 break; 1572 case SIGSTOP: 1573 /* Cannot be caught or ignored */ 1574 perm = PROCESS__SIGSTOP; 1575 break; 1576 default: 1577 /* All other signals. */ 1578 perm = PROCESS__SIGNAL; 1579 break; 1580 } 1581 1582 return perm; 1583 } 1584 1585 #if CAP_LAST_CAP > 63 1586 #error Fix SELinux to handle capabilities > 63. 1587 #endif 1588 1589 /* Check whether a task is allowed to use a capability. */ 1590 static int cred_has_capability(const struct cred *cred, 1591 int cap, unsigned int opts, bool initns) 1592 { 1593 struct common_audit_data ad; 1594 struct av_decision avd; 1595 u16 sclass; 1596 u32 sid = cred_sid(cred); 1597 u32 av = CAP_TO_MASK(cap); 1598 int rc; 1599 1600 ad.type = LSM_AUDIT_DATA_CAP; 1601 ad.u.cap = cap; 1602 1603 switch (CAP_TO_INDEX(cap)) { 1604 case 0: 1605 sclass = initns ? SECCLASS_CAPABILITY : SECCLASS_CAP_USERNS; 1606 break; 1607 case 1: 1608 sclass = initns ? SECCLASS_CAPABILITY2 : SECCLASS_CAP2_USERNS; 1609 break; 1610 default: 1611 pr_err("SELinux: out of range capability %d\n", cap); 1612 BUG(); 1613 return -EINVAL; 1614 } 1615 1616 rc = avc_has_perm_noaudit(sid, sid, sclass, av, 0, &avd); 1617 if (!(opts & CAP_OPT_NOAUDIT)) { 1618 int rc2 = avc_audit(sid, sid, sclass, av, &avd, rc, &ad); 1619 if (rc2) 1620 return rc2; 1621 } 1622 return rc; 1623 } 1624 1625 /* Check whether a task has a particular permission to an inode. 1626 The 'adp' parameter is optional and allows other audit 1627 data to be passed (e.g. the dentry). */ 1628 static int inode_has_perm(const struct cred *cred, 1629 struct inode *inode, 1630 u32 perms, 1631 struct common_audit_data *adp) 1632 { 1633 struct inode_security_struct *isec; 1634 u32 sid; 1635 1636 validate_creds(cred); 1637 1638 if (unlikely(IS_PRIVATE(inode))) 1639 return 0; 1640 1641 sid = cred_sid(cred); 1642 isec = selinux_inode(inode); 1643 1644 return avc_has_perm(sid, isec->sid, isec->sclass, perms, adp); 1645 } 1646 1647 /* Same as inode_has_perm, but pass explicit audit data containing 1648 the dentry to help the auditing code to more easily generate the 1649 pathname if needed. */ 1650 static inline int dentry_has_perm(const struct cred *cred, 1651 struct dentry *dentry, 1652 u32 av) 1653 { 1654 struct inode *inode = d_backing_inode(dentry); 1655 struct common_audit_data ad; 1656 1657 ad.type = LSM_AUDIT_DATA_DENTRY; 1658 ad.u.dentry = dentry; 1659 __inode_security_revalidate(inode, dentry, true); 1660 return inode_has_perm(cred, inode, av, &ad); 1661 } 1662 1663 /* Same as inode_has_perm, but pass explicit audit data containing 1664 the path to help the auditing code to more easily generate the 1665 pathname if needed. */ 1666 static inline int path_has_perm(const struct cred *cred, 1667 const struct path *path, 1668 u32 av) 1669 { 1670 struct inode *inode = d_backing_inode(path->dentry); 1671 struct common_audit_data ad; 1672 1673 ad.type = LSM_AUDIT_DATA_PATH; 1674 ad.u.path = *path; 1675 __inode_security_revalidate(inode, path->dentry, true); 1676 return inode_has_perm(cred, inode, av, &ad); 1677 } 1678 1679 /* Same as path_has_perm, but uses the inode from the file struct. */ 1680 static inline int file_path_has_perm(const struct cred *cred, 1681 struct file *file, 1682 u32 av) 1683 { 1684 struct common_audit_data ad; 1685 1686 ad.type = LSM_AUDIT_DATA_FILE; 1687 ad.u.file = file; 1688 return inode_has_perm(cred, file_inode(file), av, &ad); 1689 } 1690 1691 #ifdef CONFIG_BPF_SYSCALL 1692 static int bpf_fd_pass(struct file *file, u32 sid); 1693 #endif 1694 1695 /* Check whether a task can use an open file descriptor to 1696 access an inode in a given way. Check access to the 1697 descriptor itself, and then use dentry_has_perm to 1698 check a particular permission to the file. 1699 Access to the descriptor is implicitly granted if it 1700 has the same SID as the process. If av is zero, then 1701 access to the file is not checked, e.g. for cases 1702 where only the descriptor is affected like seek. */ 1703 static int file_has_perm(const struct cred *cred, 1704 struct file *file, 1705 u32 av) 1706 { 1707 struct file_security_struct *fsec = selinux_file(file); 1708 struct inode *inode = file_inode(file); 1709 struct common_audit_data ad; 1710 u32 sid = cred_sid(cred); 1711 int rc; 1712 1713 ad.type = LSM_AUDIT_DATA_FILE; 1714 ad.u.file = file; 1715 1716 if (sid != fsec->sid) { 1717 rc = avc_has_perm(sid, fsec->sid, 1718 SECCLASS_FD, 1719 FD__USE, 1720 &ad); 1721 if (rc) 1722 goto out; 1723 } 1724 1725 #ifdef CONFIG_BPF_SYSCALL 1726 rc = bpf_fd_pass(file, cred_sid(cred)); 1727 if (rc) 1728 return rc; 1729 #endif 1730 1731 /* av is zero if only checking access to the descriptor. */ 1732 rc = 0; 1733 if (av) 1734 rc = inode_has_perm(cred, inode, av, &ad); 1735 1736 out: 1737 return rc; 1738 } 1739 1740 /* 1741 * Determine the label for an inode that might be unioned. 1742 */ 1743 static int 1744 selinux_determine_inode_label(const struct task_security_struct *tsec, 1745 struct inode *dir, 1746 const struct qstr *name, u16 tclass, 1747 u32 *_new_isid) 1748 { 1749 const struct superblock_security_struct *sbsec = 1750 selinux_superblock(dir->i_sb); 1751 1752 if ((sbsec->flags & SE_SBINITIALIZED) && 1753 (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) { 1754 *_new_isid = sbsec->mntpoint_sid; 1755 } else if ((sbsec->flags & SBLABEL_MNT) && 1756 tsec->create_sid) { 1757 *_new_isid = tsec->create_sid; 1758 } else { 1759 const struct inode_security_struct *dsec = inode_security(dir); 1760 return security_transition_sid(tsec->sid, 1761 dsec->sid, tclass, 1762 name, _new_isid); 1763 } 1764 1765 return 0; 1766 } 1767 1768 /* Check whether a task can create a file. */ 1769 static int may_create(struct inode *dir, 1770 struct dentry *dentry, 1771 u16 tclass) 1772 { 1773 const struct task_security_struct *tsec = selinux_cred(current_cred()); 1774 struct inode_security_struct *dsec; 1775 struct superblock_security_struct *sbsec; 1776 u32 sid, newsid; 1777 struct common_audit_data ad; 1778 int rc; 1779 1780 dsec = inode_security(dir); 1781 sbsec = selinux_superblock(dir->i_sb); 1782 1783 sid = tsec->sid; 1784 1785 ad.type = LSM_AUDIT_DATA_DENTRY; 1786 ad.u.dentry = dentry; 1787 1788 rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR, 1789 DIR__ADD_NAME | DIR__SEARCH, 1790 &ad); 1791 if (rc) 1792 return rc; 1793 1794 rc = selinux_determine_inode_label(tsec, dir, &dentry->d_name, tclass, 1795 &newsid); 1796 if (rc) 1797 return rc; 1798 1799 rc = avc_has_perm(sid, newsid, tclass, FILE__CREATE, &ad); 1800 if (rc) 1801 return rc; 1802 1803 return avc_has_perm(newsid, sbsec->sid, 1804 SECCLASS_FILESYSTEM, 1805 FILESYSTEM__ASSOCIATE, &ad); 1806 } 1807 1808 #define MAY_LINK 0 1809 #define MAY_UNLINK 1 1810 #define MAY_RMDIR 2 1811 1812 /* Check whether a task can link, unlink, or rmdir a file/directory. */ 1813 static int may_link(struct inode *dir, 1814 struct dentry *dentry, 1815 int kind) 1816 1817 { 1818 struct inode_security_struct *dsec, *isec; 1819 struct common_audit_data ad; 1820 u32 sid = current_sid(); 1821 u32 av; 1822 int rc; 1823 1824 dsec = inode_security(dir); 1825 isec = backing_inode_security(dentry); 1826 1827 ad.type = LSM_AUDIT_DATA_DENTRY; 1828 ad.u.dentry = dentry; 1829 1830 av = DIR__SEARCH; 1831 av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME); 1832 rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR, av, &ad); 1833 if (rc) 1834 return rc; 1835 1836 switch (kind) { 1837 case MAY_LINK: 1838 av = FILE__LINK; 1839 break; 1840 case MAY_UNLINK: 1841 av = FILE__UNLINK; 1842 break; 1843 case MAY_RMDIR: 1844 av = DIR__RMDIR; 1845 break; 1846 default: 1847 pr_warn("SELinux: %s: unrecognized kind %d\n", 1848 __func__, kind); 1849 return 0; 1850 } 1851 1852 rc = avc_has_perm(sid, isec->sid, isec->sclass, av, &ad); 1853 return rc; 1854 } 1855 1856 static inline int may_rename(struct inode *old_dir, 1857 struct dentry *old_dentry, 1858 struct inode *new_dir, 1859 struct dentry *new_dentry) 1860 { 1861 struct inode_security_struct *old_dsec, *new_dsec, *old_isec, *new_isec; 1862 struct common_audit_data ad; 1863 u32 sid = current_sid(); 1864 u32 av; 1865 int old_is_dir, new_is_dir; 1866 int rc; 1867 1868 old_dsec = inode_security(old_dir); 1869 old_isec = backing_inode_security(old_dentry); 1870 old_is_dir = d_is_dir(old_dentry); 1871 new_dsec = inode_security(new_dir); 1872 1873 ad.type = LSM_AUDIT_DATA_DENTRY; 1874 1875 ad.u.dentry = old_dentry; 1876 rc = avc_has_perm(sid, old_dsec->sid, SECCLASS_DIR, 1877 DIR__REMOVE_NAME | DIR__SEARCH, &ad); 1878 if (rc) 1879 return rc; 1880 rc = avc_has_perm(sid, old_isec->sid, 1881 old_isec->sclass, FILE__RENAME, &ad); 1882 if (rc) 1883 return rc; 1884 if (old_is_dir && new_dir != old_dir) { 1885 rc = avc_has_perm(sid, old_isec->sid, 1886 old_isec->sclass, DIR__REPARENT, &ad); 1887 if (rc) 1888 return rc; 1889 } 1890 1891 ad.u.dentry = new_dentry; 1892 av = DIR__ADD_NAME | DIR__SEARCH; 1893 if (d_is_positive(new_dentry)) 1894 av |= DIR__REMOVE_NAME; 1895 rc = avc_has_perm(sid, new_dsec->sid, SECCLASS_DIR, av, &ad); 1896 if (rc) 1897 return rc; 1898 if (d_is_positive(new_dentry)) { 1899 new_isec = backing_inode_security(new_dentry); 1900 new_is_dir = d_is_dir(new_dentry); 1901 rc = avc_has_perm(sid, new_isec->sid, 1902 new_isec->sclass, 1903 (new_is_dir ? DIR__RMDIR : FILE__UNLINK), &ad); 1904 if (rc) 1905 return rc; 1906 } 1907 1908 return 0; 1909 } 1910 1911 /* Check whether a task can perform a filesystem operation. */ 1912 static int superblock_has_perm(const struct cred *cred, 1913 struct super_block *sb, 1914 u32 perms, 1915 struct common_audit_data *ad) 1916 { 1917 struct superblock_security_struct *sbsec; 1918 u32 sid = cred_sid(cred); 1919 1920 sbsec = selinux_superblock(sb); 1921 return avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad); 1922 } 1923 1924 /* Convert a Linux mode and permission mask to an access vector. */ 1925 static inline u32 file_mask_to_av(int mode, int mask) 1926 { 1927 u32 av = 0; 1928 1929 if (!S_ISDIR(mode)) { 1930 if (mask & MAY_EXEC) 1931 av |= FILE__EXECUTE; 1932 if (mask & MAY_READ) 1933 av |= FILE__READ; 1934 1935 if (mask & MAY_APPEND) 1936 av |= FILE__APPEND; 1937 else if (mask & MAY_WRITE) 1938 av |= FILE__WRITE; 1939 1940 } else { 1941 if (mask & MAY_EXEC) 1942 av |= DIR__SEARCH; 1943 if (mask & MAY_WRITE) 1944 av |= DIR__WRITE; 1945 if (mask & MAY_READ) 1946 av |= DIR__READ; 1947 } 1948 1949 return av; 1950 } 1951 1952 /* Convert a Linux file to an access vector. */ 1953 static inline u32 file_to_av(struct file *file) 1954 { 1955 u32 av = 0; 1956 1957 if (file->f_mode & FMODE_READ) 1958 av |= FILE__READ; 1959 if (file->f_mode & FMODE_WRITE) { 1960 if (file->f_flags & O_APPEND) 1961 av |= FILE__APPEND; 1962 else 1963 av |= FILE__WRITE; 1964 } 1965 if (!av) { 1966 /* 1967 * Special file opened with flags 3 for ioctl-only use. 1968 */ 1969 av = FILE__IOCTL; 1970 } 1971 1972 return av; 1973 } 1974 1975 /* 1976 * Convert a file to an access vector and include the correct 1977 * open permission. 1978 */ 1979 static inline u32 open_file_to_av(struct file *file) 1980 { 1981 u32 av = file_to_av(file); 1982 struct inode *inode = file_inode(file); 1983 1984 if (selinux_policycap_openperm() && 1985 inode->i_sb->s_magic != SOCKFS_MAGIC) 1986 av |= FILE__OPEN; 1987 1988 return av; 1989 } 1990 1991 /* Hook functions begin here. */ 1992 1993 static int selinux_binder_set_context_mgr(const struct cred *mgr) 1994 { 1995 return avc_has_perm(current_sid(), cred_sid(mgr), SECCLASS_BINDER, 1996 BINDER__SET_CONTEXT_MGR, NULL); 1997 } 1998 1999 static int selinux_binder_transaction(const struct cred *from, 2000 const struct cred *to) 2001 { 2002 u32 mysid = current_sid(); 2003 u32 fromsid = cred_sid(from); 2004 u32 tosid = cred_sid(to); 2005 int rc; 2006 2007 if (mysid != fromsid) { 2008 rc = avc_has_perm(mysid, fromsid, SECCLASS_BINDER, 2009 BINDER__IMPERSONATE, NULL); 2010 if (rc) 2011 return rc; 2012 } 2013 2014 return avc_has_perm(fromsid, tosid, 2015 SECCLASS_BINDER, BINDER__CALL, NULL); 2016 } 2017 2018 static int selinux_binder_transfer_binder(const struct cred *from, 2019 const struct cred *to) 2020 { 2021 return avc_has_perm(cred_sid(from), cred_sid(to), 2022 SECCLASS_BINDER, BINDER__TRANSFER, 2023 NULL); 2024 } 2025 2026 static int selinux_binder_transfer_file(const struct cred *from, 2027 const struct cred *to, 2028 struct file *file) 2029 { 2030 u32 sid = cred_sid(to); 2031 struct file_security_struct *fsec = selinux_file(file); 2032 struct dentry *dentry = file->f_path.dentry; 2033 struct inode_security_struct *isec; 2034 struct common_audit_data ad; 2035 int rc; 2036 2037 ad.type = LSM_AUDIT_DATA_PATH; 2038 ad.u.path = file->f_path; 2039 2040 if (sid != fsec->sid) { 2041 rc = avc_has_perm(sid, fsec->sid, 2042 SECCLASS_FD, 2043 FD__USE, 2044 &ad); 2045 if (rc) 2046 return rc; 2047 } 2048 2049 #ifdef CONFIG_BPF_SYSCALL 2050 rc = bpf_fd_pass(file, sid); 2051 if (rc) 2052 return rc; 2053 #endif 2054 2055 if (unlikely(IS_PRIVATE(d_backing_inode(dentry)))) 2056 return 0; 2057 2058 isec = backing_inode_security(dentry); 2059 return avc_has_perm(sid, isec->sid, isec->sclass, file_to_av(file), 2060 &ad); 2061 } 2062 2063 static int selinux_ptrace_access_check(struct task_struct *child, 2064 unsigned int mode) 2065 { 2066 u32 sid = current_sid(); 2067 u32 csid = task_sid_obj(child); 2068 2069 if (mode & PTRACE_MODE_READ) 2070 return avc_has_perm(sid, csid, SECCLASS_FILE, FILE__READ, 2071 NULL); 2072 2073 return avc_has_perm(sid, csid, SECCLASS_PROCESS, PROCESS__PTRACE, 2074 NULL); 2075 } 2076 2077 static int selinux_ptrace_traceme(struct task_struct *parent) 2078 { 2079 return avc_has_perm(task_sid_obj(parent), task_sid_obj(current), 2080 SECCLASS_PROCESS, PROCESS__PTRACE, NULL); 2081 } 2082 2083 static int selinux_capget(struct task_struct *target, kernel_cap_t *effective, 2084 kernel_cap_t *inheritable, kernel_cap_t *permitted) 2085 { 2086 return avc_has_perm(current_sid(), task_sid_obj(target), 2087 SECCLASS_PROCESS, PROCESS__GETCAP, NULL); 2088 } 2089 2090 static int selinux_capset(struct cred *new, const struct cred *old, 2091 const kernel_cap_t *effective, 2092 const kernel_cap_t *inheritable, 2093 const kernel_cap_t *permitted) 2094 { 2095 return avc_has_perm(cred_sid(old), cred_sid(new), SECCLASS_PROCESS, 2096 PROCESS__SETCAP, NULL); 2097 } 2098 2099 /* 2100 * (This comment used to live with the selinux_task_setuid hook, 2101 * which was removed). 2102 * 2103 * Since setuid only affects the current process, and since the SELinux 2104 * controls are not based on the Linux identity attributes, SELinux does not 2105 * need to control this operation. However, SELinux does control the use of 2106 * the CAP_SETUID and CAP_SETGID capabilities using the capable hook. 2107 */ 2108 2109 static int selinux_capable(const struct cred *cred, struct user_namespace *ns, 2110 int cap, unsigned int opts) 2111 { 2112 return cred_has_capability(cred, cap, opts, ns == &init_user_ns); 2113 } 2114 2115 static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb) 2116 { 2117 const struct cred *cred = current_cred(); 2118 int rc = 0; 2119 2120 if (!sb) 2121 return 0; 2122 2123 switch (cmds) { 2124 case Q_SYNC: 2125 case Q_QUOTAON: 2126 case Q_QUOTAOFF: 2127 case Q_SETINFO: 2128 case Q_SETQUOTA: 2129 case Q_XQUOTAOFF: 2130 case Q_XQUOTAON: 2131 case Q_XSETQLIM: 2132 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAMOD, NULL); 2133 break; 2134 case Q_GETFMT: 2135 case Q_GETINFO: 2136 case Q_GETQUOTA: 2137 case Q_XGETQUOTA: 2138 case Q_XGETQSTAT: 2139 case Q_XGETQSTATV: 2140 case Q_XGETNEXTQUOTA: 2141 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAGET, NULL); 2142 break; 2143 default: 2144 rc = 0; /* let the kernel handle invalid cmds */ 2145 break; 2146 } 2147 return rc; 2148 } 2149 2150 static int selinux_quota_on(struct dentry *dentry) 2151 { 2152 const struct cred *cred = current_cred(); 2153 2154 return dentry_has_perm(cred, dentry, FILE__QUOTAON); 2155 } 2156 2157 static int selinux_syslog(int type) 2158 { 2159 switch (type) { 2160 case SYSLOG_ACTION_READ_ALL: /* Read last kernel messages */ 2161 case SYSLOG_ACTION_SIZE_BUFFER: /* Return size of the log buffer */ 2162 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 2163 SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, NULL); 2164 case SYSLOG_ACTION_CONSOLE_OFF: /* Disable logging to console */ 2165 case SYSLOG_ACTION_CONSOLE_ON: /* Enable logging to console */ 2166 /* Set level of messages printed to console */ 2167 case SYSLOG_ACTION_CONSOLE_LEVEL: 2168 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 2169 SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE, 2170 NULL); 2171 } 2172 /* All other syslog types */ 2173 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 2174 SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, NULL); 2175 } 2176 2177 /* 2178 * Check that a process has enough memory to allocate a new virtual 2179 * mapping. 0 means there is enough memory for the allocation to 2180 * succeed and -ENOMEM implies there is not. 2181 * 2182 * Do not audit the selinux permission check, as this is applied to all 2183 * processes that allocate mappings. 2184 */ 2185 static int selinux_vm_enough_memory(struct mm_struct *mm, long pages) 2186 { 2187 int rc, cap_sys_admin = 0; 2188 2189 rc = cred_has_capability(current_cred(), CAP_SYS_ADMIN, 2190 CAP_OPT_NOAUDIT, true); 2191 if (rc == 0) 2192 cap_sys_admin = 1; 2193 2194 return cap_sys_admin; 2195 } 2196 2197 /* binprm security operations */ 2198 2199 static u32 ptrace_parent_sid(void) 2200 { 2201 u32 sid = 0; 2202 struct task_struct *tracer; 2203 2204 rcu_read_lock(); 2205 tracer = ptrace_parent(current); 2206 if (tracer) 2207 sid = task_sid_obj(tracer); 2208 rcu_read_unlock(); 2209 2210 return sid; 2211 } 2212 2213 static int check_nnp_nosuid(const struct linux_binprm *bprm, 2214 const struct task_security_struct *old_tsec, 2215 const struct task_security_struct *new_tsec) 2216 { 2217 int nnp = (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS); 2218 int nosuid = !mnt_may_suid(bprm->file->f_path.mnt); 2219 int rc; 2220 u32 av; 2221 2222 if (!nnp && !nosuid) 2223 return 0; /* neither NNP nor nosuid */ 2224 2225 if (new_tsec->sid == old_tsec->sid) 2226 return 0; /* No change in credentials */ 2227 2228 /* 2229 * If the policy enables the nnp_nosuid_transition policy capability, 2230 * then we permit transitions under NNP or nosuid if the 2231 * policy allows the corresponding permission between 2232 * the old and new contexts. 2233 */ 2234 if (selinux_policycap_nnp_nosuid_transition()) { 2235 av = 0; 2236 if (nnp) 2237 av |= PROCESS2__NNP_TRANSITION; 2238 if (nosuid) 2239 av |= PROCESS2__NOSUID_TRANSITION; 2240 rc = avc_has_perm(old_tsec->sid, new_tsec->sid, 2241 SECCLASS_PROCESS2, av, NULL); 2242 if (!rc) 2243 return 0; 2244 } 2245 2246 /* 2247 * We also permit NNP or nosuid transitions to bounded SIDs, 2248 * i.e. SIDs that are guaranteed to only be allowed a subset 2249 * of the permissions of the current SID. 2250 */ 2251 rc = security_bounded_transition(old_tsec->sid, 2252 new_tsec->sid); 2253 if (!rc) 2254 return 0; 2255 2256 /* 2257 * On failure, preserve the errno values for NNP vs nosuid. 2258 * NNP: Operation not permitted for caller. 2259 * nosuid: Permission denied to file. 2260 */ 2261 if (nnp) 2262 return -EPERM; 2263 return -EACCES; 2264 } 2265 2266 static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm) 2267 { 2268 const struct task_security_struct *old_tsec; 2269 struct task_security_struct *new_tsec; 2270 struct inode_security_struct *isec; 2271 struct common_audit_data ad; 2272 struct inode *inode = file_inode(bprm->file); 2273 int rc; 2274 2275 /* SELinux context only depends on initial program or script and not 2276 * the script interpreter */ 2277 2278 old_tsec = selinux_cred(current_cred()); 2279 new_tsec = selinux_cred(bprm->cred); 2280 isec = inode_security(inode); 2281 2282 /* Default to the current task SID. */ 2283 new_tsec->sid = old_tsec->sid; 2284 new_tsec->osid = old_tsec->sid; 2285 2286 /* Reset fs, key, and sock SIDs on execve. */ 2287 new_tsec->create_sid = 0; 2288 new_tsec->keycreate_sid = 0; 2289 new_tsec->sockcreate_sid = 0; 2290 2291 if (old_tsec->exec_sid) { 2292 new_tsec->sid = old_tsec->exec_sid; 2293 /* Reset exec SID on execve. */ 2294 new_tsec->exec_sid = 0; 2295 2296 /* Fail on NNP or nosuid if not an allowed transition. */ 2297 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec); 2298 if (rc) 2299 return rc; 2300 } else { 2301 /* Check for a default transition on this program. */ 2302 rc = security_transition_sid(old_tsec->sid, 2303 isec->sid, SECCLASS_PROCESS, NULL, 2304 &new_tsec->sid); 2305 if (rc) 2306 return rc; 2307 2308 /* 2309 * Fallback to old SID on NNP or nosuid if not an allowed 2310 * transition. 2311 */ 2312 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec); 2313 if (rc) 2314 new_tsec->sid = old_tsec->sid; 2315 } 2316 2317 ad.type = LSM_AUDIT_DATA_FILE; 2318 ad.u.file = bprm->file; 2319 2320 if (new_tsec->sid == old_tsec->sid) { 2321 rc = avc_has_perm(old_tsec->sid, isec->sid, 2322 SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, &ad); 2323 if (rc) 2324 return rc; 2325 } else { 2326 /* Check permissions for the transition. */ 2327 rc = avc_has_perm(old_tsec->sid, new_tsec->sid, 2328 SECCLASS_PROCESS, PROCESS__TRANSITION, &ad); 2329 if (rc) 2330 return rc; 2331 2332 rc = avc_has_perm(new_tsec->sid, isec->sid, 2333 SECCLASS_FILE, FILE__ENTRYPOINT, &ad); 2334 if (rc) 2335 return rc; 2336 2337 /* Check for shared state */ 2338 if (bprm->unsafe & LSM_UNSAFE_SHARE) { 2339 rc = avc_has_perm(old_tsec->sid, new_tsec->sid, 2340 SECCLASS_PROCESS, PROCESS__SHARE, 2341 NULL); 2342 if (rc) 2343 return -EPERM; 2344 } 2345 2346 /* Make sure that anyone attempting to ptrace over a task that 2347 * changes its SID has the appropriate permit */ 2348 if (bprm->unsafe & LSM_UNSAFE_PTRACE) { 2349 u32 ptsid = ptrace_parent_sid(); 2350 if (ptsid != 0) { 2351 rc = avc_has_perm(ptsid, new_tsec->sid, 2352 SECCLASS_PROCESS, 2353 PROCESS__PTRACE, NULL); 2354 if (rc) 2355 return -EPERM; 2356 } 2357 } 2358 2359 /* Clear any possibly unsafe personality bits on exec: */ 2360 bprm->per_clear |= PER_CLEAR_ON_SETID; 2361 2362 /* Enable secure mode for SIDs transitions unless 2363 the noatsecure permission is granted between 2364 the two SIDs, i.e. ahp returns 0. */ 2365 rc = avc_has_perm(old_tsec->sid, new_tsec->sid, 2366 SECCLASS_PROCESS, PROCESS__NOATSECURE, 2367 NULL); 2368 bprm->secureexec |= !!rc; 2369 } 2370 2371 return 0; 2372 } 2373 2374 static int match_file(const void *p, struct file *file, unsigned fd) 2375 { 2376 return file_has_perm(p, file, file_to_av(file)) ? fd + 1 : 0; 2377 } 2378 2379 /* Derived from fs/exec.c:flush_old_files. */ 2380 static inline void flush_unauthorized_files(const struct cred *cred, 2381 struct files_struct *files) 2382 { 2383 struct file *file, *devnull = NULL; 2384 struct tty_struct *tty; 2385 int drop_tty = 0; 2386 unsigned n; 2387 2388 tty = get_current_tty(); 2389 if (tty) { 2390 spin_lock(&tty->files_lock); 2391 if (!list_empty(&tty->tty_files)) { 2392 struct tty_file_private *file_priv; 2393 2394 /* Revalidate access to controlling tty. 2395 Use file_path_has_perm on the tty path directly 2396 rather than using file_has_perm, as this particular 2397 open file may belong to another process and we are 2398 only interested in the inode-based check here. */ 2399 file_priv = list_first_entry(&tty->tty_files, 2400 struct tty_file_private, list); 2401 file = file_priv->file; 2402 if (file_path_has_perm(cred, file, FILE__READ | FILE__WRITE)) 2403 drop_tty = 1; 2404 } 2405 spin_unlock(&tty->files_lock); 2406 tty_kref_put(tty); 2407 } 2408 /* Reset controlling tty. */ 2409 if (drop_tty) 2410 no_tty(); 2411 2412 /* Revalidate access to inherited open files. */ 2413 n = iterate_fd(files, 0, match_file, cred); 2414 if (!n) /* none found? */ 2415 return; 2416 2417 devnull = dentry_open(&selinux_null, O_RDWR, cred); 2418 if (IS_ERR(devnull)) 2419 devnull = NULL; 2420 /* replace all the matching ones with this */ 2421 do { 2422 replace_fd(n - 1, devnull, 0); 2423 } while ((n = iterate_fd(files, n, match_file, cred)) != 0); 2424 if (devnull) 2425 fput(devnull); 2426 } 2427 2428 /* 2429 * Prepare a process for imminent new credential changes due to exec 2430 */ 2431 static void selinux_bprm_committing_creds(struct linux_binprm *bprm) 2432 { 2433 struct task_security_struct *new_tsec; 2434 struct rlimit *rlim, *initrlim; 2435 int rc, i; 2436 2437 new_tsec = selinux_cred(bprm->cred); 2438 if (new_tsec->sid == new_tsec->osid) 2439 return; 2440 2441 /* Close files for which the new task SID is not authorized. */ 2442 flush_unauthorized_files(bprm->cred, current->files); 2443 2444 /* Always clear parent death signal on SID transitions. */ 2445 current->pdeath_signal = 0; 2446 2447 /* Check whether the new SID can inherit resource limits from the old 2448 * SID. If not, reset all soft limits to the lower of the current 2449 * task's hard limit and the init task's soft limit. 2450 * 2451 * Note that the setting of hard limits (even to lower them) can be 2452 * controlled by the setrlimit check. The inclusion of the init task's 2453 * soft limit into the computation is to avoid resetting soft limits 2454 * higher than the default soft limit for cases where the default is 2455 * lower than the hard limit, e.g. RLIMIT_CORE or RLIMIT_STACK. 2456 */ 2457 rc = avc_has_perm(new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS, 2458 PROCESS__RLIMITINH, NULL); 2459 if (rc) { 2460 /* protect against do_prlimit() */ 2461 task_lock(current); 2462 for (i = 0; i < RLIM_NLIMITS; i++) { 2463 rlim = current->signal->rlim + i; 2464 initrlim = init_task.signal->rlim + i; 2465 rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur); 2466 } 2467 task_unlock(current); 2468 if (IS_ENABLED(CONFIG_POSIX_TIMERS)) 2469 update_rlimit_cpu(current, rlimit(RLIMIT_CPU)); 2470 } 2471 } 2472 2473 /* 2474 * Clean up the process immediately after the installation of new credentials 2475 * due to exec 2476 */ 2477 static void selinux_bprm_committed_creds(struct linux_binprm *bprm) 2478 { 2479 const struct task_security_struct *tsec = selinux_cred(current_cred()); 2480 u32 osid, sid; 2481 int rc; 2482 2483 osid = tsec->osid; 2484 sid = tsec->sid; 2485 2486 if (sid == osid) 2487 return; 2488 2489 /* Check whether the new SID can inherit signal state from the old SID. 2490 * If not, clear itimers to avoid subsequent signal generation and 2491 * flush and unblock signals. 2492 * 2493 * This must occur _after_ the task SID has been updated so that any 2494 * kill done after the flush will be checked against the new SID. 2495 */ 2496 rc = avc_has_perm(osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL); 2497 if (rc) { 2498 clear_itimer(); 2499 2500 spin_lock_irq(&unrcu_pointer(current->sighand)->siglock); 2501 if (!fatal_signal_pending(current)) { 2502 flush_sigqueue(¤t->pending); 2503 flush_sigqueue(¤t->signal->shared_pending); 2504 flush_signal_handlers(current, 1); 2505 sigemptyset(¤t->blocked); 2506 recalc_sigpending(); 2507 } 2508 spin_unlock_irq(&unrcu_pointer(current->sighand)->siglock); 2509 } 2510 2511 /* Wake up the parent if it is waiting so that it can recheck 2512 * wait permission to the new task SID. */ 2513 read_lock(&tasklist_lock); 2514 __wake_up_parent(current, unrcu_pointer(current->real_parent)); 2515 read_unlock(&tasklist_lock); 2516 } 2517 2518 /* superblock security operations */ 2519 2520 static int selinux_sb_alloc_security(struct super_block *sb) 2521 { 2522 struct superblock_security_struct *sbsec = selinux_superblock(sb); 2523 2524 mutex_init(&sbsec->lock); 2525 INIT_LIST_HEAD(&sbsec->isec_head); 2526 spin_lock_init(&sbsec->isec_lock); 2527 sbsec->sid = SECINITSID_UNLABELED; 2528 sbsec->def_sid = SECINITSID_FILE; 2529 sbsec->mntpoint_sid = SECINITSID_UNLABELED; 2530 2531 return 0; 2532 } 2533 2534 static inline int opt_len(const char *s) 2535 { 2536 bool open_quote = false; 2537 int len; 2538 char c; 2539 2540 for (len = 0; (c = s[len]) != '\0'; len++) { 2541 if (c == '"') 2542 open_quote = !open_quote; 2543 if (c == ',' && !open_quote) 2544 break; 2545 } 2546 return len; 2547 } 2548 2549 static int selinux_sb_eat_lsm_opts(char *options, void **mnt_opts) 2550 { 2551 char *from = options; 2552 char *to = options; 2553 bool first = true; 2554 int rc; 2555 2556 while (1) { 2557 int len = opt_len(from); 2558 int token; 2559 char *arg = NULL; 2560 2561 token = match_opt_prefix(from, len, &arg); 2562 2563 if (token != Opt_error) { 2564 char *p, *q; 2565 2566 /* strip quotes */ 2567 if (arg) { 2568 for (p = q = arg; p < from + len; p++) { 2569 char c = *p; 2570 if (c != '"') 2571 *q++ = c; 2572 } 2573 arg = kmemdup_nul(arg, q - arg, GFP_KERNEL); 2574 if (!arg) { 2575 rc = -ENOMEM; 2576 goto free_opt; 2577 } 2578 } 2579 rc = selinux_add_opt(token, arg, mnt_opts); 2580 kfree(arg); 2581 arg = NULL; 2582 if (unlikely(rc)) { 2583 goto free_opt; 2584 } 2585 } else { 2586 if (!first) { // copy with preceding comma 2587 from--; 2588 len++; 2589 } 2590 if (to != from) 2591 memmove(to, from, len); 2592 to += len; 2593 first = false; 2594 } 2595 if (!from[len]) 2596 break; 2597 from += len + 1; 2598 } 2599 *to = '\0'; 2600 return 0; 2601 2602 free_opt: 2603 if (*mnt_opts) { 2604 selinux_free_mnt_opts(*mnt_opts); 2605 *mnt_opts = NULL; 2606 } 2607 return rc; 2608 } 2609 2610 static int selinux_sb_mnt_opts_compat(struct super_block *sb, void *mnt_opts) 2611 { 2612 struct selinux_mnt_opts *opts = mnt_opts; 2613 struct superblock_security_struct *sbsec = selinux_superblock(sb); 2614 2615 /* 2616 * Superblock not initialized (i.e. no options) - reject if any 2617 * options specified, otherwise accept. 2618 */ 2619 if (!(sbsec->flags & SE_SBINITIALIZED)) 2620 return opts ? 1 : 0; 2621 2622 /* 2623 * Superblock initialized and no options specified - reject if 2624 * superblock has any options set, otherwise accept. 2625 */ 2626 if (!opts) 2627 return (sbsec->flags & SE_MNTMASK) ? 1 : 0; 2628 2629 if (opts->fscontext_sid) { 2630 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, 2631 opts->fscontext_sid)) 2632 return 1; 2633 } 2634 if (opts->context_sid) { 2635 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, 2636 opts->context_sid)) 2637 return 1; 2638 } 2639 if (opts->rootcontext_sid) { 2640 struct inode_security_struct *root_isec; 2641 2642 root_isec = backing_inode_security(sb->s_root); 2643 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, 2644 opts->rootcontext_sid)) 2645 return 1; 2646 } 2647 if (opts->defcontext_sid) { 2648 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, 2649 opts->defcontext_sid)) 2650 return 1; 2651 } 2652 return 0; 2653 } 2654 2655 static int selinux_sb_remount(struct super_block *sb, void *mnt_opts) 2656 { 2657 struct selinux_mnt_opts *opts = mnt_opts; 2658 struct superblock_security_struct *sbsec = selinux_superblock(sb); 2659 2660 if (!(sbsec->flags & SE_SBINITIALIZED)) 2661 return 0; 2662 2663 if (!opts) 2664 return 0; 2665 2666 if (opts->fscontext_sid) { 2667 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, 2668 opts->fscontext_sid)) 2669 goto out_bad_option; 2670 } 2671 if (opts->context_sid) { 2672 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, 2673 opts->context_sid)) 2674 goto out_bad_option; 2675 } 2676 if (opts->rootcontext_sid) { 2677 struct inode_security_struct *root_isec; 2678 root_isec = backing_inode_security(sb->s_root); 2679 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, 2680 opts->rootcontext_sid)) 2681 goto out_bad_option; 2682 } 2683 if (opts->defcontext_sid) { 2684 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, 2685 opts->defcontext_sid)) 2686 goto out_bad_option; 2687 } 2688 return 0; 2689 2690 out_bad_option: 2691 pr_warn("SELinux: unable to change security options " 2692 "during remount (dev %s, type=%s)\n", sb->s_id, 2693 sb->s_type->name); 2694 return -EINVAL; 2695 } 2696 2697 static int selinux_sb_kern_mount(struct super_block *sb) 2698 { 2699 const struct cred *cred = current_cred(); 2700 struct common_audit_data ad; 2701 2702 ad.type = LSM_AUDIT_DATA_DENTRY; 2703 ad.u.dentry = sb->s_root; 2704 return superblock_has_perm(cred, sb, FILESYSTEM__MOUNT, &ad); 2705 } 2706 2707 static int selinux_sb_statfs(struct dentry *dentry) 2708 { 2709 const struct cred *cred = current_cred(); 2710 struct common_audit_data ad; 2711 2712 ad.type = LSM_AUDIT_DATA_DENTRY; 2713 ad.u.dentry = dentry->d_sb->s_root; 2714 return superblock_has_perm(cred, dentry->d_sb, FILESYSTEM__GETATTR, &ad); 2715 } 2716 2717 static int selinux_mount(const char *dev_name, 2718 const struct path *path, 2719 const char *type, 2720 unsigned long flags, 2721 void *data) 2722 { 2723 const struct cred *cred = current_cred(); 2724 2725 if (flags & MS_REMOUNT) 2726 return superblock_has_perm(cred, path->dentry->d_sb, 2727 FILESYSTEM__REMOUNT, NULL); 2728 else 2729 return path_has_perm(cred, path, FILE__MOUNTON); 2730 } 2731 2732 static int selinux_move_mount(const struct path *from_path, 2733 const struct path *to_path) 2734 { 2735 const struct cred *cred = current_cred(); 2736 2737 return path_has_perm(cred, to_path, FILE__MOUNTON); 2738 } 2739 2740 static int selinux_umount(struct vfsmount *mnt, int flags) 2741 { 2742 const struct cred *cred = current_cred(); 2743 2744 return superblock_has_perm(cred, mnt->mnt_sb, 2745 FILESYSTEM__UNMOUNT, NULL); 2746 } 2747 2748 static int selinux_fs_context_submount(struct fs_context *fc, 2749 struct super_block *reference) 2750 { 2751 const struct superblock_security_struct *sbsec; 2752 struct selinux_mnt_opts *opts; 2753 2754 opts = kzalloc(sizeof(*opts), GFP_KERNEL); 2755 if (!opts) 2756 return -ENOMEM; 2757 2758 sbsec = selinux_superblock(reference); 2759 if (sbsec->flags & FSCONTEXT_MNT) 2760 opts->fscontext_sid = sbsec->sid; 2761 if (sbsec->flags & CONTEXT_MNT) 2762 opts->context_sid = sbsec->mntpoint_sid; 2763 if (sbsec->flags & DEFCONTEXT_MNT) 2764 opts->defcontext_sid = sbsec->def_sid; 2765 fc->security = opts; 2766 return 0; 2767 } 2768 2769 static int selinux_fs_context_dup(struct fs_context *fc, 2770 struct fs_context *src_fc) 2771 { 2772 const struct selinux_mnt_opts *src = src_fc->security; 2773 2774 if (!src) 2775 return 0; 2776 2777 fc->security = kmemdup(src, sizeof(*src), GFP_KERNEL); 2778 return fc->security ? 0 : -ENOMEM; 2779 } 2780 2781 static const struct fs_parameter_spec selinux_fs_parameters[] = { 2782 fsparam_string(CONTEXT_STR, Opt_context), 2783 fsparam_string(DEFCONTEXT_STR, Opt_defcontext), 2784 fsparam_string(FSCONTEXT_STR, Opt_fscontext), 2785 fsparam_string(ROOTCONTEXT_STR, Opt_rootcontext), 2786 fsparam_flag (SECLABEL_STR, Opt_seclabel), 2787 {} 2788 }; 2789 2790 static int selinux_fs_context_parse_param(struct fs_context *fc, 2791 struct fs_parameter *param) 2792 { 2793 struct fs_parse_result result; 2794 int opt; 2795 2796 opt = fs_parse(fc, selinux_fs_parameters, param, &result); 2797 if (opt < 0) 2798 return opt; 2799 2800 return selinux_add_opt(opt, param->string, &fc->security); 2801 } 2802 2803 /* inode security operations */ 2804 2805 static int selinux_inode_alloc_security(struct inode *inode) 2806 { 2807 struct inode_security_struct *isec = selinux_inode(inode); 2808 u32 sid = current_sid(); 2809 2810 spin_lock_init(&isec->lock); 2811 INIT_LIST_HEAD(&isec->list); 2812 isec->inode = inode; 2813 isec->sid = SECINITSID_UNLABELED; 2814 isec->sclass = SECCLASS_FILE; 2815 isec->task_sid = sid; 2816 isec->initialized = LABEL_INVALID; 2817 2818 return 0; 2819 } 2820 2821 static void selinux_inode_free_security(struct inode *inode) 2822 { 2823 inode_free_security(inode); 2824 } 2825 2826 static int selinux_dentry_init_security(struct dentry *dentry, int mode, 2827 const struct qstr *name, 2828 const char **xattr_name, void **ctx, 2829 u32 *ctxlen) 2830 { 2831 u32 newsid; 2832 int rc; 2833 2834 rc = selinux_determine_inode_label(selinux_cred(current_cred()), 2835 d_inode(dentry->d_parent), name, 2836 inode_mode_to_security_class(mode), 2837 &newsid); 2838 if (rc) 2839 return rc; 2840 2841 if (xattr_name) 2842 *xattr_name = XATTR_NAME_SELINUX; 2843 2844 return security_sid_to_context(newsid, (char **)ctx, 2845 ctxlen); 2846 } 2847 2848 static int selinux_dentry_create_files_as(struct dentry *dentry, int mode, 2849 struct qstr *name, 2850 const struct cred *old, 2851 struct cred *new) 2852 { 2853 u32 newsid; 2854 int rc; 2855 struct task_security_struct *tsec; 2856 2857 rc = selinux_determine_inode_label(selinux_cred(old), 2858 d_inode(dentry->d_parent), name, 2859 inode_mode_to_security_class(mode), 2860 &newsid); 2861 if (rc) 2862 return rc; 2863 2864 tsec = selinux_cred(new); 2865 tsec->create_sid = newsid; 2866 return 0; 2867 } 2868 2869 static int selinux_inode_init_security(struct inode *inode, struct inode *dir, 2870 const struct qstr *qstr, 2871 const char **name, 2872 void **value, size_t *len) 2873 { 2874 const struct task_security_struct *tsec = selinux_cred(current_cred()); 2875 struct superblock_security_struct *sbsec; 2876 u32 newsid, clen; 2877 int rc; 2878 char *context; 2879 2880 sbsec = selinux_superblock(dir->i_sb); 2881 2882 newsid = tsec->create_sid; 2883 2884 rc = selinux_determine_inode_label(tsec, dir, qstr, 2885 inode_mode_to_security_class(inode->i_mode), 2886 &newsid); 2887 if (rc) 2888 return rc; 2889 2890 /* Possibly defer initialization to selinux_complete_init. */ 2891 if (sbsec->flags & SE_SBINITIALIZED) { 2892 struct inode_security_struct *isec = selinux_inode(inode); 2893 isec->sclass = inode_mode_to_security_class(inode->i_mode); 2894 isec->sid = newsid; 2895 isec->initialized = LABEL_INITIALIZED; 2896 } 2897 2898 if (!selinux_initialized() || 2899 !(sbsec->flags & SBLABEL_MNT)) 2900 return -EOPNOTSUPP; 2901 2902 if (name) 2903 *name = XATTR_SELINUX_SUFFIX; 2904 2905 if (value && len) { 2906 rc = security_sid_to_context_force(newsid, 2907 &context, &clen); 2908 if (rc) 2909 return rc; 2910 *value = context; 2911 *len = clen; 2912 } 2913 2914 return 0; 2915 } 2916 2917 static int selinux_inode_init_security_anon(struct inode *inode, 2918 const struct qstr *name, 2919 const struct inode *context_inode) 2920 { 2921 const struct task_security_struct *tsec = selinux_cred(current_cred()); 2922 struct common_audit_data ad; 2923 struct inode_security_struct *isec; 2924 int rc; 2925 2926 if (unlikely(!selinux_initialized())) 2927 return 0; 2928 2929 isec = selinux_inode(inode); 2930 2931 /* 2932 * We only get here once per ephemeral inode. The inode has 2933 * been initialized via inode_alloc_security but is otherwise 2934 * untouched. 2935 */ 2936 2937 if (context_inode) { 2938 struct inode_security_struct *context_isec = 2939 selinux_inode(context_inode); 2940 if (context_isec->initialized != LABEL_INITIALIZED) { 2941 pr_err("SELinux: context_inode is not initialized"); 2942 return -EACCES; 2943 } 2944 2945 isec->sclass = context_isec->sclass; 2946 isec->sid = context_isec->sid; 2947 } else { 2948 isec->sclass = SECCLASS_ANON_INODE; 2949 rc = security_transition_sid( 2950 tsec->sid, tsec->sid, 2951 isec->sclass, name, &isec->sid); 2952 if (rc) 2953 return rc; 2954 } 2955 2956 isec->initialized = LABEL_INITIALIZED; 2957 /* 2958 * Now that we've initialized security, check whether we're 2959 * allowed to actually create this type of anonymous inode. 2960 */ 2961 2962 ad.type = LSM_AUDIT_DATA_ANONINODE; 2963 ad.u.anonclass = name ? (const char *)name->name : "?"; 2964 2965 return avc_has_perm(tsec->sid, 2966 isec->sid, 2967 isec->sclass, 2968 FILE__CREATE, 2969 &ad); 2970 } 2971 2972 static int selinux_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode) 2973 { 2974 return may_create(dir, dentry, SECCLASS_FILE); 2975 } 2976 2977 static int selinux_inode_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry) 2978 { 2979 return may_link(dir, old_dentry, MAY_LINK); 2980 } 2981 2982 static int selinux_inode_unlink(struct inode *dir, struct dentry *dentry) 2983 { 2984 return may_link(dir, dentry, MAY_UNLINK); 2985 } 2986 2987 static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const char *name) 2988 { 2989 return may_create(dir, dentry, SECCLASS_LNK_FILE); 2990 } 2991 2992 static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mask) 2993 { 2994 return may_create(dir, dentry, SECCLASS_DIR); 2995 } 2996 2997 static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry) 2998 { 2999 return may_link(dir, dentry, MAY_RMDIR); 3000 } 3001 3002 static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) 3003 { 3004 return may_create(dir, dentry, inode_mode_to_security_class(mode)); 3005 } 3006 3007 static int selinux_inode_rename(struct inode *old_inode, struct dentry *old_dentry, 3008 struct inode *new_inode, struct dentry *new_dentry) 3009 { 3010 return may_rename(old_inode, old_dentry, new_inode, new_dentry); 3011 } 3012 3013 static int selinux_inode_readlink(struct dentry *dentry) 3014 { 3015 const struct cred *cred = current_cred(); 3016 3017 return dentry_has_perm(cred, dentry, FILE__READ); 3018 } 3019 3020 static int selinux_inode_follow_link(struct dentry *dentry, struct inode *inode, 3021 bool rcu) 3022 { 3023 const struct cred *cred = current_cred(); 3024 struct common_audit_data ad; 3025 struct inode_security_struct *isec; 3026 u32 sid; 3027 3028 validate_creds(cred); 3029 3030 ad.type = LSM_AUDIT_DATA_DENTRY; 3031 ad.u.dentry = dentry; 3032 sid = cred_sid(cred); 3033 isec = inode_security_rcu(inode, rcu); 3034 if (IS_ERR(isec)) 3035 return PTR_ERR(isec); 3036 3037 return avc_has_perm(sid, isec->sid, isec->sclass, FILE__READ, &ad); 3038 } 3039 3040 static noinline int audit_inode_permission(struct inode *inode, 3041 u32 perms, u32 audited, u32 denied, 3042 int result) 3043 { 3044 struct common_audit_data ad; 3045 struct inode_security_struct *isec = selinux_inode(inode); 3046 3047 ad.type = LSM_AUDIT_DATA_INODE; 3048 ad.u.inode = inode; 3049 3050 return slow_avc_audit(current_sid(), isec->sid, isec->sclass, perms, 3051 audited, denied, result, &ad); 3052 } 3053 3054 static int selinux_inode_permission(struct inode *inode, int mask) 3055 { 3056 const struct cred *cred = current_cred(); 3057 u32 perms; 3058 bool from_access; 3059 bool no_block = mask & MAY_NOT_BLOCK; 3060 struct inode_security_struct *isec; 3061 u32 sid; 3062 struct av_decision avd; 3063 int rc, rc2; 3064 u32 audited, denied; 3065 3066 from_access = mask & MAY_ACCESS; 3067 mask &= (MAY_READ|MAY_WRITE|MAY_EXEC|MAY_APPEND); 3068 3069 /* No permission to check. Existence test. */ 3070 if (!mask) 3071 return 0; 3072 3073 validate_creds(cred); 3074 3075 if (unlikely(IS_PRIVATE(inode))) 3076 return 0; 3077 3078 perms = file_mask_to_av(inode->i_mode, mask); 3079 3080 sid = cred_sid(cred); 3081 isec = inode_security_rcu(inode, no_block); 3082 if (IS_ERR(isec)) 3083 return PTR_ERR(isec); 3084 3085 rc = avc_has_perm_noaudit(sid, isec->sid, isec->sclass, perms, 0, 3086 &avd); 3087 audited = avc_audit_required(perms, &avd, rc, 3088 from_access ? FILE__AUDIT_ACCESS : 0, 3089 &denied); 3090 if (likely(!audited)) 3091 return rc; 3092 3093 rc2 = audit_inode_permission(inode, perms, audited, denied, rc); 3094 if (rc2) 3095 return rc2; 3096 return rc; 3097 } 3098 3099 static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr) 3100 { 3101 const struct cred *cred = current_cred(); 3102 struct inode *inode = d_backing_inode(dentry); 3103 unsigned int ia_valid = iattr->ia_valid; 3104 __u32 av = FILE__WRITE; 3105 3106 /* ATTR_FORCE is just used for ATTR_KILL_S[UG]ID. */ 3107 if (ia_valid & ATTR_FORCE) { 3108 ia_valid &= ~(ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_MODE | 3109 ATTR_FORCE); 3110 if (!ia_valid) 3111 return 0; 3112 } 3113 3114 if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID | 3115 ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET)) 3116 return dentry_has_perm(cred, dentry, FILE__SETATTR); 3117 3118 if (selinux_policycap_openperm() && 3119 inode->i_sb->s_magic != SOCKFS_MAGIC && 3120 (ia_valid & ATTR_SIZE) && 3121 !(ia_valid & ATTR_FILE)) 3122 av |= FILE__OPEN; 3123 3124 return dentry_has_perm(cred, dentry, av); 3125 } 3126 3127 static int selinux_inode_getattr(const struct path *path) 3128 { 3129 return path_has_perm(current_cred(), path, FILE__GETATTR); 3130 } 3131 3132 static bool has_cap_mac_admin(bool audit) 3133 { 3134 const struct cred *cred = current_cred(); 3135 unsigned int opts = audit ? CAP_OPT_NONE : CAP_OPT_NOAUDIT; 3136 3137 if (cap_capable(cred, &init_user_ns, CAP_MAC_ADMIN, opts)) 3138 return false; 3139 if (cred_has_capability(cred, CAP_MAC_ADMIN, opts, true)) 3140 return false; 3141 return true; 3142 } 3143 3144 static int selinux_inode_setxattr(struct mnt_idmap *idmap, 3145 struct dentry *dentry, const char *name, 3146 const void *value, size_t size, int flags) 3147 { 3148 struct inode *inode = d_backing_inode(dentry); 3149 struct inode_security_struct *isec; 3150 struct superblock_security_struct *sbsec; 3151 struct common_audit_data ad; 3152 u32 newsid, sid = current_sid(); 3153 int rc = 0; 3154 3155 if (strcmp(name, XATTR_NAME_SELINUX)) { 3156 rc = cap_inode_setxattr(dentry, name, value, size, flags); 3157 if (rc) 3158 return rc; 3159 3160 /* Not an attribute we recognize, so just check the 3161 ordinary setattr permission. */ 3162 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR); 3163 } 3164 3165 if (!selinux_initialized()) 3166 return (inode_owner_or_capable(idmap, inode) ? 0 : -EPERM); 3167 3168 sbsec = selinux_superblock(inode->i_sb); 3169 if (!(sbsec->flags & SBLABEL_MNT)) 3170 return -EOPNOTSUPP; 3171 3172 if (!inode_owner_or_capable(idmap, inode)) 3173 return -EPERM; 3174 3175 ad.type = LSM_AUDIT_DATA_DENTRY; 3176 ad.u.dentry = dentry; 3177 3178 isec = backing_inode_security(dentry); 3179 rc = avc_has_perm(sid, isec->sid, isec->sclass, 3180 FILE__RELABELFROM, &ad); 3181 if (rc) 3182 return rc; 3183 3184 rc = security_context_to_sid(value, size, &newsid, 3185 GFP_KERNEL); 3186 if (rc == -EINVAL) { 3187 if (!has_cap_mac_admin(true)) { 3188 struct audit_buffer *ab; 3189 size_t audit_size; 3190 3191 /* We strip a nul only if it is at the end, otherwise the 3192 * context contains a nul and we should audit that */ 3193 if (value) { 3194 const char *str = value; 3195 3196 if (str[size - 1] == '\0') 3197 audit_size = size - 1; 3198 else 3199 audit_size = size; 3200 } else { 3201 audit_size = 0; 3202 } 3203 ab = audit_log_start(audit_context(), 3204 GFP_ATOMIC, AUDIT_SELINUX_ERR); 3205 if (!ab) 3206 return rc; 3207 audit_log_format(ab, "op=setxattr invalid_context="); 3208 audit_log_n_untrustedstring(ab, value, audit_size); 3209 audit_log_end(ab); 3210 3211 return rc; 3212 } 3213 rc = security_context_to_sid_force(value, 3214 size, &newsid); 3215 } 3216 if (rc) 3217 return rc; 3218 3219 rc = avc_has_perm(sid, newsid, isec->sclass, 3220 FILE__RELABELTO, &ad); 3221 if (rc) 3222 return rc; 3223 3224 rc = security_validate_transition(isec->sid, newsid, 3225 sid, isec->sclass); 3226 if (rc) 3227 return rc; 3228 3229 return avc_has_perm(newsid, 3230 sbsec->sid, 3231 SECCLASS_FILESYSTEM, 3232 FILESYSTEM__ASSOCIATE, 3233 &ad); 3234 } 3235 3236 static int selinux_inode_set_acl(struct mnt_idmap *idmap, 3237 struct dentry *dentry, const char *acl_name, 3238 struct posix_acl *kacl) 3239 { 3240 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR); 3241 } 3242 3243 static int selinux_inode_get_acl(struct mnt_idmap *idmap, 3244 struct dentry *dentry, const char *acl_name) 3245 { 3246 return dentry_has_perm(current_cred(), dentry, FILE__GETATTR); 3247 } 3248 3249 static int selinux_inode_remove_acl(struct mnt_idmap *idmap, 3250 struct dentry *dentry, const char *acl_name) 3251 { 3252 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR); 3253 } 3254 3255 static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name, 3256 const void *value, size_t size, 3257 int flags) 3258 { 3259 struct inode *inode = d_backing_inode(dentry); 3260 struct inode_security_struct *isec; 3261 u32 newsid; 3262 int rc; 3263 3264 if (strcmp(name, XATTR_NAME_SELINUX)) { 3265 /* Not an attribute we recognize, so nothing to do. */ 3266 return; 3267 } 3268 3269 if (!selinux_initialized()) { 3270 /* If we haven't even been initialized, then we can't validate 3271 * against a policy, so leave the label as invalid. It may 3272 * resolve to a valid label on the next revalidation try if 3273 * we've since initialized. 3274 */ 3275 return; 3276 } 3277 3278 rc = security_context_to_sid_force(value, size, 3279 &newsid); 3280 if (rc) { 3281 pr_err("SELinux: unable to map context to SID" 3282 "for (%s, %lu), rc=%d\n", 3283 inode->i_sb->s_id, inode->i_ino, -rc); 3284 return; 3285 } 3286 3287 isec = backing_inode_security(dentry); 3288 spin_lock(&isec->lock); 3289 isec->sclass = inode_mode_to_security_class(inode->i_mode); 3290 isec->sid = newsid; 3291 isec->initialized = LABEL_INITIALIZED; 3292 spin_unlock(&isec->lock); 3293 } 3294 3295 static int selinux_inode_getxattr(struct dentry *dentry, const char *name) 3296 { 3297 const struct cred *cred = current_cred(); 3298 3299 return dentry_has_perm(cred, dentry, FILE__GETATTR); 3300 } 3301 3302 static int selinux_inode_listxattr(struct dentry *dentry) 3303 { 3304 const struct cred *cred = current_cred(); 3305 3306 return dentry_has_perm(cred, dentry, FILE__GETATTR); 3307 } 3308 3309 static int selinux_inode_removexattr(struct mnt_idmap *idmap, 3310 struct dentry *dentry, const char *name) 3311 { 3312 if (strcmp(name, XATTR_NAME_SELINUX)) { 3313 int rc = cap_inode_removexattr(idmap, dentry, name); 3314 if (rc) 3315 return rc; 3316 3317 /* Not an attribute we recognize, so just check the 3318 ordinary setattr permission. */ 3319 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR); 3320 } 3321 3322 if (!selinux_initialized()) 3323 return 0; 3324 3325 /* No one is allowed to remove a SELinux security label. 3326 You can change the label, but all data must be labeled. */ 3327 return -EACCES; 3328 } 3329 3330 static int selinux_path_notify(const struct path *path, u64 mask, 3331 unsigned int obj_type) 3332 { 3333 int ret; 3334 u32 perm; 3335 3336 struct common_audit_data ad; 3337 3338 ad.type = LSM_AUDIT_DATA_PATH; 3339 ad.u.path = *path; 3340 3341 /* 3342 * Set permission needed based on the type of mark being set. 3343 * Performs an additional check for sb watches. 3344 */ 3345 switch (obj_type) { 3346 case FSNOTIFY_OBJ_TYPE_VFSMOUNT: 3347 perm = FILE__WATCH_MOUNT; 3348 break; 3349 case FSNOTIFY_OBJ_TYPE_SB: 3350 perm = FILE__WATCH_SB; 3351 ret = superblock_has_perm(current_cred(), path->dentry->d_sb, 3352 FILESYSTEM__WATCH, &ad); 3353 if (ret) 3354 return ret; 3355 break; 3356 case FSNOTIFY_OBJ_TYPE_INODE: 3357 perm = FILE__WATCH; 3358 break; 3359 default: 3360 return -EINVAL; 3361 } 3362 3363 /* blocking watches require the file:watch_with_perm permission */ 3364 if (mask & (ALL_FSNOTIFY_PERM_EVENTS)) 3365 perm |= FILE__WATCH_WITH_PERM; 3366 3367 /* watches on read-like events need the file:watch_reads permission */ 3368 if (mask & (FS_ACCESS | FS_ACCESS_PERM | FS_CLOSE_NOWRITE)) 3369 perm |= FILE__WATCH_READS; 3370 3371 return path_has_perm(current_cred(), path, perm); 3372 } 3373 3374 /* 3375 * Copy the inode security context value to the user. 3376 * 3377 * Permission check is handled by selinux_inode_getxattr hook. 3378 */ 3379 static int selinux_inode_getsecurity(struct mnt_idmap *idmap, 3380 struct inode *inode, const char *name, 3381 void **buffer, bool alloc) 3382 { 3383 u32 size; 3384 int error; 3385 char *context = NULL; 3386 struct inode_security_struct *isec; 3387 3388 /* 3389 * If we're not initialized yet, then we can't validate contexts, so 3390 * just let vfs_getxattr fall back to using the on-disk xattr. 3391 */ 3392 if (!selinux_initialized() || 3393 strcmp(name, XATTR_SELINUX_SUFFIX)) 3394 return -EOPNOTSUPP; 3395 3396 /* 3397 * If the caller has CAP_MAC_ADMIN, then get the raw context 3398 * value even if it is not defined by current policy; otherwise, 3399 * use the in-core value under current policy. 3400 * Use the non-auditing forms of the permission checks since 3401 * getxattr may be called by unprivileged processes commonly 3402 * and lack of permission just means that we fall back to the 3403 * in-core context value, not a denial. 3404 */ 3405 isec = inode_security(inode); 3406 if (has_cap_mac_admin(false)) 3407 error = security_sid_to_context_force(isec->sid, &context, 3408 &size); 3409 else 3410 error = security_sid_to_context(isec->sid, 3411 &context, &size); 3412 if (error) 3413 return error; 3414 error = size; 3415 if (alloc) { 3416 *buffer = context; 3417 goto out_nofree; 3418 } 3419 kfree(context); 3420 out_nofree: 3421 return error; 3422 } 3423 3424 static int selinux_inode_setsecurity(struct inode *inode, const char *name, 3425 const void *value, size_t size, int flags) 3426 { 3427 struct inode_security_struct *isec = inode_security_novalidate(inode); 3428 struct superblock_security_struct *sbsec; 3429 u32 newsid; 3430 int rc; 3431 3432 if (strcmp(name, XATTR_SELINUX_SUFFIX)) 3433 return -EOPNOTSUPP; 3434 3435 sbsec = selinux_superblock(inode->i_sb); 3436 if (!(sbsec->flags & SBLABEL_MNT)) 3437 return -EOPNOTSUPP; 3438 3439 if (!value || !size) 3440 return -EACCES; 3441 3442 rc = security_context_to_sid(value, size, &newsid, 3443 GFP_KERNEL); 3444 if (rc) 3445 return rc; 3446 3447 spin_lock(&isec->lock); 3448 isec->sclass = inode_mode_to_security_class(inode->i_mode); 3449 isec->sid = newsid; 3450 isec->initialized = LABEL_INITIALIZED; 3451 spin_unlock(&isec->lock); 3452 return 0; 3453 } 3454 3455 static int selinux_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size) 3456 { 3457 const int len = sizeof(XATTR_NAME_SELINUX); 3458 3459 if (!selinux_initialized()) 3460 return 0; 3461 3462 if (buffer && len <= buffer_size) 3463 memcpy(buffer, XATTR_NAME_SELINUX, len); 3464 return len; 3465 } 3466 3467 static void selinux_inode_getsecid(struct inode *inode, u32 *secid) 3468 { 3469 struct inode_security_struct *isec = inode_security_novalidate(inode); 3470 *secid = isec->sid; 3471 } 3472 3473 static int selinux_inode_copy_up(struct dentry *src, struct cred **new) 3474 { 3475 u32 sid; 3476 struct task_security_struct *tsec; 3477 struct cred *new_creds = *new; 3478 3479 if (new_creds == NULL) { 3480 new_creds = prepare_creds(); 3481 if (!new_creds) 3482 return -ENOMEM; 3483 } 3484 3485 tsec = selinux_cred(new_creds); 3486 /* Get label from overlay inode and set it in create_sid */ 3487 selinux_inode_getsecid(d_inode(src), &sid); 3488 tsec->create_sid = sid; 3489 *new = new_creds; 3490 return 0; 3491 } 3492 3493 static int selinux_inode_copy_up_xattr(const char *name) 3494 { 3495 /* The copy_up hook above sets the initial context on an inode, but we 3496 * don't then want to overwrite it by blindly copying all the lower 3497 * xattrs up. Instead, we have to filter out SELinux-related xattrs. 3498 */ 3499 if (strcmp(name, XATTR_NAME_SELINUX) == 0) 3500 return 1; /* Discard */ 3501 /* 3502 * Any other attribute apart from SELINUX is not claimed, supported 3503 * by selinux. 3504 */ 3505 return -EOPNOTSUPP; 3506 } 3507 3508 /* kernfs node operations */ 3509 3510 static int selinux_kernfs_init_security(struct kernfs_node *kn_dir, 3511 struct kernfs_node *kn) 3512 { 3513 const struct task_security_struct *tsec = selinux_cred(current_cred()); 3514 u32 parent_sid, newsid, clen; 3515 int rc; 3516 char *context; 3517 3518 rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, NULL, 0); 3519 if (rc == -ENODATA) 3520 return 0; 3521 else if (rc < 0) 3522 return rc; 3523 3524 clen = (u32)rc; 3525 context = kmalloc(clen, GFP_KERNEL); 3526 if (!context) 3527 return -ENOMEM; 3528 3529 rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, context, clen); 3530 if (rc < 0) { 3531 kfree(context); 3532 return rc; 3533 } 3534 3535 rc = security_context_to_sid(context, clen, &parent_sid, 3536 GFP_KERNEL); 3537 kfree(context); 3538 if (rc) 3539 return rc; 3540 3541 if (tsec->create_sid) { 3542 newsid = tsec->create_sid; 3543 } else { 3544 u16 secclass = inode_mode_to_security_class(kn->mode); 3545 struct qstr q; 3546 3547 q.name = kn->name; 3548 q.hash_len = hashlen_string(kn_dir, kn->name); 3549 3550 rc = security_transition_sid(tsec->sid, 3551 parent_sid, secclass, &q, 3552 &newsid); 3553 if (rc) 3554 return rc; 3555 } 3556 3557 rc = security_sid_to_context_force(newsid, 3558 &context, &clen); 3559 if (rc) 3560 return rc; 3561 3562 rc = kernfs_xattr_set(kn, XATTR_NAME_SELINUX, context, clen, 3563 XATTR_CREATE); 3564 kfree(context); 3565 return rc; 3566 } 3567 3568 3569 /* file security operations */ 3570 3571 static int selinux_revalidate_file_permission(struct file *file, int mask) 3572 { 3573 const struct cred *cred = current_cred(); 3574 struct inode *inode = file_inode(file); 3575 3576 /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */ 3577 if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE)) 3578 mask |= MAY_APPEND; 3579 3580 return file_has_perm(cred, file, 3581 file_mask_to_av(inode->i_mode, mask)); 3582 } 3583 3584 static int selinux_file_permission(struct file *file, int mask) 3585 { 3586 struct inode *inode = file_inode(file); 3587 struct file_security_struct *fsec = selinux_file(file); 3588 struct inode_security_struct *isec; 3589 u32 sid = current_sid(); 3590 3591 if (!mask) 3592 /* No permission to check. Existence test. */ 3593 return 0; 3594 3595 isec = inode_security(inode); 3596 if (sid == fsec->sid && fsec->isid == isec->sid && 3597 fsec->pseqno == avc_policy_seqno()) 3598 /* No change since file_open check. */ 3599 return 0; 3600 3601 return selinux_revalidate_file_permission(file, mask); 3602 } 3603 3604 static int selinux_file_alloc_security(struct file *file) 3605 { 3606 struct file_security_struct *fsec = selinux_file(file); 3607 u32 sid = current_sid(); 3608 3609 fsec->sid = sid; 3610 fsec->fown_sid = sid; 3611 3612 return 0; 3613 } 3614 3615 /* 3616 * Check whether a task has the ioctl permission and cmd 3617 * operation to an inode. 3618 */ 3619 static int ioctl_has_perm(const struct cred *cred, struct file *file, 3620 u32 requested, u16 cmd) 3621 { 3622 struct common_audit_data ad; 3623 struct file_security_struct *fsec = selinux_file(file); 3624 struct inode *inode = file_inode(file); 3625 struct inode_security_struct *isec; 3626 struct lsm_ioctlop_audit ioctl; 3627 u32 ssid = cred_sid(cred); 3628 int rc; 3629 u8 driver = cmd >> 8; 3630 u8 xperm = cmd & 0xff; 3631 3632 ad.type = LSM_AUDIT_DATA_IOCTL_OP; 3633 ad.u.op = &ioctl; 3634 ad.u.op->cmd = cmd; 3635 ad.u.op->path = file->f_path; 3636 3637 if (ssid != fsec->sid) { 3638 rc = avc_has_perm(ssid, fsec->sid, 3639 SECCLASS_FD, 3640 FD__USE, 3641 &ad); 3642 if (rc) 3643 goto out; 3644 } 3645 3646 if (unlikely(IS_PRIVATE(inode))) 3647 return 0; 3648 3649 isec = inode_security(inode); 3650 rc = avc_has_extended_perms(ssid, isec->sid, isec->sclass, 3651 requested, driver, xperm, &ad); 3652 out: 3653 return rc; 3654 } 3655 3656 static int selinux_file_ioctl(struct file *file, unsigned int cmd, 3657 unsigned long arg) 3658 { 3659 const struct cred *cred = current_cred(); 3660 int error = 0; 3661 3662 switch (cmd) { 3663 case FIONREAD: 3664 case FIBMAP: 3665 case FIGETBSZ: 3666 case FS_IOC_GETFLAGS: 3667 case FS_IOC_GETVERSION: 3668 error = file_has_perm(cred, file, FILE__GETATTR); 3669 break; 3670 3671 case FS_IOC_SETFLAGS: 3672 case FS_IOC_SETVERSION: 3673 error = file_has_perm(cred, file, FILE__SETATTR); 3674 break; 3675 3676 /* sys_ioctl() checks */ 3677 case FIONBIO: 3678 case FIOASYNC: 3679 error = file_has_perm(cred, file, 0); 3680 break; 3681 3682 case KDSKBENT: 3683 case KDSKBSENT: 3684 error = cred_has_capability(cred, CAP_SYS_TTY_CONFIG, 3685 CAP_OPT_NONE, true); 3686 break; 3687 3688 case FIOCLEX: 3689 case FIONCLEX: 3690 if (!selinux_policycap_ioctl_skip_cloexec()) 3691 error = ioctl_has_perm(cred, file, FILE__IOCTL, (u16) cmd); 3692 break; 3693 3694 /* default case assumes that the command will go 3695 * to the file's ioctl() function. 3696 */ 3697 default: 3698 error = ioctl_has_perm(cred, file, FILE__IOCTL, (u16) cmd); 3699 } 3700 return error; 3701 } 3702 3703 static int default_noexec __ro_after_init; 3704 3705 static int file_map_prot_check(struct file *file, unsigned long prot, int shared) 3706 { 3707 const struct cred *cred = current_cred(); 3708 u32 sid = cred_sid(cred); 3709 int rc = 0; 3710 3711 if (default_noexec && 3712 (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) || 3713 (!shared && (prot & PROT_WRITE)))) { 3714 /* 3715 * We are making executable an anonymous mapping or a 3716 * private file mapping that will also be writable. 3717 * This has an additional check. 3718 */ 3719 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS, 3720 PROCESS__EXECMEM, NULL); 3721 if (rc) 3722 goto error; 3723 } 3724 3725 if (file) { 3726 /* read access is always possible with a mapping */ 3727 u32 av = FILE__READ; 3728 3729 /* write access only matters if the mapping is shared */ 3730 if (shared && (prot & PROT_WRITE)) 3731 av |= FILE__WRITE; 3732 3733 if (prot & PROT_EXEC) 3734 av |= FILE__EXECUTE; 3735 3736 return file_has_perm(cred, file, av); 3737 } 3738 3739 error: 3740 return rc; 3741 } 3742 3743 static int selinux_mmap_addr(unsigned long addr) 3744 { 3745 int rc = 0; 3746 3747 if (addr < CONFIG_LSM_MMAP_MIN_ADDR) { 3748 u32 sid = current_sid(); 3749 rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT, 3750 MEMPROTECT__MMAP_ZERO, NULL); 3751 } 3752 3753 return rc; 3754 } 3755 3756 static int selinux_mmap_file(struct file *file, 3757 unsigned long reqprot __always_unused, 3758 unsigned long prot, unsigned long flags) 3759 { 3760 struct common_audit_data ad; 3761 int rc; 3762 3763 if (file) { 3764 ad.type = LSM_AUDIT_DATA_FILE; 3765 ad.u.file = file; 3766 rc = inode_has_perm(current_cred(), file_inode(file), 3767 FILE__MAP, &ad); 3768 if (rc) 3769 return rc; 3770 } 3771 3772 return file_map_prot_check(file, prot, 3773 (flags & MAP_TYPE) == MAP_SHARED); 3774 } 3775 3776 static int selinux_file_mprotect(struct vm_area_struct *vma, 3777 unsigned long reqprot __always_unused, 3778 unsigned long prot) 3779 { 3780 const struct cred *cred = current_cred(); 3781 u32 sid = cred_sid(cred); 3782 3783 if (default_noexec && 3784 (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) { 3785 int rc = 0; 3786 if (vma->vm_start >= vma->vm_mm->start_brk && 3787 vma->vm_end <= vma->vm_mm->brk) { 3788 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS, 3789 PROCESS__EXECHEAP, NULL); 3790 } else if (!vma->vm_file && 3791 ((vma->vm_start <= vma->vm_mm->start_stack && 3792 vma->vm_end >= vma->vm_mm->start_stack) || 3793 vma_is_stack_for_current(vma))) { 3794 rc = avc_has_perm(sid, sid, SECCLASS_PROCESS, 3795 PROCESS__EXECSTACK, NULL); 3796 } else if (vma->vm_file && vma->anon_vma) { 3797 /* 3798 * We are making executable a file mapping that has 3799 * had some COW done. Since pages might have been 3800 * written, check ability to execute the possibly 3801 * modified content. This typically should only 3802 * occur for text relocations. 3803 */ 3804 rc = file_has_perm(cred, vma->vm_file, FILE__EXECMOD); 3805 } 3806 if (rc) 3807 return rc; 3808 } 3809 3810 return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED); 3811 } 3812 3813 static int selinux_file_lock(struct file *file, unsigned int cmd) 3814 { 3815 const struct cred *cred = current_cred(); 3816 3817 return file_has_perm(cred, file, FILE__LOCK); 3818 } 3819 3820 static int selinux_file_fcntl(struct file *file, unsigned int cmd, 3821 unsigned long arg) 3822 { 3823 const struct cred *cred = current_cred(); 3824 int err = 0; 3825 3826 switch (cmd) { 3827 case F_SETFL: 3828 if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) { 3829 err = file_has_perm(cred, file, FILE__WRITE); 3830 break; 3831 } 3832 fallthrough; 3833 case F_SETOWN: 3834 case F_SETSIG: 3835 case F_GETFL: 3836 case F_GETOWN: 3837 case F_GETSIG: 3838 case F_GETOWNER_UIDS: 3839 /* Just check FD__USE permission */ 3840 err = file_has_perm(cred, file, 0); 3841 break; 3842 case F_GETLK: 3843 case F_SETLK: 3844 case F_SETLKW: 3845 case F_OFD_GETLK: 3846 case F_OFD_SETLK: 3847 case F_OFD_SETLKW: 3848 #if BITS_PER_LONG == 32 3849 case F_GETLK64: 3850 case F_SETLK64: 3851 case F_SETLKW64: 3852 #endif 3853 err = file_has_perm(cred, file, FILE__LOCK); 3854 break; 3855 } 3856 3857 return err; 3858 } 3859 3860 static void selinux_file_set_fowner(struct file *file) 3861 { 3862 struct file_security_struct *fsec; 3863 3864 fsec = selinux_file(file); 3865 fsec->fown_sid = current_sid(); 3866 } 3867 3868 static int selinux_file_send_sigiotask(struct task_struct *tsk, 3869 struct fown_struct *fown, int signum) 3870 { 3871 struct file *file; 3872 u32 sid = task_sid_obj(tsk); 3873 u32 perm; 3874 struct file_security_struct *fsec; 3875 3876 /* struct fown_struct is never outside the context of a struct file */ 3877 file = container_of(fown, struct file, f_owner); 3878 3879 fsec = selinux_file(file); 3880 3881 if (!signum) 3882 perm = signal_to_av(SIGIO); /* as per send_sigio_to_task */ 3883 else 3884 perm = signal_to_av(signum); 3885 3886 return avc_has_perm(fsec->fown_sid, sid, 3887 SECCLASS_PROCESS, perm, NULL); 3888 } 3889 3890 static int selinux_file_receive(struct file *file) 3891 { 3892 const struct cred *cred = current_cred(); 3893 3894 return file_has_perm(cred, file, file_to_av(file)); 3895 } 3896 3897 static int selinux_file_open(struct file *file) 3898 { 3899 struct file_security_struct *fsec; 3900 struct inode_security_struct *isec; 3901 3902 fsec = selinux_file(file); 3903 isec = inode_security(file_inode(file)); 3904 /* 3905 * Save inode label and policy sequence number 3906 * at open-time so that selinux_file_permission 3907 * can determine whether revalidation is necessary. 3908 * Task label is already saved in the file security 3909 * struct as its SID. 3910 */ 3911 fsec->isid = isec->sid; 3912 fsec->pseqno = avc_policy_seqno(); 3913 /* 3914 * Since the inode label or policy seqno may have changed 3915 * between the selinux_inode_permission check and the saving 3916 * of state above, recheck that access is still permitted. 3917 * Otherwise, access might never be revalidated against the 3918 * new inode label or new policy. 3919 * This check is not redundant - do not remove. 3920 */ 3921 return file_path_has_perm(file->f_cred, file, open_file_to_av(file)); 3922 } 3923 3924 /* task security operations */ 3925 3926 static int selinux_task_alloc(struct task_struct *task, 3927 unsigned long clone_flags) 3928 { 3929 u32 sid = current_sid(); 3930 3931 return avc_has_perm(sid, sid, SECCLASS_PROCESS, PROCESS__FORK, NULL); 3932 } 3933 3934 /* 3935 * prepare a new set of credentials for modification 3936 */ 3937 static int selinux_cred_prepare(struct cred *new, const struct cred *old, 3938 gfp_t gfp) 3939 { 3940 const struct task_security_struct *old_tsec = selinux_cred(old); 3941 struct task_security_struct *tsec = selinux_cred(new); 3942 3943 *tsec = *old_tsec; 3944 return 0; 3945 } 3946 3947 /* 3948 * transfer the SELinux data to a blank set of creds 3949 */ 3950 static void selinux_cred_transfer(struct cred *new, const struct cred *old) 3951 { 3952 const struct task_security_struct *old_tsec = selinux_cred(old); 3953 struct task_security_struct *tsec = selinux_cred(new); 3954 3955 *tsec = *old_tsec; 3956 } 3957 3958 static void selinux_cred_getsecid(const struct cred *c, u32 *secid) 3959 { 3960 *secid = cred_sid(c); 3961 } 3962 3963 /* 3964 * set the security data for a kernel service 3965 * - all the creation contexts are set to unlabelled 3966 */ 3967 static int selinux_kernel_act_as(struct cred *new, u32 secid) 3968 { 3969 struct task_security_struct *tsec = selinux_cred(new); 3970 u32 sid = current_sid(); 3971 int ret; 3972 3973 ret = avc_has_perm(sid, secid, 3974 SECCLASS_KERNEL_SERVICE, 3975 KERNEL_SERVICE__USE_AS_OVERRIDE, 3976 NULL); 3977 if (ret == 0) { 3978 tsec->sid = secid; 3979 tsec->create_sid = 0; 3980 tsec->keycreate_sid = 0; 3981 tsec->sockcreate_sid = 0; 3982 } 3983 return ret; 3984 } 3985 3986 /* 3987 * set the file creation context in a security record to the same as the 3988 * objective context of the specified inode 3989 */ 3990 static int selinux_kernel_create_files_as(struct cred *new, struct inode *inode) 3991 { 3992 struct inode_security_struct *isec = inode_security(inode); 3993 struct task_security_struct *tsec = selinux_cred(new); 3994 u32 sid = current_sid(); 3995 int ret; 3996 3997 ret = avc_has_perm(sid, isec->sid, 3998 SECCLASS_KERNEL_SERVICE, 3999 KERNEL_SERVICE__CREATE_FILES_AS, 4000 NULL); 4001 4002 if (ret == 0) 4003 tsec->create_sid = isec->sid; 4004 return ret; 4005 } 4006 4007 static int selinux_kernel_module_request(char *kmod_name) 4008 { 4009 struct common_audit_data ad; 4010 4011 ad.type = LSM_AUDIT_DATA_KMOD; 4012 ad.u.kmod_name = kmod_name; 4013 4014 return avc_has_perm(current_sid(), SECINITSID_KERNEL, SECCLASS_SYSTEM, 4015 SYSTEM__MODULE_REQUEST, &ad); 4016 } 4017 4018 static int selinux_kernel_module_from_file(struct file *file) 4019 { 4020 struct common_audit_data ad; 4021 struct inode_security_struct *isec; 4022 struct file_security_struct *fsec; 4023 u32 sid = current_sid(); 4024 int rc; 4025 4026 /* init_module */ 4027 if (file == NULL) 4028 return avc_has_perm(sid, sid, SECCLASS_SYSTEM, 4029 SYSTEM__MODULE_LOAD, NULL); 4030 4031 /* finit_module */ 4032 4033 ad.type = LSM_AUDIT_DATA_FILE; 4034 ad.u.file = file; 4035 4036 fsec = selinux_file(file); 4037 if (sid != fsec->sid) { 4038 rc = avc_has_perm(sid, fsec->sid, SECCLASS_FD, FD__USE, &ad); 4039 if (rc) 4040 return rc; 4041 } 4042 4043 isec = inode_security(file_inode(file)); 4044 return avc_has_perm(sid, isec->sid, SECCLASS_SYSTEM, 4045 SYSTEM__MODULE_LOAD, &ad); 4046 } 4047 4048 static int selinux_kernel_read_file(struct file *file, 4049 enum kernel_read_file_id id, 4050 bool contents) 4051 { 4052 int rc = 0; 4053 4054 switch (id) { 4055 case READING_MODULE: 4056 rc = selinux_kernel_module_from_file(contents ? file : NULL); 4057 break; 4058 default: 4059 break; 4060 } 4061 4062 return rc; 4063 } 4064 4065 static int selinux_kernel_load_data(enum kernel_load_data_id id, bool contents) 4066 { 4067 int rc = 0; 4068 4069 switch (id) { 4070 case LOADING_MODULE: 4071 rc = selinux_kernel_module_from_file(NULL); 4072 break; 4073 default: 4074 break; 4075 } 4076 4077 return rc; 4078 } 4079 4080 static int selinux_task_setpgid(struct task_struct *p, pid_t pgid) 4081 { 4082 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4083 PROCESS__SETPGID, NULL); 4084 } 4085 4086 static int selinux_task_getpgid(struct task_struct *p) 4087 { 4088 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4089 PROCESS__GETPGID, NULL); 4090 } 4091 4092 static int selinux_task_getsid(struct task_struct *p) 4093 { 4094 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4095 PROCESS__GETSESSION, NULL); 4096 } 4097 4098 static void selinux_current_getsecid_subj(u32 *secid) 4099 { 4100 *secid = current_sid(); 4101 } 4102 4103 static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid) 4104 { 4105 *secid = task_sid_obj(p); 4106 } 4107 4108 static int selinux_task_setnice(struct task_struct *p, int nice) 4109 { 4110 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4111 PROCESS__SETSCHED, NULL); 4112 } 4113 4114 static int selinux_task_setioprio(struct task_struct *p, int ioprio) 4115 { 4116 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4117 PROCESS__SETSCHED, NULL); 4118 } 4119 4120 static int selinux_task_getioprio(struct task_struct *p) 4121 { 4122 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4123 PROCESS__GETSCHED, NULL); 4124 } 4125 4126 static int selinux_task_prlimit(const struct cred *cred, const struct cred *tcred, 4127 unsigned int flags) 4128 { 4129 u32 av = 0; 4130 4131 if (!flags) 4132 return 0; 4133 if (flags & LSM_PRLIMIT_WRITE) 4134 av |= PROCESS__SETRLIMIT; 4135 if (flags & LSM_PRLIMIT_READ) 4136 av |= PROCESS__GETRLIMIT; 4137 return avc_has_perm(cred_sid(cred), cred_sid(tcred), 4138 SECCLASS_PROCESS, av, NULL); 4139 } 4140 4141 static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource, 4142 struct rlimit *new_rlim) 4143 { 4144 struct rlimit *old_rlim = p->signal->rlim + resource; 4145 4146 /* Control the ability to change the hard limit (whether 4147 lowering or raising it), so that the hard limit can 4148 later be used as a safe reset point for the soft limit 4149 upon context transitions. See selinux_bprm_committing_creds. */ 4150 if (old_rlim->rlim_max != new_rlim->rlim_max) 4151 return avc_has_perm(current_sid(), task_sid_obj(p), 4152 SECCLASS_PROCESS, PROCESS__SETRLIMIT, NULL); 4153 4154 return 0; 4155 } 4156 4157 static int selinux_task_setscheduler(struct task_struct *p) 4158 { 4159 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4160 PROCESS__SETSCHED, NULL); 4161 } 4162 4163 static int selinux_task_getscheduler(struct task_struct *p) 4164 { 4165 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4166 PROCESS__GETSCHED, NULL); 4167 } 4168 4169 static int selinux_task_movememory(struct task_struct *p) 4170 { 4171 return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS, 4172 PROCESS__SETSCHED, NULL); 4173 } 4174 4175 static int selinux_task_kill(struct task_struct *p, struct kernel_siginfo *info, 4176 int sig, const struct cred *cred) 4177 { 4178 u32 secid; 4179 u32 perm; 4180 4181 if (!sig) 4182 perm = PROCESS__SIGNULL; /* null signal; existence test */ 4183 else 4184 perm = signal_to_av(sig); 4185 if (!cred) 4186 secid = current_sid(); 4187 else 4188 secid = cred_sid(cred); 4189 return avc_has_perm(secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL); 4190 } 4191 4192 static void selinux_task_to_inode(struct task_struct *p, 4193 struct inode *inode) 4194 { 4195 struct inode_security_struct *isec = selinux_inode(inode); 4196 u32 sid = task_sid_obj(p); 4197 4198 spin_lock(&isec->lock); 4199 isec->sclass = inode_mode_to_security_class(inode->i_mode); 4200 isec->sid = sid; 4201 isec->initialized = LABEL_INITIALIZED; 4202 spin_unlock(&isec->lock); 4203 } 4204 4205 static int selinux_userns_create(const struct cred *cred) 4206 { 4207 u32 sid = current_sid(); 4208 4209 return avc_has_perm(sid, sid, SECCLASS_USER_NAMESPACE, 4210 USER_NAMESPACE__CREATE, NULL); 4211 } 4212 4213 /* Returns error only if unable to parse addresses */ 4214 static int selinux_parse_skb_ipv4(struct sk_buff *skb, 4215 struct common_audit_data *ad, u8 *proto) 4216 { 4217 int offset, ihlen, ret = -EINVAL; 4218 struct iphdr _iph, *ih; 4219 4220 offset = skb_network_offset(skb); 4221 ih = skb_header_pointer(skb, offset, sizeof(_iph), &_iph); 4222 if (ih == NULL) 4223 goto out; 4224 4225 ihlen = ih->ihl * 4; 4226 if (ihlen < sizeof(_iph)) 4227 goto out; 4228 4229 ad->u.net->v4info.saddr = ih->saddr; 4230 ad->u.net->v4info.daddr = ih->daddr; 4231 ret = 0; 4232 4233 if (proto) 4234 *proto = ih->protocol; 4235 4236 switch (ih->protocol) { 4237 case IPPROTO_TCP: { 4238 struct tcphdr _tcph, *th; 4239 4240 if (ntohs(ih->frag_off) & IP_OFFSET) 4241 break; 4242 4243 offset += ihlen; 4244 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph); 4245 if (th == NULL) 4246 break; 4247 4248 ad->u.net->sport = th->source; 4249 ad->u.net->dport = th->dest; 4250 break; 4251 } 4252 4253 case IPPROTO_UDP: { 4254 struct udphdr _udph, *uh; 4255 4256 if (ntohs(ih->frag_off) & IP_OFFSET) 4257 break; 4258 4259 offset += ihlen; 4260 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph); 4261 if (uh == NULL) 4262 break; 4263 4264 ad->u.net->sport = uh->source; 4265 ad->u.net->dport = uh->dest; 4266 break; 4267 } 4268 4269 case IPPROTO_DCCP: { 4270 struct dccp_hdr _dccph, *dh; 4271 4272 if (ntohs(ih->frag_off) & IP_OFFSET) 4273 break; 4274 4275 offset += ihlen; 4276 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph); 4277 if (dh == NULL) 4278 break; 4279 4280 ad->u.net->sport = dh->dccph_sport; 4281 ad->u.net->dport = dh->dccph_dport; 4282 break; 4283 } 4284 4285 #if IS_ENABLED(CONFIG_IP_SCTP) 4286 case IPPROTO_SCTP: { 4287 struct sctphdr _sctph, *sh; 4288 4289 if (ntohs(ih->frag_off) & IP_OFFSET) 4290 break; 4291 4292 offset += ihlen; 4293 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph); 4294 if (sh == NULL) 4295 break; 4296 4297 ad->u.net->sport = sh->source; 4298 ad->u.net->dport = sh->dest; 4299 break; 4300 } 4301 #endif 4302 default: 4303 break; 4304 } 4305 out: 4306 return ret; 4307 } 4308 4309 #if IS_ENABLED(CONFIG_IPV6) 4310 4311 /* Returns error only if unable to parse addresses */ 4312 static int selinux_parse_skb_ipv6(struct sk_buff *skb, 4313 struct common_audit_data *ad, u8 *proto) 4314 { 4315 u8 nexthdr; 4316 int ret = -EINVAL, offset; 4317 struct ipv6hdr _ipv6h, *ip6; 4318 __be16 frag_off; 4319 4320 offset = skb_network_offset(skb); 4321 ip6 = skb_header_pointer(skb, offset, sizeof(_ipv6h), &_ipv6h); 4322 if (ip6 == NULL) 4323 goto out; 4324 4325 ad->u.net->v6info.saddr = ip6->saddr; 4326 ad->u.net->v6info.daddr = ip6->daddr; 4327 ret = 0; 4328 4329 nexthdr = ip6->nexthdr; 4330 offset += sizeof(_ipv6h); 4331 offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off); 4332 if (offset < 0) 4333 goto out; 4334 4335 if (proto) 4336 *proto = nexthdr; 4337 4338 switch (nexthdr) { 4339 case IPPROTO_TCP: { 4340 struct tcphdr _tcph, *th; 4341 4342 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph); 4343 if (th == NULL) 4344 break; 4345 4346 ad->u.net->sport = th->source; 4347 ad->u.net->dport = th->dest; 4348 break; 4349 } 4350 4351 case IPPROTO_UDP: { 4352 struct udphdr _udph, *uh; 4353 4354 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph); 4355 if (uh == NULL) 4356 break; 4357 4358 ad->u.net->sport = uh->source; 4359 ad->u.net->dport = uh->dest; 4360 break; 4361 } 4362 4363 case IPPROTO_DCCP: { 4364 struct dccp_hdr _dccph, *dh; 4365 4366 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph); 4367 if (dh == NULL) 4368 break; 4369 4370 ad->u.net->sport = dh->dccph_sport; 4371 ad->u.net->dport = dh->dccph_dport; 4372 break; 4373 } 4374 4375 #if IS_ENABLED(CONFIG_IP_SCTP) 4376 case IPPROTO_SCTP: { 4377 struct sctphdr _sctph, *sh; 4378 4379 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph); 4380 if (sh == NULL) 4381 break; 4382 4383 ad->u.net->sport = sh->source; 4384 ad->u.net->dport = sh->dest; 4385 break; 4386 } 4387 #endif 4388 /* includes fragments */ 4389 default: 4390 break; 4391 } 4392 out: 4393 return ret; 4394 } 4395 4396 #endif /* IPV6 */ 4397 4398 static int selinux_parse_skb(struct sk_buff *skb, struct common_audit_data *ad, 4399 char **_addrp, int src, u8 *proto) 4400 { 4401 char *addrp; 4402 int ret; 4403 4404 switch (ad->u.net->family) { 4405 case PF_INET: 4406 ret = selinux_parse_skb_ipv4(skb, ad, proto); 4407 if (ret) 4408 goto parse_error; 4409 addrp = (char *)(src ? &ad->u.net->v4info.saddr : 4410 &ad->u.net->v4info.daddr); 4411 goto okay; 4412 4413 #if IS_ENABLED(CONFIG_IPV6) 4414 case PF_INET6: 4415 ret = selinux_parse_skb_ipv6(skb, ad, proto); 4416 if (ret) 4417 goto parse_error; 4418 addrp = (char *)(src ? &ad->u.net->v6info.saddr : 4419 &ad->u.net->v6info.daddr); 4420 goto okay; 4421 #endif /* IPV6 */ 4422 default: 4423 addrp = NULL; 4424 goto okay; 4425 } 4426 4427 parse_error: 4428 pr_warn( 4429 "SELinux: failure in selinux_parse_skb()," 4430 " unable to parse packet\n"); 4431 return ret; 4432 4433 okay: 4434 if (_addrp) 4435 *_addrp = addrp; 4436 return 0; 4437 } 4438 4439 /** 4440 * selinux_skb_peerlbl_sid - Determine the peer label of a packet 4441 * @skb: the packet 4442 * @family: protocol family 4443 * @sid: the packet's peer label SID 4444 * 4445 * Description: 4446 * Check the various different forms of network peer labeling and determine 4447 * the peer label/SID for the packet; most of the magic actually occurs in 4448 * the security server function security_net_peersid_cmp(). The function 4449 * returns zero if the value in @sid is valid (although it may be SECSID_NULL) 4450 * or -EACCES if @sid is invalid due to inconsistencies with the different 4451 * peer labels. 4452 * 4453 */ 4454 static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid) 4455 { 4456 int err; 4457 u32 xfrm_sid; 4458 u32 nlbl_sid; 4459 u32 nlbl_type; 4460 4461 err = selinux_xfrm_skb_sid(skb, &xfrm_sid); 4462 if (unlikely(err)) 4463 return -EACCES; 4464 err = selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid); 4465 if (unlikely(err)) 4466 return -EACCES; 4467 4468 err = security_net_peersid_resolve(nlbl_sid, 4469 nlbl_type, xfrm_sid, sid); 4470 if (unlikely(err)) { 4471 pr_warn( 4472 "SELinux: failure in selinux_skb_peerlbl_sid()," 4473 " unable to determine packet's peer label\n"); 4474 return -EACCES; 4475 } 4476 4477 return 0; 4478 } 4479 4480 /** 4481 * selinux_conn_sid - Determine the child socket label for a connection 4482 * @sk_sid: the parent socket's SID 4483 * @skb_sid: the packet's SID 4484 * @conn_sid: the resulting connection SID 4485 * 4486 * If @skb_sid is valid then the user:role:type information from @sk_sid is 4487 * combined with the MLS information from @skb_sid in order to create 4488 * @conn_sid. If @skb_sid is not valid then @conn_sid is simply a copy 4489 * of @sk_sid. Returns zero on success, negative values on failure. 4490 * 4491 */ 4492 static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid) 4493 { 4494 int err = 0; 4495 4496 if (skb_sid != SECSID_NULL) 4497 err = security_sid_mls_copy(sk_sid, skb_sid, 4498 conn_sid); 4499 else 4500 *conn_sid = sk_sid; 4501 4502 return err; 4503 } 4504 4505 /* socket security operations */ 4506 4507 static int socket_sockcreate_sid(const struct task_security_struct *tsec, 4508 u16 secclass, u32 *socksid) 4509 { 4510 if (tsec->sockcreate_sid > SECSID_NULL) { 4511 *socksid = tsec->sockcreate_sid; 4512 return 0; 4513 } 4514 4515 return security_transition_sid(tsec->sid, tsec->sid, 4516 secclass, NULL, socksid); 4517 } 4518 4519 static int sock_has_perm(struct sock *sk, u32 perms) 4520 { 4521 struct sk_security_struct *sksec = sk->sk_security; 4522 struct common_audit_data ad; 4523 struct lsm_network_audit net = {0,}; 4524 4525 if (sksec->sid == SECINITSID_KERNEL) 4526 return 0; 4527 4528 ad.type = LSM_AUDIT_DATA_NET; 4529 ad.u.net = &net; 4530 ad.u.net->sk = sk; 4531 4532 return avc_has_perm(current_sid(), sksec->sid, sksec->sclass, perms, 4533 &ad); 4534 } 4535 4536 static int selinux_socket_create(int family, int type, 4537 int protocol, int kern) 4538 { 4539 const struct task_security_struct *tsec = selinux_cred(current_cred()); 4540 u32 newsid; 4541 u16 secclass; 4542 int rc; 4543 4544 if (kern) 4545 return 0; 4546 4547 secclass = socket_type_to_security_class(family, type, protocol); 4548 rc = socket_sockcreate_sid(tsec, secclass, &newsid); 4549 if (rc) 4550 return rc; 4551 4552 return avc_has_perm(tsec->sid, newsid, secclass, SOCKET__CREATE, NULL); 4553 } 4554 4555 static int selinux_socket_post_create(struct socket *sock, int family, 4556 int type, int protocol, int kern) 4557 { 4558 const struct task_security_struct *tsec = selinux_cred(current_cred()); 4559 struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(sock)); 4560 struct sk_security_struct *sksec; 4561 u16 sclass = socket_type_to_security_class(family, type, protocol); 4562 u32 sid = SECINITSID_KERNEL; 4563 int err = 0; 4564 4565 if (!kern) { 4566 err = socket_sockcreate_sid(tsec, sclass, &sid); 4567 if (err) 4568 return err; 4569 } 4570 4571 isec->sclass = sclass; 4572 isec->sid = sid; 4573 isec->initialized = LABEL_INITIALIZED; 4574 4575 if (sock->sk) { 4576 sksec = sock->sk->sk_security; 4577 sksec->sclass = sclass; 4578 sksec->sid = sid; 4579 /* Allows detection of the first association on this socket */ 4580 if (sksec->sclass == SECCLASS_SCTP_SOCKET) 4581 sksec->sctp_assoc_state = SCTP_ASSOC_UNSET; 4582 4583 err = selinux_netlbl_socket_post_create(sock->sk, family); 4584 } 4585 4586 return err; 4587 } 4588 4589 static int selinux_socket_socketpair(struct socket *socka, 4590 struct socket *sockb) 4591 { 4592 struct sk_security_struct *sksec_a = socka->sk->sk_security; 4593 struct sk_security_struct *sksec_b = sockb->sk->sk_security; 4594 4595 sksec_a->peer_sid = sksec_b->sid; 4596 sksec_b->peer_sid = sksec_a->sid; 4597 4598 return 0; 4599 } 4600 4601 /* Range of port numbers used to automatically bind. 4602 Need to determine whether we should perform a name_bind 4603 permission check between the socket and the port number. */ 4604 4605 static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen) 4606 { 4607 struct sock *sk = sock->sk; 4608 struct sk_security_struct *sksec = sk->sk_security; 4609 u16 family; 4610 int err; 4611 4612 err = sock_has_perm(sk, SOCKET__BIND); 4613 if (err) 4614 goto out; 4615 4616 /* If PF_INET or PF_INET6, check name_bind permission for the port. */ 4617 family = sk->sk_family; 4618 if (family == PF_INET || family == PF_INET6) { 4619 char *addrp; 4620 struct common_audit_data ad; 4621 struct lsm_network_audit net = {0,}; 4622 struct sockaddr_in *addr4 = NULL; 4623 struct sockaddr_in6 *addr6 = NULL; 4624 u16 family_sa; 4625 unsigned short snum; 4626 u32 sid, node_perm; 4627 4628 /* 4629 * sctp_bindx(3) calls via selinux_sctp_bind_connect() 4630 * that validates multiple binding addresses. Because of this 4631 * need to check address->sa_family as it is possible to have 4632 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET. 4633 */ 4634 if (addrlen < offsetofend(struct sockaddr, sa_family)) 4635 return -EINVAL; 4636 family_sa = address->sa_family; 4637 switch (family_sa) { 4638 case AF_UNSPEC: 4639 case AF_INET: 4640 if (addrlen < sizeof(struct sockaddr_in)) 4641 return -EINVAL; 4642 addr4 = (struct sockaddr_in *)address; 4643 if (family_sa == AF_UNSPEC) { 4644 /* see __inet_bind(), we only want to allow 4645 * AF_UNSPEC if the address is INADDR_ANY 4646 */ 4647 if (addr4->sin_addr.s_addr != htonl(INADDR_ANY)) 4648 goto err_af; 4649 family_sa = AF_INET; 4650 } 4651 snum = ntohs(addr4->sin_port); 4652 addrp = (char *)&addr4->sin_addr.s_addr; 4653 break; 4654 case AF_INET6: 4655 if (addrlen < SIN6_LEN_RFC2133) 4656 return -EINVAL; 4657 addr6 = (struct sockaddr_in6 *)address; 4658 snum = ntohs(addr6->sin6_port); 4659 addrp = (char *)&addr6->sin6_addr.s6_addr; 4660 break; 4661 default: 4662 goto err_af; 4663 } 4664 4665 ad.type = LSM_AUDIT_DATA_NET; 4666 ad.u.net = &net; 4667 ad.u.net->sport = htons(snum); 4668 ad.u.net->family = family_sa; 4669 4670 if (snum) { 4671 int low, high; 4672 4673 inet_get_local_port_range(sock_net(sk), &low, &high); 4674 4675 if (inet_port_requires_bind_service(sock_net(sk), snum) || 4676 snum < low || snum > high) { 4677 err = sel_netport_sid(sk->sk_protocol, 4678 snum, &sid); 4679 if (err) 4680 goto out; 4681 err = avc_has_perm(sksec->sid, sid, 4682 sksec->sclass, 4683 SOCKET__NAME_BIND, &ad); 4684 if (err) 4685 goto out; 4686 } 4687 } 4688 4689 switch (sksec->sclass) { 4690 case SECCLASS_TCP_SOCKET: 4691 node_perm = TCP_SOCKET__NODE_BIND; 4692 break; 4693 4694 case SECCLASS_UDP_SOCKET: 4695 node_perm = UDP_SOCKET__NODE_BIND; 4696 break; 4697 4698 case SECCLASS_DCCP_SOCKET: 4699 node_perm = DCCP_SOCKET__NODE_BIND; 4700 break; 4701 4702 case SECCLASS_SCTP_SOCKET: 4703 node_perm = SCTP_SOCKET__NODE_BIND; 4704 break; 4705 4706 default: 4707 node_perm = RAWIP_SOCKET__NODE_BIND; 4708 break; 4709 } 4710 4711 err = sel_netnode_sid(addrp, family_sa, &sid); 4712 if (err) 4713 goto out; 4714 4715 if (family_sa == AF_INET) 4716 ad.u.net->v4info.saddr = addr4->sin_addr.s_addr; 4717 else 4718 ad.u.net->v6info.saddr = addr6->sin6_addr; 4719 4720 err = avc_has_perm(sksec->sid, sid, 4721 sksec->sclass, node_perm, &ad); 4722 if (err) 4723 goto out; 4724 } 4725 out: 4726 return err; 4727 err_af: 4728 /* Note that SCTP services expect -EINVAL, others -EAFNOSUPPORT. */ 4729 if (sksec->sclass == SECCLASS_SCTP_SOCKET) 4730 return -EINVAL; 4731 return -EAFNOSUPPORT; 4732 } 4733 4734 /* This supports connect(2) and SCTP connect services such as sctp_connectx(3) 4735 * and sctp_sendmsg(3) as described in Documentation/security/SCTP.rst 4736 */ 4737 static int selinux_socket_connect_helper(struct socket *sock, 4738 struct sockaddr *address, int addrlen) 4739 { 4740 struct sock *sk = sock->sk; 4741 struct sk_security_struct *sksec = sk->sk_security; 4742 int err; 4743 4744 err = sock_has_perm(sk, SOCKET__CONNECT); 4745 if (err) 4746 return err; 4747 if (addrlen < offsetofend(struct sockaddr, sa_family)) 4748 return -EINVAL; 4749 4750 /* connect(AF_UNSPEC) has special handling, as it is a documented 4751 * way to disconnect the socket 4752 */ 4753 if (address->sa_family == AF_UNSPEC) 4754 return 0; 4755 4756 /* 4757 * If a TCP, DCCP or SCTP socket, check name_connect permission 4758 * for the port. 4759 */ 4760 if (sksec->sclass == SECCLASS_TCP_SOCKET || 4761 sksec->sclass == SECCLASS_DCCP_SOCKET || 4762 sksec->sclass == SECCLASS_SCTP_SOCKET) { 4763 struct common_audit_data ad; 4764 struct lsm_network_audit net = {0,}; 4765 struct sockaddr_in *addr4 = NULL; 4766 struct sockaddr_in6 *addr6 = NULL; 4767 unsigned short snum; 4768 u32 sid, perm; 4769 4770 /* sctp_connectx(3) calls via selinux_sctp_bind_connect() 4771 * that validates multiple connect addresses. Because of this 4772 * need to check address->sa_family as it is possible to have 4773 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET. 4774 */ 4775 switch (address->sa_family) { 4776 case AF_INET: 4777 addr4 = (struct sockaddr_in *)address; 4778 if (addrlen < sizeof(struct sockaddr_in)) 4779 return -EINVAL; 4780 snum = ntohs(addr4->sin_port); 4781 break; 4782 case AF_INET6: 4783 addr6 = (struct sockaddr_in6 *)address; 4784 if (addrlen < SIN6_LEN_RFC2133) 4785 return -EINVAL; 4786 snum = ntohs(addr6->sin6_port); 4787 break; 4788 default: 4789 /* Note that SCTP services expect -EINVAL, whereas 4790 * others expect -EAFNOSUPPORT. 4791 */ 4792 if (sksec->sclass == SECCLASS_SCTP_SOCKET) 4793 return -EINVAL; 4794 else 4795 return -EAFNOSUPPORT; 4796 } 4797 4798 err = sel_netport_sid(sk->sk_protocol, snum, &sid); 4799 if (err) 4800 return err; 4801 4802 switch (sksec->sclass) { 4803 case SECCLASS_TCP_SOCKET: 4804 perm = TCP_SOCKET__NAME_CONNECT; 4805 break; 4806 case SECCLASS_DCCP_SOCKET: 4807 perm = DCCP_SOCKET__NAME_CONNECT; 4808 break; 4809 case SECCLASS_SCTP_SOCKET: 4810 perm = SCTP_SOCKET__NAME_CONNECT; 4811 break; 4812 } 4813 4814 ad.type = LSM_AUDIT_DATA_NET; 4815 ad.u.net = &net; 4816 ad.u.net->dport = htons(snum); 4817 ad.u.net->family = address->sa_family; 4818 err = avc_has_perm(sksec->sid, sid, sksec->sclass, perm, &ad); 4819 if (err) 4820 return err; 4821 } 4822 4823 return 0; 4824 } 4825 4826 /* Supports connect(2), see comments in selinux_socket_connect_helper() */ 4827 static int selinux_socket_connect(struct socket *sock, 4828 struct sockaddr *address, int addrlen) 4829 { 4830 int err; 4831 struct sock *sk = sock->sk; 4832 4833 err = selinux_socket_connect_helper(sock, address, addrlen); 4834 if (err) 4835 return err; 4836 4837 return selinux_netlbl_socket_connect(sk, address); 4838 } 4839 4840 static int selinux_socket_listen(struct socket *sock, int backlog) 4841 { 4842 return sock_has_perm(sock->sk, SOCKET__LISTEN); 4843 } 4844 4845 static int selinux_socket_accept(struct socket *sock, struct socket *newsock) 4846 { 4847 int err; 4848 struct inode_security_struct *isec; 4849 struct inode_security_struct *newisec; 4850 u16 sclass; 4851 u32 sid; 4852 4853 err = sock_has_perm(sock->sk, SOCKET__ACCEPT); 4854 if (err) 4855 return err; 4856 4857 isec = inode_security_novalidate(SOCK_INODE(sock)); 4858 spin_lock(&isec->lock); 4859 sclass = isec->sclass; 4860 sid = isec->sid; 4861 spin_unlock(&isec->lock); 4862 4863 newisec = inode_security_novalidate(SOCK_INODE(newsock)); 4864 newisec->sclass = sclass; 4865 newisec->sid = sid; 4866 newisec->initialized = LABEL_INITIALIZED; 4867 4868 return 0; 4869 } 4870 4871 static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg, 4872 int size) 4873 { 4874 return sock_has_perm(sock->sk, SOCKET__WRITE); 4875 } 4876 4877 static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg, 4878 int size, int flags) 4879 { 4880 return sock_has_perm(sock->sk, SOCKET__READ); 4881 } 4882 4883 static int selinux_socket_getsockname(struct socket *sock) 4884 { 4885 return sock_has_perm(sock->sk, SOCKET__GETATTR); 4886 } 4887 4888 static int selinux_socket_getpeername(struct socket *sock) 4889 { 4890 return sock_has_perm(sock->sk, SOCKET__GETATTR); 4891 } 4892 4893 static int selinux_socket_setsockopt(struct socket *sock, int level, int optname) 4894 { 4895 int err; 4896 4897 err = sock_has_perm(sock->sk, SOCKET__SETOPT); 4898 if (err) 4899 return err; 4900 4901 return selinux_netlbl_socket_setsockopt(sock, level, optname); 4902 } 4903 4904 static int selinux_socket_getsockopt(struct socket *sock, int level, 4905 int optname) 4906 { 4907 return sock_has_perm(sock->sk, SOCKET__GETOPT); 4908 } 4909 4910 static int selinux_socket_shutdown(struct socket *sock, int how) 4911 { 4912 return sock_has_perm(sock->sk, SOCKET__SHUTDOWN); 4913 } 4914 4915 static int selinux_socket_unix_stream_connect(struct sock *sock, 4916 struct sock *other, 4917 struct sock *newsk) 4918 { 4919 struct sk_security_struct *sksec_sock = sock->sk_security; 4920 struct sk_security_struct *sksec_other = other->sk_security; 4921 struct sk_security_struct *sksec_new = newsk->sk_security; 4922 struct common_audit_data ad; 4923 struct lsm_network_audit net = {0,}; 4924 int err; 4925 4926 ad.type = LSM_AUDIT_DATA_NET; 4927 ad.u.net = &net; 4928 ad.u.net->sk = other; 4929 4930 err = avc_has_perm(sksec_sock->sid, sksec_other->sid, 4931 sksec_other->sclass, 4932 UNIX_STREAM_SOCKET__CONNECTTO, &ad); 4933 if (err) 4934 return err; 4935 4936 /* server child socket */ 4937 sksec_new->peer_sid = sksec_sock->sid; 4938 err = security_sid_mls_copy(sksec_other->sid, 4939 sksec_sock->sid, &sksec_new->sid); 4940 if (err) 4941 return err; 4942 4943 /* connecting socket */ 4944 sksec_sock->peer_sid = sksec_new->sid; 4945 4946 return 0; 4947 } 4948 4949 static int selinux_socket_unix_may_send(struct socket *sock, 4950 struct socket *other) 4951 { 4952 struct sk_security_struct *ssec = sock->sk->sk_security; 4953 struct sk_security_struct *osec = other->sk->sk_security; 4954 struct common_audit_data ad; 4955 struct lsm_network_audit net = {0,}; 4956 4957 ad.type = LSM_AUDIT_DATA_NET; 4958 ad.u.net = &net; 4959 ad.u.net->sk = other->sk; 4960 4961 return avc_has_perm(ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO, 4962 &ad); 4963 } 4964 4965 static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex, 4966 char *addrp, u16 family, u32 peer_sid, 4967 struct common_audit_data *ad) 4968 { 4969 int err; 4970 u32 if_sid; 4971 u32 node_sid; 4972 4973 err = sel_netif_sid(ns, ifindex, &if_sid); 4974 if (err) 4975 return err; 4976 err = avc_has_perm(peer_sid, if_sid, 4977 SECCLASS_NETIF, NETIF__INGRESS, ad); 4978 if (err) 4979 return err; 4980 4981 err = sel_netnode_sid(addrp, family, &node_sid); 4982 if (err) 4983 return err; 4984 return avc_has_perm(peer_sid, node_sid, 4985 SECCLASS_NODE, NODE__RECVFROM, ad); 4986 } 4987 4988 static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb, 4989 u16 family) 4990 { 4991 int err = 0; 4992 struct sk_security_struct *sksec = sk->sk_security; 4993 u32 sk_sid = sksec->sid; 4994 struct common_audit_data ad; 4995 struct lsm_network_audit net = {0,}; 4996 char *addrp; 4997 4998 ad.type = LSM_AUDIT_DATA_NET; 4999 ad.u.net = &net; 5000 ad.u.net->netif = skb->skb_iif; 5001 ad.u.net->family = family; 5002 err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL); 5003 if (err) 5004 return err; 5005 5006 if (selinux_secmark_enabled()) { 5007 err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET, 5008 PACKET__RECV, &ad); 5009 if (err) 5010 return err; 5011 } 5012 5013 err = selinux_netlbl_sock_rcv_skb(sksec, skb, family, &ad); 5014 if (err) 5015 return err; 5016 err = selinux_xfrm_sock_rcv_skb(sksec->sid, skb, &ad); 5017 5018 return err; 5019 } 5020 5021 static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) 5022 { 5023 int err; 5024 struct sk_security_struct *sksec = sk->sk_security; 5025 u16 family = sk->sk_family; 5026 u32 sk_sid = sksec->sid; 5027 struct common_audit_data ad; 5028 struct lsm_network_audit net = {0,}; 5029 char *addrp; 5030 u8 secmark_active; 5031 u8 peerlbl_active; 5032 5033 if (family != PF_INET && family != PF_INET6) 5034 return 0; 5035 5036 /* Handle mapped IPv4 packets arriving via IPv6 sockets */ 5037 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP)) 5038 family = PF_INET; 5039 5040 /* If any sort of compatibility mode is enabled then handoff processing 5041 * to the selinux_sock_rcv_skb_compat() function to deal with the 5042 * special handling. We do this in an attempt to keep this function 5043 * as fast and as clean as possible. */ 5044 if (!selinux_policycap_netpeer()) 5045 return selinux_sock_rcv_skb_compat(sk, skb, family); 5046 5047 secmark_active = selinux_secmark_enabled(); 5048 peerlbl_active = selinux_peerlbl_enabled(); 5049 if (!secmark_active && !peerlbl_active) 5050 return 0; 5051 5052 ad.type = LSM_AUDIT_DATA_NET; 5053 ad.u.net = &net; 5054 ad.u.net->netif = skb->skb_iif; 5055 ad.u.net->family = family; 5056 err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL); 5057 if (err) 5058 return err; 5059 5060 if (peerlbl_active) { 5061 u32 peer_sid; 5062 5063 err = selinux_skb_peerlbl_sid(skb, family, &peer_sid); 5064 if (err) 5065 return err; 5066 err = selinux_inet_sys_rcv_skb(sock_net(sk), skb->skb_iif, 5067 addrp, family, peer_sid, &ad); 5068 if (err) { 5069 selinux_netlbl_err(skb, family, err, 0); 5070 return err; 5071 } 5072 err = avc_has_perm(sk_sid, peer_sid, SECCLASS_PEER, 5073 PEER__RECV, &ad); 5074 if (err) { 5075 selinux_netlbl_err(skb, family, err, 0); 5076 return err; 5077 } 5078 } 5079 5080 if (secmark_active) { 5081 err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET, 5082 PACKET__RECV, &ad); 5083 if (err) 5084 return err; 5085 } 5086 5087 return err; 5088 } 5089 5090 static int selinux_socket_getpeersec_stream(struct socket *sock, 5091 sockptr_t optval, sockptr_t optlen, 5092 unsigned int len) 5093 { 5094 int err = 0; 5095 char *scontext = NULL; 5096 u32 scontext_len; 5097 struct sk_security_struct *sksec = sock->sk->sk_security; 5098 u32 peer_sid = SECSID_NULL; 5099 5100 if (sksec->sclass == SECCLASS_UNIX_STREAM_SOCKET || 5101 sksec->sclass == SECCLASS_TCP_SOCKET || 5102 sksec->sclass == SECCLASS_SCTP_SOCKET) 5103 peer_sid = sksec->peer_sid; 5104 if (peer_sid == SECSID_NULL) 5105 return -ENOPROTOOPT; 5106 5107 err = security_sid_to_context(peer_sid, &scontext, 5108 &scontext_len); 5109 if (err) 5110 return err; 5111 if (scontext_len > len) { 5112 err = -ERANGE; 5113 goto out_len; 5114 } 5115 5116 if (copy_to_sockptr(optval, scontext, scontext_len)) 5117 err = -EFAULT; 5118 out_len: 5119 if (copy_to_sockptr(optlen, &scontext_len, sizeof(scontext_len))) 5120 err = -EFAULT; 5121 kfree(scontext); 5122 return err; 5123 } 5124 5125 static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) 5126 { 5127 u32 peer_secid = SECSID_NULL; 5128 u16 family; 5129 struct inode_security_struct *isec; 5130 5131 if (skb && skb->protocol == htons(ETH_P_IP)) 5132 family = PF_INET; 5133 else if (skb && skb->protocol == htons(ETH_P_IPV6)) 5134 family = PF_INET6; 5135 else if (sock) 5136 family = sock->sk->sk_family; 5137 else 5138 goto out; 5139 5140 if (sock && family == PF_UNIX) { 5141 isec = inode_security_novalidate(SOCK_INODE(sock)); 5142 peer_secid = isec->sid; 5143 } else if (skb) 5144 selinux_skb_peerlbl_sid(skb, family, &peer_secid); 5145 5146 out: 5147 *secid = peer_secid; 5148 if (peer_secid == SECSID_NULL) 5149 return -EINVAL; 5150 return 0; 5151 } 5152 5153 static int selinux_sk_alloc_security(struct sock *sk, int family, gfp_t priority) 5154 { 5155 struct sk_security_struct *sksec; 5156 5157 sksec = kzalloc(sizeof(*sksec), priority); 5158 if (!sksec) 5159 return -ENOMEM; 5160 5161 sksec->peer_sid = SECINITSID_UNLABELED; 5162 sksec->sid = SECINITSID_UNLABELED; 5163 sksec->sclass = SECCLASS_SOCKET; 5164 selinux_netlbl_sk_security_reset(sksec); 5165 sk->sk_security = sksec; 5166 5167 return 0; 5168 } 5169 5170 static void selinux_sk_free_security(struct sock *sk) 5171 { 5172 struct sk_security_struct *sksec = sk->sk_security; 5173 5174 sk->sk_security = NULL; 5175 selinux_netlbl_sk_security_free(sksec); 5176 kfree(sksec); 5177 } 5178 5179 static void selinux_sk_clone_security(const struct sock *sk, struct sock *newsk) 5180 { 5181 struct sk_security_struct *sksec = sk->sk_security; 5182 struct sk_security_struct *newsksec = newsk->sk_security; 5183 5184 newsksec->sid = sksec->sid; 5185 newsksec->peer_sid = sksec->peer_sid; 5186 newsksec->sclass = sksec->sclass; 5187 5188 selinux_netlbl_sk_security_reset(newsksec); 5189 } 5190 5191 static void selinux_sk_getsecid(struct sock *sk, u32 *secid) 5192 { 5193 if (!sk) 5194 *secid = SECINITSID_ANY_SOCKET; 5195 else { 5196 struct sk_security_struct *sksec = sk->sk_security; 5197 5198 *secid = sksec->sid; 5199 } 5200 } 5201 5202 static void selinux_sock_graft(struct sock *sk, struct socket *parent) 5203 { 5204 struct inode_security_struct *isec = 5205 inode_security_novalidate(SOCK_INODE(parent)); 5206 struct sk_security_struct *sksec = sk->sk_security; 5207 5208 if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 || 5209 sk->sk_family == PF_UNIX) 5210 isec->sid = sksec->sid; 5211 sksec->sclass = isec->sclass; 5212 } 5213 5214 /* 5215 * Determines peer_secid for the asoc and updates socket's peer label 5216 * if it's the first association on the socket. 5217 */ 5218 static int selinux_sctp_process_new_assoc(struct sctp_association *asoc, 5219 struct sk_buff *skb) 5220 { 5221 struct sock *sk = asoc->base.sk; 5222 u16 family = sk->sk_family; 5223 struct sk_security_struct *sksec = sk->sk_security; 5224 struct common_audit_data ad; 5225 struct lsm_network_audit net = {0,}; 5226 int err; 5227 5228 /* handle mapped IPv4 packets arriving via IPv6 sockets */ 5229 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP)) 5230 family = PF_INET; 5231 5232 if (selinux_peerlbl_enabled()) { 5233 asoc->peer_secid = SECSID_NULL; 5234 5235 /* This will return peer_sid = SECSID_NULL if there are 5236 * no peer labels, see security_net_peersid_resolve(). 5237 */ 5238 err = selinux_skb_peerlbl_sid(skb, family, &asoc->peer_secid); 5239 if (err) 5240 return err; 5241 5242 if (asoc->peer_secid == SECSID_NULL) 5243 asoc->peer_secid = SECINITSID_UNLABELED; 5244 } else { 5245 asoc->peer_secid = SECINITSID_UNLABELED; 5246 } 5247 5248 if (sksec->sctp_assoc_state == SCTP_ASSOC_UNSET) { 5249 sksec->sctp_assoc_state = SCTP_ASSOC_SET; 5250 5251 /* Here as first association on socket. As the peer SID 5252 * was allowed by peer recv (and the netif/node checks), 5253 * then it is approved by policy and used as the primary 5254 * peer SID for getpeercon(3). 5255 */ 5256 sksec->peer_sid = asoc->peer_secid; 5257 } else if (sksec->peer_sid != asoc->peer_secid) { 5258 /* Other association peer SIDs are checked to enforce 5259 * consistency among the peer SIDs. 5260 */ 5261 ad.type = LSM_AUDIT_DATA_NET; 5262 ad.u.net = &net; 5263 ad.u.net->sk = asoc->base.sk; 5264 err = avc_has_perm(sksec->peer_sid, asoc->peer_secid, 5265 sksec->sclass, SCTP_SOCKET__ASSOCIATION, 5266 &ad); 5267 if (err) 5268 return err; 5269 } 5270 return 0; 5271 } 5272 5273 /* Called whenever SCTP receives an INIT or COOKIE ECHO chunk. This 5274 * happens on an incoming connect(2), sctp_connectx(3) or 5275 * sctp_sendmsg(3) (with no association already present). 5276 */ 5277 static int selinux_sctp_assoc_request(struct sctp_association *asoc, 5278 struct sk_buff *skb) 5279 { 5280 struct sk_security_struct *sksec = asoc->base.sk->sk_security; 5281 u32 conn_sid; 5282 int err; 5283 5284 if (!selinux_policycap_extsockclass()) 5285 return 0; 5286 5287 err = selinux_sctp_process_new_assoc(asoc, skb); 5288 if (err) 5289 return err; 5290 5291 /* Compute the MLS component for the connection and store 5292 * the information in asoc. This will be used by SCTP TCP type 5293 * sockets and peeled off connections as they cause a new 5294 * socket to be generated. selinux_sctp_sk_clone() will then 5295 * plug this into the new socket. 5296 */ 5297 err = selinux_conn_sid(sksec->sid, asoc->peer_secid, &conn_sid); 5298 if (err) 5299 return err; 5300 5301 asoc->secid = conn_sid; 5302 5303 /* Set any NetLabel labels including CIPSO/CALIPSO options. */ 5304 return selinux_netlbl_sctp_assoc_request(asoc, skb); 5305 } 5306 5307 /* Called when SCTP receives a COOKIE ACK chunk as the final 5308 * response to an association request (initited by us). 5309 */ 5310 static int selinux_sctp_assoc_established(struct sctp_association *asoc, 5311 struct sk_buff *skb) 5312 { 5313 struct sk_security_struct *sksec = asoc->base.sk->sk_security; 5314 5315 if (!selinux_policycap_extsockclass()) 5316 return 0; 5317 5318 /* Inherit secid from the parent socket - this will be picked up 5319 * by selinux_sctp_sk_clone() if the association gets peeled off 5320 * into a new socket. 5321 */ 5322 asoc->secid = sksec->sid; 5323 5324 return selinux_sctp_process_new_assoc(asoc, skb); 5325 } 5326 5327 /* Check if sctp IPv4/IPv6 addresses are valid for binding or connecting 5328 * based on their @optname. 5329 */ 5330 static int selinux_sctp_bind_connect(struct sock *sk, int optname, 5331 struct sockaddr *address, 5332 int addrlen) 5333 { 5334 int len, err = 0, walk_size = 0; 5335 void *addr_buf; 5336 struct sockaddr *addr; 5337 struct socket *sock; 5338 5339 if (!selinux_policycap_extsockclass()) 5340 return 0; 5341 5342 /* Process one or more addresses that may be IPv4 or IPv6 */ 5343 sock = sk->sk_socket; 5344 addr_buf = address; 5345 5346 while (walk_size < addrlen) { 5347 if (walk_size + sizeof(sa_family_t) > addrlen) 5348 return -EINVAL; 5349 5350 addr = addr_buf; 5351 switch (addr->sa_family) { 5352 case AF_UNSPEC: 5353 case AF_INET: 5354 len = sizeof(struct sockaddr_in); 5355 break; 5356 case AF_INET6: 5357 len = sizeof(struct sockaddr_in6); 5358 break; 5359 default: 5360 return -EINVAL; 5361 } 5362 5363 if (walk_size + len > addrlen) 5364 return -EINVAL; 5365 5366 err = -EINVAL; 5367 switch (optname) { 5368 /* Bind checks */ 5369 case SCTP_PRIMARY_ADDR: 5370 case SCTP_SET_PEER_PRIMARY_ADDR: 5371 case SCTP_SOCKOPT_BINDX_ADD: 5372 err = selinux_socket_bind(sock, addr, len); 5373 break; 5374 /* Connect checks */ 5375 case SCTP_SOCKOPT_CONNECTX: 5376 case SCTP_PARAM_SET_PRIMARY: 5377 case SCTP_PARAM_ADD_IP: 5378 case SCTP_SENDMSG_CONNECT: 5379 err = selinux_socket_connect_helper(sock, addr, len); 5380 if (err) 5381 return err; 5382 5383 /* As selinux_sctp_bind_connect() is called by the 5384 * SCTP protocol layer, the socket is already locked, 5385 * therefore selinux_netlbl_socket_connect_locked() 5386 * is called here. The situations handled are: 5387 * sctp_connectx(3), sctp_sendmsg(3), sendmsg(2), 5388 * whenever a new IP address is added or when a new 5389 * primary address is selected. 5390 * Note that an SCTP connect(2) call happens before 5391 * the SCTP protocol layer and is handled via 5392 * selinux_socket_connect(). 5393 */ 5394 err = selinux_netlbl_socket_connect_locked(sk, addr); 5395 break; 5396 } 5397 5398 if (err) 5399 return err; 5400 5401 addr_buf += len; 5402 walk_size += len; 5403 } 5404 5405 return 0; 5406 } 5407 5408 /* Called whenever a new socket is created by accept(2) or sctp_peeloff(3). */ 5409 static void selinux_sctp_sk_clone(struct sctp_association *asoc, struct sock *sk, 5410 struct sock *newsk) 5411 { 5412 struct sk_security_struct *sksec = sk->sk_security; 5413 struct sk_security_struct *newsksec = newsk->sk_security; 5414 5415 /* If policy does not support SECCLASS_SCTP_SOCKET then call 5416 * the non-sctp clone version. 5417 */ 5418 if (!selinux_policycap_extsockclass()) 5419 return selinux_sk_clone_security(sk, newsk); 5420 5421 newsksec->sid = asoc->secid; 5422 newsksec->peer_sid = asoc->peer_secid; 5423 newsksec->sclass = sksec->sclass; 5424 selinux_netlbl_sctp_sk_clone(sk, newsk); 5425 } 5426 5427 static int selinux_mptcp_add_subflow(struct sock *sk, struct sock *ssk) 5428 { 5429 struct sk_security_struct *ssksec = ssk->sk_security; 5430 struct sk_security_struct *sksec = sk->sk_security; 5431 5432 ssksec->sclass = sksec->sclass; 5433 ssksec->sid = sksec->sid; 5434 5435 /* replace the existing subflow label deleting the existing one 5436 * and re-recreating a new label using the updated context 5437 */ 5438 selinux_netlbl_sk_security_free(ssksec); 5439 return selinux_netlbl_socket_post_create(ssk, ssk->sk_family); 5440 } 5441 5442 static int selinux_inet_conn_request(const struct sock *sk, struct sk_buff *skb, 5443 struct request_sock *req) 5444 { 5445 struct sk_security_struct *sksec = sk->sk_security; 5446 int err; 5447 u16 family = req->rsk_ops->family; 5448 u32 connsid; 5449 u32 peersid; 5450 5451 err = selinux_skb_peerlbl_sid(skb, family, &peersid); 5452 if (err) 5453 return err; 5454 err = selinux_conn_sid(sksec->sid, peersid, &connsid); 5455 if (err) 5456 return err; 5457 req->secid = connsid; 5458 req->peer_secid = peersid; 5459 5460 return selinux_netlbl_inet_conn_request(req, family); 5461 } 5462 5463 static void selinux_inet_csk_clone(struct sock *newsk, 5464 const struct request_sock *req) 5465 { 5466 struct sk_security_struct *newsksec = newsk->sk_security; 5467 5468 newsksec->sid = req->secid; 5469 newsksec->peer_sid = req->peer_secid; 5470 /* NOTE: Ideally, we should also get the isec->sid for the 5471 new socket in sync, but we don't have the isec available yet. 5472 So we will wait until sock_graft to do it, by which 5473 time it will have been created and available. */ 5474 5475 /* We don't need to take any sort of lock here as we are the only 5476 * thread with access to newsksec */ 5477 selinux_netlbl_inet_csk_clone(newsk, req->rsk_ops->family); 5478 } 5479 5480 static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb) 5481 { 5482 u16 family = sk->sk_family; 5483 struct sk_security_struct *sksec = sk->sk_security; 5484 5485 /* handle mapped IPv4 packets arriving via IPv6 sockets */ 5486 if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP)) 5487 family = PF_INET; 5488 5489 selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid); 5490 } 5491 5492 static int selinux_secmark_relabel_packet(u32 sid) 5493 { 5494 const struct task_security_struct *__tsec; 5495 u32 tsid; 5496 5497 __tsec = selinux_cred(current_cred()); 5498 tsid = __tsec->sid; 5499 5500 return avc_has_perm(tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO, 5501 NULL); 5502 } 5503 5504 static void selinux_secmark_refcount_inc(void) 5505 { 5506 atomic_inc(&selinux_secmark_refcount); 5507 } 5508 5509 static void selinux_secmark_refcount_dec(void) 5510 { 5511 atomic_dec(&selinux_secmark_refcount); 5512 } 5513 5514 static void selinux_req_classify_flow(const struct request_sock *req, 5515 struct flowi_common *flic) 5516 { 5517 flic->flowic_secid = req->secid; 5518 } 5519 5520 static int selinux_tun_dev_alloc_security(void **security) 5521 { 5522 struct tun_security_struct *tunsec; 5523 5524 tunsec = kzalloc(sizeof(*tunsec), GFP_KERNEL); 5525 if (!tunsec) 5526 return -ENOMEM; 5527 tunsec->sid = current_sid(); 5528 5529 *security = tunsec; 5530 return 0; 5531 } 5532 5533 static void selinux_tun_dev_free_security(void *security) 5534 { 5535 kfree(security); 5536 } 5537 5538 static int selinux_tun_dev_create(void) 5539 { 5540 u32 sid = current_sid(); 5541 5542 /* we aren't taking into account the "sockcreate" SID since the socket 5543 * that is being created here is not a socket in the traditional sense, 5544 * instead it is a private sock, accessible only to the kernel, and 5545 * representing a wide range of network traffic spanning multiple 5546 * connections unlike traditional sockets - check the TUN driver to 5547 * get a better understanding of why this socket is special */ 5548 5549 return avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE, 5550 NULL); 5551 } 5552 5553 static int selinux_tun_dev_attach_queue(void *security) 5554 { 5555 struct tun_security_struct *tunsec = security; 5556 5557 return avc_has_perm(current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET, 5558 TUN_SOCKET__ATTACH_QUEUE, NULL); 5559 } 5560 5561 static int selinux_tun_dev_attach(struct sock *sk, void *security) 5562 { 5563 struct tun_security_struct *tunsec = security; 5564 struct sk_security_struct *sksec = sk->sk_security; 5565 5566 /* we don't currently perform any NetLabel based labeling here and it 5567 * isn't clear that we would want to do so anyway; while we could apply 5568 * labeling without the support of the TUN user the resulting labeled 5569 * traffic from the other end of the connection would almost certainly 5570 * cause confusion to the TUN user that had no idea network labeling 5571 * protocols were being used */ 5572 5573 sksec->sid = tunsec->sid; 5574 sksec->sclass = SECCLASS_TUN_SOCKET; 5575 5576 return 0; 5577 } 5578 5579 static int selinux_tun_dev_open(void *security) 5580 { 5581 struct tun_security_struct *tunsec = security; 5582 u32 sid = current_sid(); 5583 int err; 5584 5585 err = avc_has_perm(sid, tunsec->sid, SECCLASS_TUN_SOCKET, 5586 TUN_SOCKET__RELABELFROM, NULL); 5587 if (err) 5588 return err; 5589 err = avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET, 5590 TUN_SOCKET__RELABELTO, NULL); 5591 if (err) 5592 return err; 5593 tunsec->sid = sid; 5594 5595 return 0; 5596 } 5597 5598 #ifdef CONFIG_NETFILTER 5599 5600 static unsigned int selinux_ip_forward(void *priv, struct sk_buff *skb, 5601 const struct nf_hook_state *state) 5602 { 5603 int ifindex; 5604 u16 family; 5605 char *addrp; 5606 u32 peer_sid; 5607 struct common_audit_data ad; 5608 struct lsm_network_audit net = {0,}; 5609 int secmark_active, peerlbl_active; 5610 5611 if (!selinux_policycap_netpeer()) 5612 return NF_ACCEPT; 5613 5614 secmark_active = selinux_secmark_enabled(); 5615 peerlbl_active = selinux_peerlbl_enabled(); 5616 if (!secmark_active && !peerlbl_active) 5617 return NF_ACCEPT; 5618 5619 family = state->pf; 5620 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid) != 0) 5621 return NF_DROP; 5622 5623 ifindex = state->in->ifindex; 5624 ad.type = LSM_AUDIT_DATA_NET; 5625 ad.u.net = &net; 5626 ad.u.net->netif = ifindex; 5627 ad.u.net->family = family; 5628 if (selinux_parse_skb(skb, &ad, &addrp, 1, NULL) != 0) 5629 return NF_DROP; 5630 5631 if (peerlbl_active) { 5632 int err; 5633 5634 err = selinux_inet_sys_rcv_skb(state->net, ifindex, 5635 addrp, family, peer_sid, &ad); 5636 if (err) { 5637 selinux_netlbl_err(skb, family, err, 1); 5638 return NF_DROP; 5639 } 5640 } 5641 5642 if (secmark_active) 5643 if (avc_has_perm(peer_sid, skb->secmark, 5644 SECCLASS_PACKET, PACKET__FORWARD_IN, &ad)) 5645 return NF_DROP; 5646 5647 if (netlbl_enabled()) 5648 /* we do this in the FORWARD path and not the POST_ROUTING 5649 * path because we want to make sure we apply the necessary 5650 * labeling before IPsec is applied so we can leverage AH 5651 * protection */ 5652 if (selinux_netlbl_skbuff_setsid(skb, family, peer_sid) != 0) 5653 return NF_DROP; 5654 5655 return NF_ACCEPT; 5656 } 5657 5658 static unsigned int selinux_ip_output(void *priv, struct sk_buff *skb, 5659 const struct nf_hook_state *state) 5660 { 5661 struct sock *sk; 5662 u32 sid; 5663 5664 if (!netlbl_enabled()) 5665 return NF_ACCEPT; 5666 5667 /* we do this in the LOCAL_OUT path and not the POST_ROUTING path 5668 * because we want to make sure we apply the necessary labeling 5669 * before IPsec is applied so we can leverage AH protection */ 5670 sk = skb->sk; 5671 if (sk) { 5672 struct sk_security_struct *sksec; 5673 5674 if (sk_listener(sk)) 5675 /* if the socket is the listening state then this 5676 * packet is a SYN-ACK packet which means it needs to 5677 * be labeled based on the connection/request_sock and 5678 * not the parent socket. unfortunately, we can't 5679 * lookup the request_sock yet as it isn't queued on 5680 * the parent socket until after the SYN-ACK is sent. 5681 * the "solution" is to simply pass the packet as-is 5682 * as any IP option based labeling should be copied 5683 * from the initial connection request (in the IP 5684 * layer). it is far from ideal, but until we get a 5685 * security label in the packet itself this is the 5686 * best we can do. */ 5687 return NF_ACCEPT; 5688 5689 /* standard practice, label using the parent socket */ 5690 sksec = sk->sk_security; 5691 sid = sksec->sid; 5692 } else 5693 sid = SECINITSID_KERNEL; 5694 if (selinux_netlbl_skbuff_setsid(skb, state->pf, sid) != 0) 5695 return NF_DROP; 5696 5697 return NF_ACCEPT; 5698 } 5699 5700 5701 static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb, 5702 const struct nf_hook_state *state) 5703 { 5704 struct sock *sk; 5705 struct sk_security_struct *sksec; 5706 struct common_audit_data ad; 5707 struct lsm_network_audit net = {0,}; 5708 u8 proto = 0; 5709 5710 sk = skb_to_full_sk(skb); 5711 if (sk == NULL) 5712 return NF_ACCEPT; 5713 sksec = sk->sk_security; 5714 5715 ad.type = LSM_AUDIT_DATA_NET; 5716 ad.u.net = &net; 5717 ad.u.net->netif = state->out->ifindex; 5718 ad.u.net->family = state->pf; 5719 if (selinux_parse_skb(skb, &ad, NULL, 0, &proto)) 5720 return NF_DROP; 5721 5722 if (selinux_secmark_enabled()) 5723 if (avc_has_perm(sksec->sid, skb->secmark, 5724 SECCLASS_PACKET, PACKET__SEND, &ad)) 5725 return NF_DROP_ERR(-ECONNREFUSED); 5726 5727 if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto)) 5728 return NF_DROP_ERR(-ECONNREFUSED); 5729 5730 return NF_ACCEPT; 5731 } 5732 5733 static unsigned int selinux_ip_postroute(void *priv, 5734 struct sk_buff *skb, 5735 const struct nf_hook_state *state) 5736 { 5737 u16 family; 5738 u32 secmark_perm; 5739 u32 peer_sid; 5740 int ifindex; 5741 struct sock *sk; 5742 struct common_audit_data ad; 5743 struct lsm_network_audit net = {0,}; 5744 char *addrp; 5745 int secmark_active, peerlbl_active; 5746 5747 /* If any sort of compatibility mode is enabled then handoff processing 5748 * to the selinux_ip_postroute_compat() function to deal with the 5749 * special handling. We do this in an attempt to keep this function 5750 * as fast and as clean as possible. */ 5751 if (!selinux_policycap_netpeer()) 5752 return selinux_ip_postroute_compat(skb, state); 5753 5754 secmark_active = selinux_secmark_enabled(); 5755 peerlbl_active = selinux_peerlbl_enabled(); 5756 if (!secmark_active && !peerlbl_active) 5757 return NF_ACCEPT; 5758 5759 sk = skb_to_full_sk(skb); 5760 5761 #ifdef CONFIG_XFRM 5762 /* If skb->dst->xfrm is non-NULL then the packet is undergoing an IPsec 5763 * packet transformation so allow the packet to pass without any checks 5764 * since we'll have another chance to perform access control checks 5765 * when the packet is on it's final way out. 5766 * NOTE: there appear to be some IPv6 multicast cases where skb->dst 5767 * is NULL, in this case go ahead and apply access control. 5768 * NOTE: if this is a local socket (skb->sk != NULL) that is in the 5769 * TCP listening state we cannot wait until the XFRM processing 5770 * is done as we will miss out on the SA label if we do; 5771 * unfortunately, this means more work, but it is only once per 5772 * connection. */ 5773 if (skb_dst(skb) != NULL && skb_dst(skb)->xfrm != NULL && 5774 !(sk && sk_listener(sk))) 5775 return NF_ACCEPT; 5776 #endif 5777 5778 family = state->pf; 5779 if (sk == NULL) { 5780 /* Without an associated socket the packet is either coming 5781 * from the kernel or it is being forwarded; check the packet 5782 * to determine which and if the packet is being forwarded 5783 * query the packet directly to determine the security label. */ 5784 if (skb->skb_iif) { 5785 secmark_perm = PACKET__FORWARD_OUT; 5786 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid)) 5787 return NF_DROP; 5788 } else { 5789 secmark_perm = PACKET__SEND; 5790 peer_sid = SECINITSID_KERNEL; 5791 } 5792 } else if (sk_listener(sk)) { 5793 /* Locally generated packet but the associated socket is in the 5794 * listening state which means this is a SYN-ACK packet. In 5795 * this particular case the correct security label is assigned 5796 * to the connection/request_sock but unfortunately we can't 5797 * query the request_sock as it isn't queued on the parent 5798 * socket until after the SYN-ACK packet is sent; the only 5799 * viable choice is to regenerate the label like we do in 5800 * selinux_inet_conn_request(). See also selinux_ip_output() 5801 * for similar problems. */ 5802 u32 skb_sid; 5803 struct sk_security_struct *sksec; 5804 5805 sksec = sk->sk_security; 5806 if (selinux_skb_peerlbl_sid(skb, family, &skb_sid)) 5807 return NF_DROP; 5808 /* At this point, if the returned skb peerlbl is SECSID_NULL 5809 * and the packet has been through at least one XFRM 5810 * transformation then we must be dealing with the "final" 5811 * form of labeled IPsec packet; since we've already applied 5812 * all of our access controls on this packet we can safely 5813 * pass the packet. */ 5814 if (skb_sid == SECSID_NULL) { 5815 switch (family) { 5816 case PF_INET: 5817 if (IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) 5818 return NF_ACCEPT; 5819 break; 5820 case PF_INET6: 5821 if (IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED) 5822 return NF_ACCEPT; 5823 break; 5824 default: 5825 return NF_DROP_ERR(-ECONNREFUSED); 5826 } 5827 } 5828 if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid)) 5829 return NF_DROP; 5830 secmark_perm = PACKET__SEND; 5831 } else { 5832 /* Locally generated packet, fetch the security label from the 5833 * associated socket. */ 5834 struct sk_security_struct *sksec = sk->sk_security; 5835 peer_sid = sksec->sid; 5836 secmark_perm = PACKET__SEND; 5837 } 5838 5839 ifindex = state->out->ifindex; 5840 ad.type = LSM_AUDIT_DATA_NET; 5841 ad.u.net = &net; 5842 ad.u.net->netif = ifindex; 5843 ad.u.net->family = family; 5844 if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL)) 5845 return NF_DROP; 5846 5847 if (secmark_active) 5848 if (avc_has_perm(peer_sid, skb->secmark, 5849 SECCLASS_PACKET, secmark_perm, &ad)) 5850 return NF_DROP_ERR(-ECONNREFUSED); 5851 5852 if (peerlbl_active) { 5853 u32 if_sid; 5854 u32 node_sid; 5855 5856 if (sel_netif_sid(state->net, ifindex, &if_sid)) 5857 return NF_DROP; 5858 if (avc_has_perm(peer_sid, if_sid, 5859 SECCLASS_NETIF, NETIF__EGRESS, &ad)) 5860 return NF_DROP_ERR(-ECONNREFUSED); 5861 5862 if (sel_netnode_sid(addrp, family, &node_sid)) 5863 return NF_DROP; 5864 if (avc_has_perm(peer_sid, node_sid, 5865 SECCLASS_NODE, NODE__SENDTO, &ad)) 5866 return NF_DROP_ERR(-ECONNREFUSED); 5867 } 5868 5869 return NF_ACCEPT; 5870 } 5871 #endif /* CONFIG_NETFILTER */ 5872 5873 static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb) 5874 { 5875 int rc = 0; 5876 unsigned int msg_len; 5877 unsigned int data_len = skb->len; 5878 unsigned char *data = skb->data; 5879 struct nlmsghdr *nlh; 5880 struct sk_security_struct *sksec = sk->sk_security; 5881 u16 sclass = sksec->sclass; 5882 u32 perm; 5883 5884 while (data_len >= nlmsg_total_size(0)) { 5885 nlh = (struct nlmsghdr *)data; 5886 5887 /* NOTE: the nlmsg_len field isn't reliably set by some netlink 5888 * users which means we can't reject skb's with bogus 5889 * length fields; our solution is to follow what 5890 * netlink_rcv_skb() does and simply skip processing at 5891 * messages with length fields that are clearly junk 5892 */ 5893 if (nlh->nlmsg_len < NLMSG_HDRLEN || nlh->nlmsg_len > data_len) 5894 return 0; 5895 5896 rc = selinux_nlmsg_lookup(sclass, nlh->nlmsg_type, &perm); 5897 if (rc == 0) { 5898 rc = sock_has_perm(sk, perm); 5899 if (rc) 5900 return rc; 5901 } else if (rc == -EINVAL) { 5902 /* -EINVAL is a missing msg/perm mapping */ 5903 pr_warn_ratelimited("SELinux: unrecognized netlink" 5904 " message: protocol=%hu nlmsg_type=%hu sclass=%s" 5905 " pid=%d comm=%s\n", 5906 sk->sk_protocol, nlh->nlmsg_type, 5907 secclass_map[sclass - 1].name, 5908 task_pid_nr(current), current->comm); 5909 if (enforcing_enabled() && 5910 !security_get_allow_unknown()) 5911 return rc; 5912 rc = 0; 5913 } else if (rc == -ENOENT) { 5914 /* -ENOENT is a missing socket/class mapping, ignore */ 5915 rc = 0; 5916 } else { 5917 return rc; 5918 } 5919 5920 /* move to the next message after applying netlink padding */ 5921 msg_len = NLMSG_ALIGN(nlh->nlmsg_len); 5922 if (msg_len >= data_len) 5923 return 0; 5924 data_len -= msg_len; 5925 data += msg_len; 5926 } 5927 5928 return rc; 5929 } 5930 5931 static void ipc_init_security(struct ipc_security_struct *isec, u16 sclass) 5932 { 5933 isec->sclass = sclass; 5934 isec->sid = current_sid(); 5935 } 5936 5937 static int ipc_has_perm(struct kern_ipc_perm *ipc_perms, 5938 u32 perms) 5939 { 5940 struct ipc_security_struct *isec; 5941 struct common_audit_data ad; 5942 u32 sid = current_sid(); 5943 5944 isec = selinux_ipc(ipc_perms); 5945 5946 ad.type = LSM_AUDIT_DATA_IPC; 5947 ad.u.ipc_id = ipc_perms->key; 5948 5949 return avc_has_perm(sid, isec->sid, isec->sclass, perms, &ad); 5950 } 5951 5952 static int selinux_msg_msg_alloc_security(struct msg_msg *msg) 5953 { 5954 struct msg_security_struct *msec; 5955 5956 msec = selinux_msg_msg(msg); 5957 msec->sid = SECINITSID_UNLABELED; 5958 5959 return 0; 5960 } 5961 5962 /* message queue security operations */ 5963 static int selinux_msg_queue_alloc_security(struct kern_ipc_perm *msq) 5964 { 5965 struct ipc_security_struct *isec; 5966 struct common_audit_data ad; 5967 u32 sid = current_sid(); 5968 5969 isec = selinux_ipc(msq); 5970 ipc_init_security(isec, SECCLASS_MSGQ); 5971 5972 ad.type = LSM_AUDIT_DATA_IPC; 5973 ad.u.ipc_id = msq->key; 5974 5975 return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ, 5976 MSGQ__CREATE, &ad); 5977 } 5978 5979 static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg) 5980 { 5981 struct ipc_security_struct *isec; 5982 struct common_audit_data ad; 5983 u32 sid = current_sid(); 5984 5985 isec = selinux_ipc(msq); 5986 5987 ad.type = LSM_AUDIT_DATA_IPC; 5988 ad.u.ipc_id = msq->key; 5989 5990 return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ, 5991 MSGQ__ASSOCIATE, &ad); 5992 } 5993 5994 static int selinux_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd) 5995 { 5996 int err; 5997 int perms; 5998 5999 switch (cmd) { 6000 case IPC_INFO: 6001 case MSG_INFO: 6002 /* No specific object, just general system-wide information. */ 6003 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 6004 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL); 6005 case IPC_STAT: 6006 case MSG_STAT: 6007 case MSG_STAT_ANY: 6008 perms = MSGQ__GETATTR | MSGQ__ASSOCIATE; 6009 break; 6010 case IPC_SET: 6011 perms = MSGQ__SETATTR; 6012 break; 6013 case IPC_RMID: 6014 perms = MSGQ__DESTROY; 6015 break; 6016 default: 6017 return 0; 6018 } 6019 6020 err = ipc_has_perm(msq, perms); 6021 return err; 6022 } 6023 6024 static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg) 6025 { 6026 struct ipc_security_struct *isec; 6027 struct msg_security_struct *msec; 6028 struct common_audit_data ad; 6029 u32 sid = current_sid(); 6030 int rc; 6031 6032 isec = selinux_ipc(msq); 6033 msec = selinux_msg_msg(msg); 6034 6035 /* 6036 * First time through, need to assign label to the message 6037 */ 6038 if (msec->sid == SECINITSID_UNLABELED) { 6039 /* 6040 * Compute new sid based on current process and 6041 * message queue this message will be stored in 6042 */ 6043 rc = security_transition_sid(sid, isec->sid, 6044 SECCLASS_MSG, NULL, &msec->sid); 6045 if (rc) 6046 return rc; 6047 } 6048 6049 ad.type = LSM_AUDIT_DATA_IPC; 6050 ad.u.ipc_id = msq->key; 6051 6052 /* Can this process write to the queue? */ 6053 rc = avc_has_perm(sid, isec->sid, SECCLASS_MSGQ, 6054 MSGQ__WRITE, &ad); 6055 if (!rc) 6056 /* Can this process send the message */ 6057 rc = avc_has_perm(sid, msec->sid, SECCLASS_MSG, 6058 MSG__SEND, &ad); 6059 if (!rc) 6060 /* Can the message be put in the queue? */ 6061 rc = avc_has_perm(msec->sid, isec->sid, SECCLASS_MSGQ, 6062 MSGQ__ENQUEUE, &ad); 6063 6064 return rc; 6065 } 6066 6067 static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg, 6068 struct task_struct *target, 6069 long type, int mode) 6070 { 6071 struct ipc_security_struct *isec; 6072 struct msg_security_struct *msec; 6073 struct common_audit_data ad; 6074 u32 sid = task_sid_obj(target); 6075 int rc; 6076 6077 isec = selinux_ipc(msq); 6078 msec = selinux_msg_msg(msg); 6079 6080 ad.type = LSM_AUDIT_DATA_IPC; 6081 ad.u.ipc_id = msq->key; 6082 6083 rc = avc_has_perm(sid, isec->sid, 6084 SECCLASS_MSGQ, MSGQ__READ, &ad); 6085 if (!rc) 6086 rc = avc_has_perm(sid, msec->sid, 6087 SECCLASS_MSG, MSG__RECEIVE, &ad); 6088 return rc; 6089 } 6090 6091 /* Shared Memory security operations */ 6092 static int selinux_shm_alloc_security(struct kern_ipc_perm *shp) 6093 { 6094 struct ipc_security_struct *isec; 6095 struct common_audit_data ad; 6096 u32 sid = current_sid(); 6097 6098 isec = selinux_ipc(shp); 6099 ipc_init_security(isec, SECCLASS_SHM); 6100 6101 ad.type = LSM_AUDIT_DATA_IPC; 6102 ad.u.ipc_id = shp->key; 6103 6104 return avc_has_perm(sid, isec->sid, SECCLASS_SHM, 6105 SHM__CREATE, &ad); 6106 } 6107 6108 static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg) 6109 { 6110 struct ipc_security_struct *isec; 6111 struct common_audit_data ad; 6112 u32 sid = current_sid(); 6113 6114 isec = selinux_ipc(shp); 6115 6116 ad.type = LSM_AUDIT_DATA_IPC; 6117 ad.u.ipc_id = shp->key; 6118 6119 return avc_has_perm(sid, isec->sid, SECCLASS_SHM, 6120 SHM__ASSOCIATE, &ad); 6121 } 6122 6123 /* Note, at this point, shp is locked down */ 6124 static int selinux_shm_shmctl(struct kern_ipc_perm *shp, int cmd) 6125 { 6126 int perms; 6127 int err; 6128 6129 switch (cmd) { 6130 case IPC_INFO: 6131 case SHM_INFO: 6132 /* No specific object, just general system-wide information. */ 6133 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 6134 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL); 6135 case IPC_STAT: 6136 case SHM_STAT: 6137 case SHM_STAT_ANY: 6138 perms = SHM__GETATTR | SHM__ASSOCIATE; 6139 break; 6140 case IPC_SET: 6141 perms = SHM__SETATTR; 6142 break; 6143 case SHM_LOCK: 6144 case SHM_UNLOCK: 6145 perms = SHM__LOCK; 6146 break; 6147 case IPC_RMID: 6148 perms = SHM__DESTROY; 6149 break; 6150 default: 6151 return 0; 6152 } 6153 6154 err = ipc_has_perm(shp, perms); 6155 return err; 6156 } 6157 6158 static int selinux_shm_shmat(struct kern_ipc_perm *shp, 6159 char __user *shmaddr, int shmflg) 6160 { 6161 u32 perms; 6162 6163 if (shmflg & SHM_RDONLY) 6164 perms = SHM__READ; 6165 else 6166 perms = SHM__READ | SHM__WRITE; 6167 6168 return ipc_has_perm(shp, perms); 6169 } 6170 6171 /* Semaphore security operations */ 6172 static int selinux_sem_alloc_security(struct kern_ipc_perm *sma) 6173 { 6174 struct ipc_security_struct *isec; 6175 struct common_audit_data ad; 6176 u32 sid = current_sid(); 6177 6178 isec = selinux_ipc(sma); 6179 ipc_init_security(isec, SECCLASS_SEM); 6180 6181 ad.type = LSM_AUDIT_DATA_IPC; 6182 ad.u.ipc_id = sma->key; 6183 6184 return avc_has_perm(sid, isec->sid, SECCLASS_SEM, 6185 SEM__CREATE, &ad); 6186 } 6187 6188 static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg) 6189 { 6190 struct ipc_security_struct *isec; 6191 struct common_audit_data ad; 6192 u32 sid = current_sid(); 6193 6194 isec = selinux_ipc(sma); 6195 6196 ad.type = LSM_AUDIT_DATA_IPC; 6197 ad.u.ipc_id = sma->key; 6198 6199 return avc_has_perm(sid, isec->sid, SECCLASS_SEM, 6200 SEM__ASSOCIATE, &ad); 6201 } 6202 6203 /* Note, at this point, sma is locked down */ 6204 static int selinux_sem_semctl(struct kern_ipc_perm *sma, int cmd) 6205 { 6206 int err; 6207 u32 perms; 6208 6209 switch (cmd) { 6210 case IPC_INFO: 6211 case SEM_INFO: 6212 /* No specific object, just general system-wide information. */ 6213 return avc_has_perm(current_sid(), SECINITSID_KERNEL, 6214 SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL); 6215 case GETPID: 6216 case GETNCNT: 6217 case GETZCNT: 6218 perms = SEM__GETATTR; 6219 break; 6220 case GETVAL: 6221 case GETALL: 6222 perms = SEM__READ; 6223 break; 6224 case SETVAL: 6225 case SETALL: 6226 perms = SEM__WRITE; 6227 break; 6228 case IPC_RMID: 6229 perms = SEM__DESTROY; 6230 break; 6231 case IPC_SET: 6232 perms = SEM__SETATTR; 6233 break; 6234 case IPC_STAT: 6235 case SEM_STAT: 6236 case SEM_STAT_ANY: 6237 perms = SEM__GETATTR | SEM__ASSOCIATE; 6238 break; 6239 default: 6240 return 0; 6241 } 6242 6243 err = ipc_has_perm(sma, perms); 6244 return err; 6245 } 6246 6247 static int selinux_sem_semop(struct kern_ipc_perm *sma, 6248 struct sembuf *sops, unsigned nsops, int alter) 6249 { 6250 u32 perms; 6251 6252 if (alter) 6253 perms = SEM__READ | SEM__WRITE; 6254 else 6255 perms = SEM__READ; 6256 6257 return ipc_has_perm(sma, perms); 6258 } 6259 6260 static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag) 6261 { 6262 u32 av = 0; 6263 6264 av = 0; 6265 if (flag & S_IRUGO) 6266 av |= IPC__UNIX_READ; 6267 if (flag & S_IWUGO) 6268 av |= IPC__UNIX_WRITE; 6269 6270 if (av == 0) 6271 return 0; 6272 6273 return ipc_has_perm(ipcp, av); 6274 } 6275 6276 static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) 6277 { 6278 struct ipc_security_struct *isec = selinux_ipc(ipcp); 6279 *secid = isec->sid; 6280 } 6281 6282 static void selinux_d_instantiate(struct dentry *dentry, struct inode *inode) 6283 { 6284 if (inode) 6285 inode_doinit_with_dentry(inode, dentry); 6286 } 6287 6288 static int selinux_getprocattr(struct task_struct *p, 6289 const char *name, char **value) 6290 { 6291 const struct task_security_struct *__tsec; 6292 u32 sid; 6293 int error; 6294 unsigned len; 6295 6296 rcu_read_lock(); 6297 __tsec = selinux_cred(__task_cred(p)); 6298 6299 if (current != p) { 6300 error = avc_has_perm(current_sid(), __tsec->sid, 6301 SECCLASS_PROCESS, PROCESS__GETATTR, NULL); 6302 if (error) 6303 goto bad; 6304 } 6305 6306 if (!strcmp(name, "current")) 6307 sid = __tsec->sid; 6308 else if (!strcmp(name, "prev")) 6309 sid = __tsec->osid; 6310 else if (!strcmp(name, "exec")) 6311 sid = __tsec->exec_sid; 6312 else if (!strcmp(name, "fscreate")) 6313 sid = __tsec->create_sid; 6314 else if (!strcmp(name, "keycreate")) 6315 sid = __tsec->keycreate_sid; 6316 else if (!strcmp(name, "sockcreate")) 6317 sid = __tsec->sockcreate_sid; 6318 else { 6319 error = -EINVAL; 6320 goto bad; 6321 } 6322 rcu_read_unlock(); 6323 6324 if (!sid) 6325 return 0; 6326 6327 error = security_sid_to_context(sid, value, &len); 6328 if (error) 6329 return error; 6330 return len; 6331 6332 bad: 6333 rcu_read_unlock(); 6334 return error; 6335 } 6336 6337 static int selinux_setprocattr(const char *name, void *value, size_t size) 6338 { 6339 struct task_security_struct *tsec; 6340 struct cred *new; 6341 u32 mysid = current_sid(), sid = 0, ptsid; 6342 int error; 6343 char *str = value; 6344 6345 /* 6346 * Basic control over ability to set these attributes at all. 6347 */ 6348 if (!strcmp(name, "exec")) 6349 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS, 6350 PROCESS__SETEXEC, NULL); 6351 else if (!strcmp(name, "fscreate")) 6352 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS, 6353 PROCESS__SETFSCREATE, NULL); 6354 else if (!strcmp(name, "keycreate")) 6355 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS, 6356 PROCESS__SETKEYCREATE, NULL); 6357 else if (!strcmp(name, "sockcreate")) 6358 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS, 6359 PROCESS__SETSOCKCREATE, NULL); 6360 else if (!strcmp(name, "current")) 6361 error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS, 6362 PROCESS__SETCURRENT, NULL); 6363 else 6364 error = -EINVAL; 6365 if (error) 6366 return error; 6367 6368 /* Obtain a SID for the context, if one was specified. */ 6369 if (size && str[0] && str[0] != '\n') { 6370 if (str[size-1] == '\n') { 6371 str[size-1] = 0; 6372 size--; 6373 } 6374 error = security_context_to_sid(value, size, 6375 &sid, GFP_KERNEL); 6376 if (error == -EINVAL && !strcmp(name, "fscreate")) { 6377 if (!has_cap_mac_admin(true)) { 6378 struct audit_buffer *ab; 6379 size_t audit_size; 6380 6381 /* We strip a nul only if it is at the end, otherwise the 6382 * context contains a nul and we should audit that */ 6383 if (str[size - 1] == '\0') 6384 audit_size = size - 1; 6385 else 6386 audit_size = size; 6387 ab = audit_log_start(audit_context(), 6388 GFP_ATOMIC, 6389 AUDIT_SELINUX_ERR); 6390 if (!ab) 6391 return error; 6392 audit_log_format(ab, "op=fscreate invalid_context="); 6393 audit_log_n_untrustedstring(ab, value, audit_size); 6394 audit_log_end(ab); 6395 6396 return error; 6397 } 6398 error = security_context_to_sid_force(value, size, 6399 &sid); 6400 } 6401 if (error) 6402 return error; 6403 } 6404 6405 new = prepare_creds(); 6406 if (!new) 6407 return -ENOMEM; 6408 6409 /* Permission checking based on the specified context is 6410 performed during the actual operation (execve, 6411 open/mkdir/...), when we know the full context of the 6412 operation. See selinux_bprm_creds_for_exec for the execve 6413 checks and may_create for the file creation checks. The 6414 operation will then fail if the context is not permitted. */ 6415 tsec = selinux_cred(new); 6416 if (!strcmp(name, "exec")) { 6417 tsec->exec_sid = sid; 6418 } else if (!strcmp(name, "fscreate")) { 6419 tsec->create_sid = sid; 6420 } else if (!strcmp(name, "keycreate")) { 6421 if (sid) { 6422 error = avc_has_perm(mysid, sid, 6423 SECCLASS_KEY, KEY__CREATE, NULL); 6424 if (error) 6425 goto abort_change; 6426 } 6427 tsec->keycreate_sid = sid; 6428 } else if (!strcmp(name, "sockcreate")) { 6429 tsec->sockcreate_sid = sid; 6430 } else if (!strcmp(name, "current")) { 6431 error = -EINVAL; 6432 if (sid == 0) 6433 goto abort_change; 6434 6435 /* Only allow single threaded processes to change context */ 6436 if (!current_is_single_threaded()) { 6437 error = security_bounded_transition(tsec->sid, sid); 6438 if (error) 6439 goto abort_change; 6440 } 6441 6442 /* Check permissions for the transition. */ 6443 error = avc_has_perm(tsec->sid, sid, SECCLASS_PROCESS, 6444 PROCESS__DYNTRANSITION, NULL); 6445 if (error) 6446 goto abort_change; 6447 6448 /* Check for ptracing, and update the task SID if ok. 6449 Otherwise, leave SID unchanged and fail. */ 6450 ptsid = ptrace_parent_sid(); 6451 if (ptsid != 0) { 6452 error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS, 6453 PROCESS__PTRACE, NULL); 6454 if (error) 6455 goto abort_change; 6456 } 6457 6458 tsec->sid = sid; 6459 } else { 6460 error = -EINVAL; 6461 goto abort_change; 6462 } 6463 6464 commit_creds(new); 6465 return size; 6466 6467 abort_change: 6468 abort_creds(new); 6469 return error; 6470 } 6471 6472 static int selinux_ismaclabel(const char *name) 6473 { 6474 return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0); 6475 } 6476 6477 static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) 6478 { 6479 return security_sid_to_context(secid, 6480 secdata, seclen); 6481 } 6482 6483 static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid) 6484 { 6485 return security_context_to_sid(secdata, seclen, 6486 secid, GFP_KERNEL); 6487 } 6488 6489 static void selinux_release_secctx(char *secdata, u32 seclen) 6490 { 6491 kfree(secdata); 6492 } 6493 6494 static void selinux_inode_invalidate_secctx(struct inode *inode) 6495 { 6496 struct inode_security_struct *isec = selinux_inode(inode); 6497 6498 spin_lock(&isec->lock); 6499 isec->initialized = LABEL_INVALID; 6500 spin_unlock(&isec->lock); 6501 } 6502 6503 /* 6504 * called with inode->i_mutex locked 6505 */ 6506 static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) 6507 { 6508 int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, 6509 ctx, ctxlen, 0); 6510 /* Do not return error when suppressing label (SBLABEL_MNT not set). */ 6511 return rc == -EOPNOTSUPP ? 0 : rc; 6512 } 6513 6514 /* 6515 * called with inode->i_mutex locked 6516 */ 6517 static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) 6518 { 6519 return __vfs_setxattr_noperm(&nop_mnt_idmap, dentry, XATTR_NAME_SELINUX, 6520 ctx, ctxlen, 0); 6521 } 6522 6523 static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) 6524 { 6525 int len = 0; 6526 len = selinux_inode_getsecurity(&nop_mnt_idmap, inode, 6527 XATTR_SELINUX_SUFFIX, ctx, true); 6528 if (len < 0) 6529 return len; 6530 *ctxlen = len; 6531 return 0; 6532 } 6533 #ifdef CONFIG_KEYS 6534 6535 static int selinux_key_alloc(struct key *k, const struct cred *cred, 6536 unsigned long flags) 6537 { 6538 const struct task_security_struct *tsec; 6539 struct key_security_struct *ksec; 6540 6541 ksec = kzalloc(sizeof(struct key_security_struct), GFP_KERNEL); 6542 if (!ksec) 6543 return -ENOMEM; 6544 6545 tsec = selinux_cred(cred); 6546 if (tsec->keycreate_sid) 6547 ksec->sid = tsec->keycreate_sid; 6548 else 6549 ksec->sid = tsec->sid; 6550 6551 k->security = ksec; 6552 return 0; 6553 } 6554 6555 static void selinux_key_free(struct key *k) 6556 { 6557 struct key_security_struct *ksec = k->security; 6558 6559 k->security = NULL; 6560 kfree(ksec); 6561 } 6562 6563 static int selinux_key_permission(key_ref_t key_ref, 6564 const struct cred *cred, 6565 enum key_need_perm need_perm) 6566 { 6567 struct key *key; 6568 struct key_security_struct *ksec; 6569 u32 perm, sid; 6570 6571 switch (need_perm) { 6572 case KEY_NEED_VIEW: 6573 perm = KEY__VIEW; 6574 break; 6575 case KEY_NEED_READ: 6576 perm = KEY__READ; 6577 break; 6578 case KEY_NEED_WRITE: 6579 perm = KEY__WRITE; 6580 break; 6581 case KEY_NEED_SEARCH: 6582 perm = KEY__SEARCH; 6583 break; 6584 case KEY_NEED_LINK: 6585 perm = KEY__LINK; 6586 break; 6587 case KEY_NEED_SETATTR: 6588 perm = KEY__SETATTR; 6589 break; 6590 case KEY_NEED_UNLINK: 6591 case KEY_SYSADMIN_OVERRIDE: 6592 case KEY_AUTHTOKEN_OVERRIDE: 6593 case KEY_DEFER_PERM_CHECK: 6594 return 0; 6595 default: 6596 WARN_ON(1); 6597 return -EPERM; 6598 6599 } 6600 6601 sid = cred_sid(cred); 6602 key = key_ref_to_ptr(key_ref); 6603 ksec = key->security; 6604 6605 return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, perm, NULL); 6606 } 6607 6608 static int selinux_key_getsecurity(struct key *key, char **_buffer) 6609 { 6610 struct key_security_struct *ksec = key->security; 6611 char *context = NULL; 6612 unsigned len; 6613 int rc; 6614 6615 rc = security_sid_to_context(ksec->sid, 6616 &context, &len); 6617 if (!rc) 6618 rc = len; 6619 *_buffer = context; 6620 return rc; 6621 } 6622 6623 #ifdef CONFIG_KEY_NOTIFICATIONS 6624 static int selinux_watch_key(struct key *key) 6625 { 6626 struct key_security_struct *ksec = key->security; 6627 u32 sid = current_sid(); 6628 6629 return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, KEY__VIEW, NULL); 6630 } 6631 #endif 6632 #endif 6633 6634 #ifdef CONFIG_SECURITY_INFINIBAND 6635 static int selinux_ib_pkey_access(void *ib_sec, u64 subnet_prefix, u16 pkey_val) 6636 { 6637 struct common_audit_data ad; 6638 int err; 6639 u32 sid = 0; 6640 struct ib_security_struct *sec = ib_sec; 6641 struct lsm_ibpkey_audit ibpkey; 6642 6643 err = sel_ib_pkey_sid(subnet_prefix, pkey_val, &sid); 6644 if (err) 6645 return err; 6646 6647 ad.type = LSM_AUDIT_DATA_IBPKEY; 6648 ibpkey.subnet_prefix = subnet_prefix; 6649 ibpkey.pkey = pkey_val; 6650 ad.u.ibpkey = &ibpkey; 6651 return avc_has_perm(sec->sid, sid, 6652 SECCLASS_INFINIBAND_PKEY, 6653 INFINIBAND_PKEY__ACCESS, &ad); 6654 } 6655 6656 static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name, 6657 u8 port_num) 6658 { 6659 struct common_audit_data ad; 6660 int err; 6661 u32 sid = 0; 6662 struct ib_security_struct *sec = ib_sec; 6663 struct lsm_ibendport_audit ibendport; 6664 6665 err = security_ib_endport_sid(dev_name, port_num, 6666 &sid); 6667 6668 if (err) 6669 return err; 6670 6671 ad.type = LSM_AUDIT_DATA_IBENDPORT; 6672 ibendport.dev_name = dev_name; 6673 ibendport.port = port_num; 6674 ad.u.ibendport = &ibendport; 6675 return avc_has_perm(sec->sid, sid, 6676 SECCLASS_INFINIBAND_ENDPORT, 6677 INFINIBAND_ENDPORT__MANAGE_SUBNET, &ad); 6678 } 6679 6680 static int selinux_ib_alloc_security(void **ib_sec) 6681 { 6682 struct ib_security_struct *sec; 6683 6684 sec = kzalloc(sizeof(*sec), GFP_KERNEL); 6685 if (!sec) 6686 return -ENOMEM; 6687 sec->sid = current_sid(); 6688 6689 *ib_sec = sec; 6690 return 0; 6691 } 6692 6693 static void selinux_ib_free_security(void *ib_sec) 6694 { 6695 kfree(ib_sec); 6696 } 6697 #endif 6698 6699 #ifdef CONFIG_BPF_SYSCALL 6700 static int selinux_bpf(int cmd, union bpf_attr *attr, 6701 unsigned int size) 6702 { 6703 u32 sid = current_sid(); 6704 int ret; 6705 6706 switch (cmd) { 6707 case BPF_MAP_CREATE: 6708 ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__MAP_CREATE, 6709 NULL); 6710 break; 6711 case BPF_PROG_LOAD: 6712 ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__PROG_LOAD, 6713 NULL); 6714 break; 6715 default: 6716 ret = 0; 6717 break; 6718 } 6719 6720 return ret; 6721 } 6722 6723 static u32 bpf_map_fmode_to_av(fmode_t fmode) 6724 { 6725 u32 av = 0; 6726 6727 if (fmode & FMODE_READ) 6728 av |= BPF__MAP_READ; 6729 if (fmode & FMODE_WRITE) 6730 av |= BPF__MAP_WRITE; 6731 return av; 6732 } 6733 6734 /* This function will check the file pass through unix socket or binder to see 6735 * if it is a bpf related object. And apply corresponding checks on the bpf 6736 * object based on the type. The bpf maps and programs, not like other files and 6737 * socket, are using a shared anonymous inode inside the kernel as their inode. 6738 * So checking that inode cannot identify if the process have privilege to 6739 * access the bpf object and that's why we have to add this additional check in 6740 * selinux_file_receive and selinux_binder_transfer_files. 6741 */ 6742 static int bpf_fd_pass(struct file *file, u32 sid) 6743 { 6744 struct bpf_security_struct *bpfsec; 6745 struct bpf_prog *prog; 6746 struct bpf_map *map; 6747 int ret; 6748 6749 if (file->f_op == &bpf_map_fops) { 6750 map = file->private_data; 6751 bpfsec = map->security; 6752 ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF, 6753 bpf_map_fmode_to_av(file->f_mode), NULL); 6754 if (ret) 6755 return ret; 6756 } else if (file->f_op == &bpf_prog_fops) { 6757 prog = file->private_data; 6758 bpfsec = prog->aux->security; 6759 ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF, 6760 BPF__PROG_RUN, NULL); 6761 if (ret) 6762 return ret; 6763 } 6764 return 0; 6765 } 6766 6767 static int selinux_bpf_map(struct bpf_map *map, fmode_t fmode) 6768 { 6769 u32 sid = current_sid(); 6770 struct bpf_security_struct *bpfsec; 6771 6772 bpfsec = map->security; 6773 return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF, 6774 bpf_map_fmode_to_av(fmode), NULL); 6775 } 6776 6777 static int selinux_bpf_prog(struct bpf_prog *prog) 6778 { 6779 u32 sid = current_sid(); 6780 struct bpf_security_struct *bpfsec; 6781 6782 bpfsec = prog->aux->security; 6783 return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF, 6784 BPF__PROG_RUN, NULL); 6785 } 6786 6787 static int selinux_bpf_map_alloc(struct bpf_map *map) 6788 { 6789 struct bpf_security_struct *bpfsec; 6790 6791 bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL); 6792 if (!bpfsec) 6793 return -ENOMEM; 6794 6795 bpfsec->sid = current_sid(); 6796 map->security = bpfsec; 6797 6798 return 0; 6799 } 6800 6801 static void selinux_bpf_map_free(struct bpf_map *map) 6802 { 6803 struct bpf_security_struct *bpfsec = map->security; 6804 6805 map->security = NULL; 6806 kfree(bpfsec); 6807 } 6808 6809 static int selinux_bpf_prog_alloc(struct bpf_prog_aux *aux) 6810 { 6811 struct bpf_security_struct *bpfsec; 6812 6813 bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL); 6814 if (!bpfsec) 6815 return -ENOMEM; 6816 6817 bpfsec->sid = current_sid(); 6818 aux->security = bpfsec; 6819 6820 return 0; 6821 } 6822 6823 static void selinux_bpf_prog_free(struct bpf_prog_aux *aux) 6824 { 6825 struct bpf_security_struct *bpfsec = aux->security; 6826 6827 aux->security = NULL; 6828 kfree(bpfsec); 6829 } 6830 #endif 6831 6832 struct lsm_blob_sizes selinux_blob_sizes __ro_after_init = { 6833 .lbs_cred = sizeof(struct task_security_struct), 6834 .lbs_file = sizeof(struct file_security_struct), 6835 .lbs_inode = sizeof(struct inode_security_struct), 6836 .lbs_ipc = sizeof(struct ipc_security_struct), 6837 .lbs_msg_msg = sizeof(struct msg_security_struct), 6838 .lbs_superblock = sizeof(struct superblock_security_struct), 6839 }; 6840 6841 #ifdef CONFIG_PERF_EVENTS 6842 static int selinux_perf_event_open(struct perf_event_attr *attr, int type) 6843 { 6844 u32 requested, sid = current_sid(); 6845 6846 if (type == PERF_SECURITY_OPEN) 6847 requested = PERF_EVENT__OPEN; 6848 else if (type == PERF_SECURITY_CPU) 6849 requested = PERF_EVENT__CPU; 6850 else if (type == PERF_SECURITY_KERNEL) 6851 requested = PERF_EVENT__KERNEL; 6852 else if (type == PERF_SECURITY_TRACEPOINT) 6853 requested = PERF_EVENT__TRACEPOINT; 6854 else 6855 return -EINVAL; 6856 6857 return avc_has_perm(sid, sid, SECCLASS_PERF_EVENT, 6858 requested, NULL); 6859 } 6860 6861 static int selinux_perf_event_alloc(struct perf_event *event) 6862 { 6863 struct perf_event_security_struct *perfsec; 6864 6865 perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL); 6866 if (!perfsec) 6867 return -ENOMEM; 6868 6869 perfsec->sid = current_sid(); 6870 event->security = perfsec; 6871 6872 return 0; 6873 } 6874 6875 static void selinux_perf_event_free(struct perf_event *event) 6876 { 6877 struct perf_event_security_struct *perfsec = event->security; 6878 6879 event->security = NULL; 6880 kfree(perfsec); 6881 } 6882 6883 static int selinux_perf_event_read(struct perf_event *event) 6884 { 6885 struct perf_event_security_struct *perfsec = event->security; 6886 u32 sid = current_sid(); 6887 6888 return avc_has_perm(sid, perfsec->sid, 6889 SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL); 6890 } 6891 6892 static int selinux_perf_event_write(struct perf_event *event) 6893 { 6894 struct perf_event_security_struct *perfsec = event->security; 6895 u32 sid = current_sid(); 6896 6897 return avc_has_perm(sid, perfsec->sid, 6898 SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL); 6899 } 6900 #endif 6901 6902 #ifdef CONFIG_IO_URING 6903 /** 6904 * selinux_uring_override_creds - check the requested cred override 6905 * @new: the target creds 6906 * 6907 * Check to see if the current task is allowed to override it's credentials 6908 * to service an io_uring operation. 6909 */ 6910 static int selinux_uring_override_creds(const struct cred *new) 6911 { 6912 return avc_has_perm(current_sid(), cred_sid(new), 6913 SECCLASS_IO_URING, IO_URING__OVERRIDE_CREDS, NULL); 6914 } 6915 6916 /** 6917 * selinux_uring_sqpoll - check if a io_uring polling thread can be created 6918 * 6919 * Check to see if the current task is allowed to create a new io_uring 6920 * kernel polling thread. 6921 */ 6922 static int selinux_uring_sqpoll(void) 6923 { 6924 int sid = current_sid(); 6925 6926 return avc_has_perm(sid, sid, 6927 SECCLASS_IO_URING, IO_URING__SQPOLL, NULL); 6928 } 6929 6930 /** 6931 * selinux_uring_cmd - check if IORING_OP_URING_CMD is allowed 6932 * @ioucmd: the io_uring command structure 6933 * 6934 * Check to see if the current domain is allowed to execute an 6935 * IORING_OP_URING_CMD against the device/file specified in @ioucmd. 6936 * 6937 */ 6938 static int selinux_uring_cmd(struct io_uring_cmd *ioucmd) 6939 { 6940 struct file *file = ioucmd->file; 6941 struct inode *inode = file_inode(file); 6942 struct inode_security_struct *isec = selinux_inode(inode); 6943 struct common_audit_data ad; 6944 6945 ad.type = LSM_AUDIT_DATA_FILE; 6946 ad.u.file = file; 6947 6948 return avc_has_perm(current_sid(), isec->sid, 6949 SECCLASS_IO_URING, IO_URING__CMD, &ad); 6950 } 6951 #endif /* CONFIG_IO_URING */ 6952 6953 /* 6954 * IMPORTANT NOTE: When adding new hooks, please be careful to keep this order: 6955 * 1. any hooks that don't belong to (2.) or (3.) below, 6956 * 2. hooks that both access structures allocated by other hooks, and allocate 6957 * structures that can be later accessed by other hooks (mostly "cloning" 6958 * hooks), 6959 * 3. hooks that only allocate structures that can be later accessed by other 6960 * hooks ("allocating" hooks). 6961 * 6962 * Please follow block comment delimiters in the list to keep this order. 6963 * 6964 * This ordering is needed for SELinux runtime disable to work at least somewhat 6965 * safely. Breaking the ordering rules above might lead to NULL pointer derefs 6966 * when disabling SELinux at runtime. 6967 */ 6968 static struct security_hook_list selinux_hooks[] __ro_after_init = { 6969 LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr), 6970 LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction), 6971 LSM_HOOK_INIT(binder_transfer_binder, selinux_binder_transfer_binder), 6972 LSM_HOOK_INIT(binder_transfer_file, selinux_binder_transfer_file), 6973 6974 LSM_HOOK_INIT(ptrace_access_check, selinux_ptrace_access_check), 6975 LSM_HOOK_INIT(ptrace_traceme, selinux_ptrace_traceme), 6976 LSM_HOOK_INIT(capget, selinux_capget), 6977 LSM_HOOK_INIT(capset, selinux_capset), 6978 LSM_HOOK_INIT(capable, selinux_capable), 6979 LSM_HOOK_INIT(quotactl, selinux_quotactl), 6980 LSM_HOOK_INIT(quota_on, selinux_quota_on), 6981 LSM_HOOK_INIT(syslog, selinux_syslog), 6982 LSM_HOOK_INIT(vm_enough_memory, selinux_vm_enough_memory), 6983 6984 LSM_HOOK_INIT(netlink_send, selinux_netlink_send), 6985 6986 LSM_HOOK_INIT(bprm_creds_for_exec, selinux_bprm_creds_for_exec), 6987 LSM_HOOK_INIT(bprm_committing_creds, selinux_bprm_committing_creds), 6988 LSM_HOOK_INIT(bprm_committed_creds, selinux_bprm_committed_creds), 6989 6990 LSM_HOOK_INIT(sb_free_mnt_opts, selinux_free_mnt_opts), 6991 LSM_HOOK_INIT(sb_mnt_opts_compat, selinux_sb_mnt_opts_compat), 6992 LSM_HOOK_INIT(sb_remount, selinux_sb_remount), 6993 LSM_HOOK_INIT(sb_kern_mount, selinux_sb_kern_mount), 6994 LSM_HOOK_INIT(sb_show_options, selinux_sb_show_options), 6995 LSM_HOOK_INIT(sb_statfs, selinux_sb_statfs), 6996 LSM_HOOK_INIT(sb_mount, selinux_mount), 6997 LSM_HOOK_INIT(sb_umount, selinux_umount), 6998 LSM_HOOK_INIT(sb_set_mnt_opts, selinux_set_mnt_opts), 6999 LSM_HOOK_INIT(sb_clone_mnt_opts, selinux_sb_clone_mnt_opts), 7000 7001 LSM_HOOK_INIT(move_mount, selinux_move_mount), 7002 7003 LSM_HOOK_INIT(dentry_init_security, selinux_dentry_init_security), 7004 LSM_HOOK_INIT(dentry_create_files_as, selinux_dentry_create_files_as), 7005 7006 LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security), 7007 LSM_HOOK_INIT(inode_init_security, selinux_inode_init_security), 7008 LSM_HOOK_INIT(inode_init_security_anon, selinux_inode_init_security_anon), 7009 LSM_HOOK_INIT(inode_create, selinux_inode_create), 7010 LSM_HOOK_INIT(inode_link, selinux_inode_link), 7011 LSM_HOOK_INIT(inode_unlink, selinux_inode_unlink), 7012 LSM_HOOK_INIT(inode_symlink, selinux_inode_symlink), 7013 LSM_HOOK_INIT(inode_mkdir, selinux_inode_mkdir), 7014 LSM_HOOK_INIT(inode_rmdir, selinux_inode_rmdir), 7015 LSM_HOOK_INIT(inode_mknod, selinux_inode_mknod), 7016 LSM_HOOK_INIT(inode_rename, selinux_inode_rename), 7017 LSM_HOOK_INIT(inode_readlink, selinux_inode_readlink), 7018 LSM_HOOK_INIT(inode_follow_link, selinux_inode_follow_link), 7019 LSM_HOOK_INIT(inode_permission, selinux_inode_permission), 7020 LSM_HOOK_INIT(inode_setattr, selinux_inode_setattr), 7021 LSM_HOOK_INIT(inode_getattr, selinux_inode_getattr), 7022 LSM_HOOK_INIT(inode_setxattr, selinux_inode_setxattr), 7023 LSM_HOOK_INIT(inode_post_setxattr, selinux_inode_post_setxattr), 7024 LSM_HOOK_INIT(inode_getxattr, selinux_inode_getxattr), 7025 LSM_HOOK_INIT(inode_listxattr, selinux_inode_listxattr), 7026 LSM_HOOK_INIT(inode_removexattr, selinux_inode_removexattr), 7027 LSM_HOOK_INIT(inode_set_acl, selinux_inode_set_acl), 7028 LSM_HOOK_INIT(inode_get_acl, selinux_inode_get_acl), 7029 LSM_HOOK_INIT(inode_remove_acl, selinux_inode_remove_acl), 7030 LSM_HOOK_INIT(inode_getsecurity, selinux_inode_getsecurity), 7031 LSM_HOOK_INIT(inode_setsecurity, selinux_inode_setsecurity), 7032 LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity), 7033 LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid), 7034 LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up), 7035 LSM_HOOK_INIT(inode_copy_up_xattr, selinux_inode_copy_up_xattr), 7036 LSM_HOOK_INIT(path_notify, selinux_path_notify), 7037 7038 LSM_HOOK_INIT(kernfs_init_security, selinux_kernfs_init_security), 7039 7040 LSM_HOOK_INIT(file_permission, selinux_file_permission), 7041 LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security), 7042 LSM_HOOK_INIT(file_ioctl, selinux_file_ioctl), 7043 LSM_HOOK_INIT(mmap_file, selinux_mmap_file), 7044 LSM_HOOK_INIT(mmap_addr, selinux_mmap_addr), 7045 LSM_HOOK_INIT(file_mprotect, selinux_file_mprotect), 7046 LSM_HOOK_INIT(file_lock, selinux_file_lock), 7047 LSM_HOOK_INIT(file_fcntl, selinux_file_fcntl), 7048 LSM_HOOK_INIT(file_set_fowner, selinux_file_set_fowner), 7049 LSM_HOOK_INIT(file_send_sigiotask, selinux_file_send_sigiotask), 7050 LSM_HOOK_INIT(file_receive, selinux_file_receive), 7051 7052 LSM_HOOK_INIT(file_open, selinux_file_open), 7053 7054 LSM_HOOK_INIT(task_alloc, selinux_task_alloc), 7055 LSM_HOOK_INIT(cred_prepare, selinux_cred_prepare), 7056 LSM_HOOK_INIT(cred_transfer, selinux_cred_transfer), 7057 LSM_HOOK_INIT(cred_getsecid, selinux_cred_getsecid), 7058 LSM_HOOK_INIT(kernel_act_as, selinux_kernel_act_as), 7059 LSM_HOOK_INIT(kernel_create_files_as, selinux_kernel_create_files_as), 7060 LSM_HOOK_INIT(kernel_module_request, selinux_kernel_module_request), 7061 LSM_HOOK_INIT(kernel_load_data, selinux_kernel_load_data), 7062 LSM_HOOK_INIT(kernel_read_file, selinux_kernel_read_file), 7063 LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid), 7064 LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid), 7065 LSM_HOOK_INIT(task_getsid, selinux_task_getsid), 7066 LSM_HOOK_INIT(current_getsecid_subj, selinux_current_getsecid_subj), 7067 LSM_HOOK_INIT(task_getsecid_obj, selinux_task_getsecid_obj), 7068 LSM_HOOK_INIT(task_setnice, selinux_task_setnice), 7069 LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio), 7070 LSM_HOOK_INIT(task_getioprio, selinux_task_getioprio), 7071 LSM_HOOK_INIT(task_prlimit, selinux_task_prlimit), 7072 LSM_HOOK_INIT(task_setrlimit, selinux_task_setrlimit), 7073 LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler), 7074 LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler), 7075 LSM_HOOK_INIT(task_movememory, selinux_task_movememory), 7076 LSM_HOOK_INIT(task_kill, selinux_task_kill), 7077 LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode), 7078 LSM_HOOK_INIT(userns_create, selinux_userns_create), 7079 7080 LSM_HOOK_INIT(ipc_permission, selinux_ipc_permission), 7081 LSM_HOOK_INIT(ipc_getsecid, selinux_ipc_getsecid), 7082 7083 LSM_HOOK_INIT(msg_queue_associate, selinux_msg_queue_associate), 7084 LSM_HOOK_INIT(msg_queue_msgctl, selinux_msg_queue_msgctl), 7085 LSM_HOOK_INIT(msg_queue_msgsnd, selinux_msg_queue_msgsnd), 7086 LSM_HOOK_INIT(msg_queue_msgrcv, selinux_msg_queue_msgrcv), 7087 7088 LSM_HOOK_INIT(shm_associate, selinux_shm_associate), 7089 LSM_HOOK_INIT(shm_shmctl, selinux_shm_shmctl), 7090 LSM_HOOK_INIT(shm_shmat, selinux_shm_shmat), 7091 7092 LSM_HOOK_INIT(sem_associate, selinux_sem_associate), 7093 LSM_HOOK_INIT(sem_semctl, selinux_sem_semctl), 7094 LSM_HOOK_INIT(sem_semop, selinux_sem_semop), 7095 7096 LSM_HOOK_INIT(d_instantiate, selinux_d_instantiate), 7097 7098 LSM_HOOK_INIT(getprocattr, selinux_getprocattr), 7099 LSM_HOOK_INIT(setprocattr, selinux_setprocattr), 7100 7101 LSM_HOOK_INIT(ismaclabel, selinux_ismaclabel), 7102 LSM_HOOK_INIT(secctx_to_secid, selinux_secctx_to_secid), 7103 LSM_HOOK_INIT(release_secctx, selinux_release_secctx), 7104 LSM_HOOK_INIT(inode_invalidate_secctx, selinux_inode_invalidate_secctx), 7105 LSM_HOOK_INIT(inode_notifysecctx, selinux_inode_notifysecctx), 7106 LSM_HOOK_INIT(inode_setsecctx, selinux_inode_setsecctx), 7107 7108 LSM_HOOK_INIT(unix_stream_connect, selinux_socket_unix_stream_connect), 7109 LSM_HOOK_INIT(unix_may_send, selinux_socket_unix_may_send), 7110 7111 LSM_HOOK_INIT(socket_create, selinux_socket_create), 7112 LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create), 7113 LSM_HOOK_INIT(socket_socketpair, selinux_socket_socketpair), 7114 LSM_HOOK_INIT(socket_bind, selinux_socket_bind), 7115 LSM_HOOK_INIT(socket_connect, selinux_socket_connect), 7116 LSM_HOOK_INIT(socket_listen, selinux_socket_listen), 7117 LSM_HOOK_INIT(socket_accept, selinux_socket_accept), 7118 LSM_HOOK_INIT(socket_sendmsg, selinux_socket_sendmsg), 7119 LSM_HOOK_INIT(socket_recvmsg, selinux_socket_recvmsg), 7120 LSM_HOOK_INIT(socket_getsockname, selinux_socket_getsockname), 7121 LSM_HOOK_INIT(socket_getpeername, selinux_socket_getpeername), 7122 LSM_HOOK_INIT(socket_getsockopt, selinux_socket_getsockopt), 7123 LSM_HOOK_INIT(socket_setsockopt, selinux_socket_setsockopt), 7124 LSM_HOOK_INIT(socket_shutdown, selinux_socket_shutdown), 7125 LSM_HOOK_INIT(socket_sock_rcv_skb, selinux_socket_sock_rcv_skb), 7126 LSM_HOOK_INIT(socket_getpeersec_stream, 7127 selinux_socket_getpeersec_stream), 7128 LSM_HOOK_INIT(socket_getpeersec_dgram, selinux_socket_getpeersec_dgram), 7129 LSM_HOOK_INIT(sk_free_security, selinux_sk_free_security), 7130 LSM_HOOK_INIT(sk_clone_security, selinux_sk_clone_security), 7131 LSM_HOOK_INIT(sk_getsecid, selinux_sk_getsecid), 7132 LSM_HOOK_INIT(sock_graft, selinux_sock_graft), 7133 LSM_HOOK_INIT(sctp_assoc_request, selinux_sctp_assoc_request), 7134 LSM_HOOK_INIT(sctp_sk_clone, selinux_sctp_sk_clone), 7135 LSM_HOOK_INIT(sctp_bind_connect, selinux_sctp_bind_connect), 7136 LSM_HOOK_INIT(sctp_assoc_established, selinux_sctp_assoc_established), 7137 LSM_HOOK_INIT(mptcp_add_subflow, selinux_mptcp_add_subflow), 7138 LSM_HOOK_INIT(inet_conn_request, selinux_inet_conn_request), 7139 LSM_HOOK_INIT(inet_csk_clone, selinux_inet_csk_clone), 7140 LSM_HOOK_INIT(inet_conn_established, selinux_inet_conn_established), 7141 LSM_HOOK_INIT(secmark_relabel_packet, selinux_secmark_relabel_packet), 7142 LSM_HOOK_INIT(secmark_refcount_inc, selinux_secmark_refcount_inc), 7143 LSM_HOOK_INIT(secmark_refcount_dec, selinux_secmark_refcount_dec), 7144 LSM_HOOK_INIT(req_classify_flow, selinux_req_classify_flow), 7145 LSM_HOOK_INIT(tun_dev_free_security, selinux_tun_dev_free_security), 7146 LSM_HOOK_INIT(tun_dev_create, selinux_tun_dev_create), 7147 LSM_HOOK_INIT(tun_dev_attach_queue, selinux_tun_dev_attach_queue), 7148 LSM_HOOK_INIT(tun_dev_attach, selinux_tun_dev_attach), 7149 LSM_HOOK_INIT(tun_dev_open, selinux_tun_dev_open), 7150 #ifdef CONFIG_SECURITY_INFINIBAND 7151 LSM_HOOK_INIT(ib_pkey_access, selinux_ib_pkey_access), 7152 LSM_HOOK_INIT(ib_endport_manage_subnet, 7153 selinux_ib_endport_manage_subnet), 7154 LSM_HOOK_INIT(ib_free_security, selinux_ib_free_security), 7155 #endif 7156 #ifdef CONFIG_SECURITY_NETWORK_XFRM 7157 LSM_HOOK_INIT(xfrm_policy_free_security, selinux_xfrm_policy_free), 7158 LSM_HOOK_INIT(xfrm_policy_delete_security, selinux_xfrm_policy_delete), 7159 LSM_HOOK_INIT(xfrm_state_free_security, selinux_xfrm_state_free), 7160 LSM_HOOK_INIT(xfrm_state_delete_security, selinux_xfrm_state_delete), 7161 LSM_HOOK_INIT(xfrm_policy_lookup, selinux_xfrm_policy_lookup), 7162 LSM_HOOK_INIT(xfrm_state_pol_flow_match, 7163 selinux_xfrm_state_pol_flow_match), 7164 LSM_HOOK_INIT(xfrm_decode_session, selinux_xfrm_decode_session), 7165 #endif 7166 7167 #ifdef CONFIG_KEYS 7168 LSM_HOOK_INIT(key_free, selinux_key_free), 7169 LSM_HOOK_INIT(key_permission, selinux_key_permission), 7170 LSM_HOOK_INIT(key_getsecurity, selinux_key_getsecurity), 7171 #ifdef CONFIG_KEY_NOTIFICATIONS 7172 LSM_HOOK_INIT(watch_key, selinux_watch_key), 7173 #endif 7174 #endif 7175 7176 #ifdef CONFIG_AUDIT 7177 LSM_HOOK_INIT(audit_rule_known, selinux_audit_rule_known), 7178 LSM_HOOK_INIT(audit_rule_match, selinux_audit_rule_match), 7179 LSM_HOOK_INIT(audit_rule_free, selinux_audit_rule_free), 7180 #endif 7181 7182 #ifdef CONFIG_BPF_SYSCALL 7183 LSM_HOOK_INIT(bpf, selinux_bpf), 7184 LSM_HOOK_INIT(bpf_map, selinux_bpf_map), 7185 LSM_HOOK_INIT(bpf_prog, selinux_bpf_prog), 7186 LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free), 7187 LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free), 7188 #endif 7189 7190 #ifdef CONFIG_PERF_EVENTS 7191 LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open), 7192 LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free), 7193 LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read), 7194 LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write), 7195 #endif 7196 7197 #ifdef CONFIG_IO_URING 7198 LSM_HOOK_INIT(uring_override_creds, selinux_uring_override_creds), 7199 LSM_HOOK_INIT(uring_sqpoll, selinux_uring_sqpoll), 7200 LSM_HOOK_INIT(uring_cmd, selinux_uring_cmd), 7201 #endif 7202 7203 /* 7204 * PUT "CLONING" (ACCESSING + ALLOCATING) HOOKS HERE 7205 */ 7206 LSM_HOOK_INIT(fs_context_submount, selinux_fs_context_submount), 7207 LSM_HOOK_INIT(fs_context_dup, selinux_fs_context_dup), 7208 LSM_HOOK_INIT(fs_context_parse_param, selinux_fs_context_parse_param), 7209 LSM_HOOK_INIT(sb_eat_lsm_opts, selinux_sb_eat_lsm_opts), 7210 #ifdef CONFIG_SECURITY_NETWORK_XFRM 7211 LSM_HOOK_INIT(xfrm_policy_clone_security, selinux_xfrm_policy_clone), 7212 #endif 7213 7214 /* 7215 * PUT "ALLOCATING" HOOKS HERE 7216 */ 7217 LSM_HOOK_INIT(msg_msg_alloc_security, selinux_msg_msg_alloc_security), 7218 LSM_HOOK_INIT(msg_queue_alloc_security, 7219 selinux_msg_queue_alloc_security), 7220 LSM_HOOK_INIT(shm_alloc_security, selinux_shm_alloc_security), 7221 LSM_HOOK_INIT(sb_alloc_security, selinux_sb_alloc_security), 7222 LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security), 7223 LSM_HOOK_INIT(sem_alloc_security, selinux_sem_alloc_security), 7224 LSM_HOOK_INIT(secid_to_secctx, selinux_secid_to_secctx), 7225 LSM_HOOK_INIT(inode_getsecctx, selinux_inode_getsecctx), 7226 LSM_HOOK_INIT(sk_alloc_security, selinux_sk_alloc_security), 7227 LSM_HOOK_INIT(tun_dev_alloc_security, selinux_tun_dev_alloc_security), 7228 #ifdef CONFIG_SECURITY_INFINIBAND 7229 LSM_HOOK_INIT(ib_alloc_security, selinux_ib_alloc_security), 7230 #endif 7231 #ifdef CONFIG_SECURITY_NETWORK_XFRM 7232 LSM_HOOK_INIT(xfrm_policy_alloc_security, selinux_xfrm_policy_alloc), 7233 LSM_HOOK_INIT(xfrm_state_alloc, selinux_xfrm_state_alloc), 7234 LSM_HOOK_INIT(xfrm_state_alloc_acquire, 7235 selinux_xfrm_state_alloc_acquire), 7236 #endif 7237 #ifdef CONFIG_KEYS 7238 LSM_HOOK_INIT(key_alloc, selinux_key_alloc), 7239 #endif 7240 #ifdef CONFIG_AUDIT 7241 LSM_HOOK_INIT(audit_rule_init, selinux_audit_rule_init), 7242 #endif 7243 #ifdef CONFIG_BPF_SYSCALL 7244 LSM_HOOK_INIT(bpf_map_alloc_security, selinux_bpf_map_alloc), 7245 LSM_HOOK_INIT(bpf_prog_alloc_security, selinux_bpf_prog_alloc), 7246 #endif 7247 #ifdef CONFIG_PERF_EVENTS 7248 LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc), 7249 #endif 7250 }; 7251 7252 static __init int selinux_init(void) 7253 { 7254 pr_info("SELinux: Initializing.\n"); 7255 7256 memset(&selinux_state, 0, sizeof(selinux_state)); 7257 enforcing_set(selinux_enforcing_boot); 7258 selinux_avc_init(); 7259 mutex_init(&selinux_state.status_lock); 7260 mutex_init(&selinux_state.policy_mutex); 7261 7262 /* Set the security state for the initial task. */ 7263 cred_init_security(); 7264 7265 default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC); 7266 7267 avc_init(); 7268 7269 avtab_cache_init(); 7270 7271 ebitmap_cache_init(); 7272 7273 hashtab_cache_init(); 7274 7275 security_add_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks), "selinux"); 7276 7277 if (avc_add_callback(selinux_netcache_avc_callback, AVC_CALLBACK_RESET)) 7278 panic("SELinux: Unable to register AVC netcache callback\n"); 7279 7280 if (avc_add_callback(selinux_lsm_notifier_avc_callback, AVC_CALLBACK_RESET)) 7281 panic("SELinux: Unable to register AVC LSM notifier callback\n"); 7282 7283 if (selinux_enforcing_boot) 7284 pr_debug("SELinux: Starting in enforcing mode\n"); 7285 else 7286 pr_debug("SELinux: Starting in permissive mode\n"); 7287 7288 fs_validate_description("selinux", selinux_fs_parameters); 7289 7290 return 0; 7291 } 7292 7293 static void delayed_superblock_init(struct super_block *sb, void *unused) 7294 { 7295 selinux_set_mnt_opts(sb, NULL, 0, NULL); 7296 } 7297 7298 void selinux_complete_init(void) 7299 { 7300 pr_debug("SELinux: Completing initialization.\n"); 7301 7302 /* Set up any superblocks initialized prior to the policy load. */ 7303 pr_debug("SELinux: Setting up existing superblocks.\n"); 7304 iterate_supers(delayed_superblock_init, NULL); 7305 } 7306 7307 /* SELinux requires early initialization in order to label 7308 all processes and objects when they are created. */ 7309 DEFINE_LSM(selinux) = { 7310 .name = "selinux", 7311 .flags = LSM_FLAG_LEGACY_MAJOR | LSM_FLAG_EXCLUSIVE, 7312 .enabled = &selinux_enabled_boot, 7313 .blobs = &selinux_blob_sizes, 7314 .init = selinux_init, 7315 }; 7316 7317 #if defined(CONFIG_NETFILTER) 7318 static const struct nf_hook_ops selinux_nf_ops[] = { 7319 { 7320 .hook = selinux_ip_postroute, 7321 .pf = NFPROTO_IPV4, 7322 .hooknum = NF_INET_POST_ROUTING, 7323 .priority = NF_IP_PRI_SELINUX_LAST, 7324 }, 7325 { 7326 .hook = selinux_ip_forward, 7327 .pf = NFPROTO_IPV4, 7328 .hooknum = NF_INET_FORWARD, 7329 .priority = NF_IP_PRI_SELINUX_FIRST, 7330 }, 7331 { 7332 .hook = selinux_ip_output, 7333 .pf = NFPROTO_IPV4, 7334 .hooknum = NF_INET_LOCAL_OUT, 7335 .priority = NF_IP_PRI_SELINUX_FIRST, 7336 }, 7337 #if IS_ENABLED(CONFIG_IPV6) 7338 { 7339 .hook = selinux_ip_postroute, 7340 .pf = NFPROTO_IPV6, 7341 .hooknum = NF_INET_POST_ROUTING, 7342 .priority = NF_IP6_PRI_SELINUX_LAST, 7343 }, 7344 { 7345 .hook = selinux_ip_forward, 7346 .pf = NFPROTO_IPV6, 7347 .hooknum = NF_INET_FORWARD, 7348 .priority = NF_IP6_PRI_SELINUX_FIRST, 7349 }, 7350 { 7351 .hook = selinux_ip_output, 7352 .pf = NFPROTO_IPV6, 7353 .hooknum = NF_INET_LOCAL_OUT, 7354 .priority = NF_IP6_PRI_SELINUX_FIRST, 7355 }, 7356 #endif /* IPV6 */ 7357 }; 7358 7359 static int __net_init selinux_nf_register(struct net *net) 7360 { 7361 return nf_register_net_hooks(net, selinux_nf_ops, 7362 ARRAY_SIZE(selinux_nf_ops)); 7363 } 7364 7365 static void __net_exit selinux_nf_unregister(struct net *net) 7366 { 7367 nf_unregister_net_hooks(net, selinux_nf_ops, 7368 ARRAY_SIZE(selinux_nf_ops)); 7369 } 7370 7371 static struct pernet_operations selinux_net_ops = { 7372 .init = selinux_nf_register, 7373 .exit = selinux_nf_unregister, 7374 }; 7375 7376 static int __init selinux_nf_ip_init(void) 7377 { 7378 int err; 7379 7380 if (!selinux_enabled_boot) 7381 return 0; 7382 7383 pr_debug("SELinux: Registering netfilter hooks\n"); 7384 7385 err = register_pernet_subsys(&selinux_net_ops); 7386 if (err) 7387 panic("SELinux: register_pernet_subsys: error %d\n", err); 7388 7389 return 0; 7390 } 7391 __initcall(selinux_nf_ip_init); 7392 #endif /* CONFIG_NETFILTER */ 7393