1
2
3
4
5
6
7
8
9
10#include <linux/capability.h>
11#include <linux/audit.h>
12#include <linux/module.h>
13#include <linux/init.h>
14#include <linux/kernel.h>
15#include <linux/security.h>
16#include <linux/file.h>
17#include <linux/mm.h>
18#include <linux/mman.h>
19#include <linux/pagemap.h>
20#include <linux/swap.h>
21#include <linux/skbuff.h>
22#include <linux/netlink.h>
23#include <linux/ptrace.h>
24#include <linux/xattr.h>
25#include <linux/hugetlb.h>
26#include <linux/mount.h>
27#include <linux/sched.h>
28#include <linux/prctl.h>
29#include <linux/securebits.h>
30#include <linux/user_namespace.h>
31#include <linux/binfmts.h>
32#include <linux/personality.h>
33
34
35
36
37
38
39
40
41
42
43
44
45static void warn_setuid_and_fcaps_mixed(const char *fname)
46{
47 static int warned;
48 if (!warned) {
49 printk(KERN_INFO "warning: `%s' has both setuid-root and"
50 " effective capabilities. Therefore not raising all"
51 " capabilities.\n", fname);
52 warned = 1;
53 }
54}
55
56int cap_netlink_send(struct sock *sk, struct sk_buff *skb)
57{
58 return 0;
59}
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76int cap_capable(const struct cred *cred, struct user_namespace *targ_ns,
77 int cap, int audit)
78{
79 struct user_namespace *ns = targ_ns;
80
81
82
83
84
85 for (;;) {
86
87 if (ns == cred->user_ns)
88 return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM;
89
90
91 if (ns == &init_user_ns)
92 return -EPERM;
93
94
95
96
97
98 if ((ns->parent == cred->user_ns) && uid_eq(ns->owner, cred->euid))
99 return 0;
100
101
102
103
104
105 ns = ns->parent;
106 }
107
108
109}
110
111
112
113
114
115
116
117
118
119int cap_settime(const struct timespec *ts, const struct timezone *tz)
120{
121 if (!capable(CAP_SYS_TIME))
122 return -EPERM;
123 return 0;
124}
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141int cap_ptrace_access_check(struct task_struct *child, unsigned int mode)
142{
143 int ret = 0;
144 const struct cred *cred, *child_cred;
145
146 rcu_read_lock();
147 cred = current_cred();
148 child_cred = __task_cred(child);
149 if (cred->user_ns == child_cred->user_ns &&
150 cap_issubset(child_cred->cap_permitted, cred->cap_permitted))
151 goto out;
152 if (ns_capable(child_cred->user_ns, CAP_SYS_PTRACE))
153 goto out;
154 ret = -EPERM;
155out:
156 rcu_read_unlock();
157 return ret;
158}
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173int cap_ptrace_traceme(struct task_struct *parent)
174{
175 int ret = 0;
176 const struct cred *cred, *child_cred;
177
178 rcu_read_lock();
179 cred = __task_cred(parent);
180 child_cred = current_cred();
181 if (cred->user_ns == child_cred->user_ns &&
182 cap_issubset(child_cred->cap_permitted, cred->cap_permitted))
183 goto out;
184 if (has_ns_capability(parent, child_cred->user_ns, CAP_SYS_PTRACE))
185 goto out;
186 ret = -EPERM;
187out:
188 rcu_read_unlock();
189 return ret;
190}
191
192
193
194
195
196
197
198
199
200
201
202int cap_capget(struct task_struct *target, kernel_cap_t *effective,
203 kernel_cap_t *inheritable, kernel_cap_t *permitted)
204{
205 const struct cred *cred;
206
207
208 rcu_read_lock();
209 cred = __task_cred(target);
210 *effective = cred->cap_effective;
211 *inheritable = cred->cap_inheritable;
212 *permitted = cred->cap_permitted;
213 rcu_read_unlock();
214 return 0;
215}
216
217
218
219
220
221static inline int cap_inh_is_capped(void)
222{
223
224
225
226
227 if (cap_capable(current_cred(), current_cred()->user_ns,
228 CAP_SETPCAP, SECURITY_CAP_AUDIT) == 0)
229 return 0;
230 return 1;
231}
232
233
234
235
236
237
238
239
240
241
242
243
244
245int cap_capset(struct cred *new,
246 const struct cred *old,
247 const kernel_cap_t *effective,
248 const kernel_cap_t *inheritable,
249 const kernel_cap_t *permitted)
250{
251 if (cap_inh_is_capped() &&
252 !cap_issubset(*inheritable,
253 cap_combine(old->cap_inheritable,
254 old->cap_permitted)))
255
256 return -EPERM;
257
258 if (!cap_issubset(*inheritable,
259 cap_combine(old->cap_inheritable,
260 old->cap_bset)))
261
262 return -EPERM;
263
264
265 if (!cap_issubset(*permitted, old->cap_permitted))
266 return -EPERM;
267
268
269 if (!cap_issubset(*effective, *permitted))
270 return -EPERM;
271
272 new->cap_effective = *effective;
273 new->cap_inheritable = *inheritable;
274 new->cap_permitted = *permitted;
275 return 0;
276}
277
278
279
280
281static inline void bprm_clear_caps(struct linux_binprm *bprm)
282{
283 cap_clear(bprm->cred->cap_permitted);
284 bprm->cap_effective = false;
285}
286
287
288
289
290
291
292
293
294
295
296
297
298int cap_inode_need_killpriv(struct dentry *dentry)
299{
300 struct inode *inode = dentry->d_inode;
301 int error;
302
303 if (!inode->i_op->getxattr)
304 return 0;
305
306 error = inode->i_op->getxattr(dentry, XATTR_NAME_CAPS, NULL, 0);
307 if (error <= 0)
308 return 0;
309 return 1;
310}
311
312
313
314
315
316
317
318
319
320int cap_inode_killpriv(struct dentry *dentry)
321{
322 struct inode *inode = dentry->d_inode;
323
324 if (!inode->i_op->removexattr)
325 return 0;
326
327 return inode->i_op->removexattr(dentry, XATTR_NAME_CAPS);
328}
329
330
331
332
333
334static inline int bprm_caps_from_vfs_caps(struct cpu_vfs_cap_data *caps,
335 struct linux_binprm *bprm,
336 bool *effective,
337 bool *has_cap)
338{
339 struct cred *new = bprm->cred;
340 unsigned i;
341 int ret = 0;
342
343 if (caps->magic_etc & VFS_CAP_FLAGS_EFFECTIVE)
344 *effective = true;
345
346 if (caps->magic_etc & VFS_CAP_REVISION_MASK)
347 *has_cap = true;
348
349 CAP_FOR_EACH_U32(i) {
350 __u32 permitted = caps->permitted.cap[i];
351 __u32 inheritable = caps->inheritable.cap[i];
352
353
354
355
356 new->cap_permitted.cap[i] =
357 (new->cap_bset.cap[i] & permitted) |
358 (new->cap_inheritable.cap[i] & inheritable);
359
360 if (permitted & ~new->cap_permitted.cap[i])
361
362 ret = -EPERM;
363 }
364
365
366
367
368
369
370 return *effective ? ret : 0;
371}
372
373
374
375
376int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps)
377{
378 struct inode *inode = dentry->d_inode;
379 __u32 magic_etc;
380 unsigned tocopy, i;
381 int size;
382 struct vfs_cap_data caps;
383
384 memset(cpu_caps, 0, sizeof(struct cpu_vfs_cap_data));
385
386 if (!inode || !inode->i_op->getxattr)
387 return -ENODATA;
388
389 size = inode->i_op->getxattr((struct dentry *)dentry, XATTR_NAME_CAPS, &caps,
390 XATTR_CAPS_SZ);
391 if (size == -ENODATA || size == -EOPNOTSUPP)
392
393 return -ENODATA;
394 if (size < 0)
395 return size;
396
397 if (size < sizeof(magic_etc))
398 return -EINVAL;
399
400 cpu_caps->magic_etc = magic_etc = le32_to_cpu(caps.magic_etc);
401
402 switch (magic_etc & VFS_CAP_REVISION_MASK) {
403 case VFS_CAP_REVISION_1:
404 if (size != XATTR_CAPS_SZ_1)
405 return -EINVAL;
406 tocopy = VFS_CAP_U32_1;
407 break;
408 case VFS_CAP_REVISION_2:
409 if (size != XATTR_CAPS_SZ_2)
410 return -EINVAL;
411 tocopy = VFS_CAP_U32_2;
412 break;
413 default:
414 return -EINVAL;
415 }
416
417 CAP_FOR_EACH_U32(i) {
418 if (i >= tocopy)
419 break;
420 cpu_caps->permitted.cap[i] = le32_to_cpu(caps.data[i].permitted);
421 cpu_caps->inheritable.cap[i] = le32_to_cpu(caps.data[i].inheritable);
422 }
423
424 cpu_caps->permitted.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
425 cpu_caps->inheritable.cap[CAP_LAST_U32] &= CAP_LAST_U32_VALID_MASK;
426
427 return 0;
428}
429
430
431
432
433
434
435static int get_file_caps(struct linux_binprm *bprm, bool *effective, bool *has_cap)
436{
437 struct dentry *dentry;
438 int rc = 0;
439 struct cpu_vfs_cap_data vcaps;
440
441 bprm_clear_caps(bprm);
442
443 if (!file_caps_enabled)
444 return 0;
445
446 if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)
447 return 0;
448
449 dentry = dget(bprm->file->f_path.dentry);
450
451 rc = get_vfs_caps_from_disk(dentry, &vcaps);
452 if (rc < 0) {
453 if (rc == -EINVAL)
454 printk(KERN_NOTICE "%s: get_vfs_caps_from_disk returned %d for %s\n",
455 __func__, rc, bprm->filename);
456 else if (rc == -ENODATA)
457 rc = 0;
458 goto out;
459 }
460
461 rc = bprm_caps_from_vfs_caps(&vcaps, bprm, effective, has_cap);
462 if (rc == -EINVAL)
463 printk(KERN_NOTICE "%s: cap_from_disk returned %d for %s\n",
464 __func__, rc, bprm->filename);
465
466out:
467 dput(dentry);
468 if (rc)
469 bprm_clear_caps(bprm);
470
471 return rc;
472}
473
474
475
476
477
478
479
480
481
482int cap_bprm_set_creds(struct linux_binprm *bprm)
483{
484 const struct cred *old = current_cred();
485 struct cred *new = bprm->cred;
486 bool effective, has_cap = false;
487 int ret;
488 kuid_t root_uid;
489
490 effective = false;
491 ret = get_file_caps(bprm, &effective, &has_cap);
492 if (ret < 0)
493 return ret;
494
495 root_uid = make_kuid(new->user_ns, 0);
496
497 if (!issecure(SECURE_NOROOT)) {
498
499
500
501
502
503 if (has_cap && !uid_eq(new->uid, root_uid) && uid_eq(new->euid, root_uid)) {
504 warn_setuid_and_fcaps_mixed(bprm->filename);
505 goto skip;
506 }
507
508
509
510
511
512
513
514 if (uid_eq(new->euid, root_uid) || uid_eq(new->uid, root_uid)) {
515
516 new->cap_permitted = cap_combine(old->cap_bset,
517 old->cap_inheritable);
518 }
519 if (uid_eq(new->euid, root_uid))
520 effective = true;
521 }
522skip:
523
524
525 if (!cap_issubset(new->cap_permitted, old->cap_permitted))
526 bprm->per_clear |= PER_CLEAR_ON_SETID;
527
528
529
530
531
532
533
534 if ((!uid_eq(new->euid, old->uid) ||
535 !gid_eq(new->egid, old->gid) ||
536 !cap_issubset(new->cap_permitted, old->cap_permitted)) &&
537 bprm->unsafe & ~LSM_UNSAFE_PTRACE_CAP) {
538
539 if (!capable(CAP_SETUID) ||
540 (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS)) {
541 new->euid = new->uid;
542 new->egid = new->gid;
543 }
544 new->cap_permitted = cap_intersect(new->cap_permitted,
545 old->cap_permitted);
546 }
547
548 new->suid = new->fsuid = new->euid;
549 new->sgid = new->fsgid = new->egid;
550
551 if (effective)
552 new->cap_effective = new->cap_permitted;
553 else
554 cap_clear(new->cap_effective);
555 bprm->cap_effective = effective;
556
557
558
559
560
561
562
563
564
565
566
567
568
569 if (!cap_isclear(new->cap_effective)) {
570 if (!cap_issubset(CAP_FULL_SET, new->cap_effective) ||
571 !uid_eq(new->euid, root_uid) || !uid_eq(new->uid, root_uid) ||
572 issecure(SECURE_NOROOT)) {
573 ret = audit_log_bprm_fcaps(bprm, new, old);
574 if (ret < 0)
575 return ret;
576 }
577 }
578
579 new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS);
580 return 0;
581}
582
583
584
585
586
587
588
589
590
591
592
593int cap_bprm_secureexec(struct linux_binprm *bprm)
594{
595 const struct cred *cred = current_cred();
596 kuid_t root_uid = make_kuid(cred->user_ns, 0);
597
598 if (!uid_eq(cred->uid, root_uid)) {
599 if (bprm->cap_effective)
600 return 1;
601 if (!cap_isclear(cred->cap_permitted))
602 return 1;
603 }
604
605 return (!uid_eq(cred->euid, cred->uid) ||
606 !gid_eq(cred->egid, cred->gid));
607}
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623int cap_inode_setxattr(struct dentry *dentry, const char *name,
624 const void *value, size_t size, int flags)
625{
626 if (!strcmp(name, XATTR_NAME_CAPS)) {
627 if (!capable(CAP_SETFCAP))
628 return -EPERM;
629 return 0;
630 }
631
632 if (!strncmp(name, XATTR_SECURITY_PREFIX,
633 sizeof(XATTR_SECURITY_PREFIX) - 1) &&
634 !capable(CAP_SYS_ADMIN))
635 return -EPERM;
636 return 0;
637}
638
639
640
641
642
643
644
645
646
647
648
649
650int cap_inode_removexattr(struct dentry *dentry, const char *name)
651{
652 if (!strcmp(name, XATTR_NAME_CAPS)) {
653 if (!capable(CAP_SETFCAP))
654 return -EPERM;
655 return 0;
656 }
657
658 if (!strncmp(name, XATTR_SECURITY_PREFIX,
659 sizeof(XATTR_SECURITY_PREFIX) - 1) &&
660 !capable(CAP_SYS_ADMIN))
661 return -EPERM;
662 return 0;
663}
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694static inline void cap_emulate_setxuid(struct cred *new, const struct cred *old)
695{
696 kuid_t root_uid = make_kuid(old->user_ns, 0);
697
698 if ((uid_eq(old->uid, root_uid) ||
699 uid_eq(old->euid, root_uid) ||
700 uid_eq(old->suid, root_uid)) &&
701 (!uid_eq(new->uid, root_uid) &&
702 !uid_eq(new->euid, root_uid) &&
703 !uid_eq(new->suid, root_uid)) &&
704 !issecure(SECURE_KEEP_CAPS)) {
705 cap_clear(new->cap_permitted);
706 cap_clear(new->cap_effective);
707 }
708 if (uid_eq(old->euid, root_uid) && !uid_eq(new->euid, root_uid))
709 cap_clear(new->cap_effective);
710 if (!uid_eq(old->euid, root_uid) && uid_eq(new->euid, root_uid))
711 new->cap_effective = new->cap_permitted;
712}
713
714
715
716
717
718
719
720
721
722
723int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags)
724{
725 switch (flags) {
726 case LSM_SETID_RE:
727 case LSM_SETID_ID:
728 case LSM_SETID_RES:
729
730
731 if (!issecure(SECURE_NO_SETUID_FIXUP))
732 cap_emulate_setxuid(new, old);
733 break;
734
735 case LSM_SETID_FS:
736
737
738
739
740
741
742 if (!issecure(SECURE_NO_SETUID_FIXUP)) {
743 kuid_t root_uid = make_kuid(old->user_ns, 0);
744 if (uid_eq(old->fsuid, root_uid) && !uid_eq(new->fsuid, root_uid))
745 new->cap_effective =
746 cap_drop_fs_set(new->cap_effective);
747
748 if (!uid_eq(old->fsuid, root_uid) && uid_eq(new->fsuid, root_uid))
749 new->cap_effective =
750 cap_raise_fs_set(new->cap_effective,
751 new->cap_permitted);
752 }
753 break;
754
755 default:
756 return -EINVAL;
757 }
758
759 return 0;
760}
761
762
763
764
765
766
767
768
769
770
771
772static int cap_safe_nice(struct task_struct *p)
773{
774 int is_subset, ret = 0;
775
776 rcu_read_lock();
777 is_subset = cap_issubset(__task_cred(p)->cap_permitted,
778 current_cred()->cap_permitted);
779 if (!is_subset && !ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE))
780 ret = -EPERM;
781 rcu_read_unlock();
782
783 return ret;
784}
785
786
787
788
789
790
791
792
793int cap_task_setscheduler(struct task_struct *p)
794{
795 return cap_safe_nice(p);
796}
797
798
799
800
801
802
803
804
805
806int cap_task_setioprio(struct task_struct *p, int ioprio)
807{
808 return cap_safe_nice(p);
809}
810
811
812
813
814
815
816
817
818
819int cap_task_setnice(struct task_struct *p, int nice)
820{
821 return cap_safe_nice(p);
822}
823
824
825
826
827
828static int cap_prctl_drop(unsigned long cap)
829{
830 struct cred *new;
831
832 if (!ns_capable(current_user_ns(), CAP_SETPCAP))
833 return -EPERM;
834 if (!cap_valid(cap))
835 return -EINVAL;
836
837 new = prepare_creds();
838 if (!new)
839 return -ENOMEM;
840 cap_lower(new->cap_bset, cap);
841 return commit_creds(new);
842}
843
844
845
846
847
848
849
850
851
852
853
854
855
856int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
857 unsigned long arg4, unsigned long arg5)
858{
859 const struct cred *old = current_cred();
860 struct cred *new;
861
862 switch (option) {
863 case PR_CAPBSET_READ:
864 if (!cap_valid(arg2))
865 return -EINVAL;
866 return !!cap_raised(old->cap_bset, arg2);
867
868 case PR_CAPBSET_DROP:
869 return cap_prctl_drop(arg2);
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890 case PR_SET_SECUREBITS:
891 if ((((old->securebits & SECURE_ALL_LOCKS) >> 1)
892 & (old->securebits ^ arg2))
893 || ((old->securebits & SECURE_ALL_LOCKS & ~arg2))
894 || (arg2 & ~(SECURE_ALL_LOCKS | SECURE_ALL_BITS))
895 || (cap_capable(current_cred(),
896 current_cred()->user_ns, CAP_SETPCAP,
897 SECURITY_CAP_AUDIT) != 0)
898
899
900
901
902
903
904
905 )
906
907 return -EPERM;
908
909 new = prepare_creds();
910 if (!new)
911 return -ENOMEM;
912 new->securebits = arg2;
913 return commit_creds(new);
914
915 case PR_GET_SECUREBITS:
916 return old->securebits;
917
918 case PR_GET_KEEPCAPS:
919 return !!issecure(SECURE_KEEP_CAPS);
920
921 case PR_SET_KEEPCAPS:
922 if (arg2 > 1)
923 return -EINVAL;
924 if (issecure(SECURE_KEEP_CAPS_LOCKED))
925 return -EPERM;
926
927 new = prepare_creds();
928 if (!new)
929 return -ENOMEM;
930 if (arg2)
931 new->securebits |= issecure_mask(SECURE_KEEP_CAPS);
932 else
933 new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS);
934 return commit_creds(new);
935
936 default:
937
938 return -ENOSYS;
939 }
940}
941
942
943
944
945
946
947
948
949
950int cap_vm_enough_memory(struct mm_struct *mm, long pages)
951{
952 int cap_sys_admin = 0;
953
954 if (cap_capable(current_cred(), &init_user_ns, CAP_SYS_ADMIN,
955 SECURITY_CAP_NOAUDIT) == 0)
956 cap_sys_admin = 1;
957 return __vm_enough_memory(mm, pages, cap_sys_admin);
958}
959
960
961
962
963
964
965
966
967
968
969int cap_mmap_addr(unsigned long addr)
970{
971 int ret = 0;
972
973 if (addr < dac_mmap_min_addr) {
974 ret = cap_capable(current_cred(), &init_user_ns, CAP_SYS_RAWIO,
975 SECURITY_CAP_AUDIT);
976
977 if (ret == 0)
978 current->flags |= PF_SUPERPRIV;
979 }
980 return ret;
981}
982
983int cap_mmap_file(struct file *file, unsigned long reqprot,
984 unsigned long prot, unsigned long flags)
985{
986 return 0;
987}
988