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