sys.c (bf550fc93d9855872a95e69e4002256110d89858) sys.c (c7b96acf1456ef127fef461fcfedb54b81fecfbb)
1/*
2 * linux/kernel/sys.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7#include <linux/export.h>
8#include <linux/mm.h>

--- 323 unchanged lines hidden (view full) ---

332 if (!new)
333 return -ENOMEM;
334 old = current_cred();
335
336 retval = -EPERM;
337 if (rgid != (gid_t) -1) {
338 if (gid_eq(old->gid, krgid) ||
339 gid_eq(old->egid, krgid) ||
1/*
2 * linux/kernel/sys.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7#include <linux/export.h>
8#include <linux/mm.h>

--- 323 unchanged lines hidden (view full) ---

332 if (!new)
333 return -ENOMEM;
334 old = current_cred();
335
336 retval = -EPERM;
337 if (rgid != (gid_t) -1) {
338 if (gid_eq(old->gid, krgid) ||
339 gid_eq(old->egid, krgid) ||
340 nsown_capable(CAP_SETGID))
340 ns_capable(old->user_ns, CAP_SETGID))
341 new->gid = krgid;
342 else
343 goto error;
344 }
345 if (egid != (gid_t) -1) {
346 if (gid_eq(old->gid, kegid) ||
347 gid_eq(old->egid, kegid) ||
348 gid_eq(old->sgid, kegid) ||
341 new->gid = krgid;
342 else
343 goto error;
344 }
345 if (egid != (gid_t) -1) {
346 if (gid_eq(old->gid, kegid) ||
347 gid_eq(old->egid, kegid) ||
348 gid_eq(old->sgid, kegid) ||
349 nsown_capable(CAP_SETGID))
349 ns_capable(old->user_ns, CAP_SETGID))
350 new->egid = kegid;
351 else
352 goto error;
353 }
354
355 if (rgid != (gid_t) -1 ||
356 (egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
357 new->sgid = new->egid;

--- 24 unchanged lines hidden (view full) ---

382 return -EINVAL;
383
384 new = prepare_creds();
385 if (!new)
386 return -ENOMEM;
387 old = current_cred();
388
389 retval = -EPERM;
350 new->egid = kegid;
351 else
352 goto error;
353 }
354
355 if (rgid != (gid_t) -1 ||
356 (egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
357 new->sgid = new->egid;

--- 24 unchanged lines hidden (view full) ---

382 return -EINVAL;
383
384 new = prepare_creds();
385 if (!new)
386 return -ENOMEM;
387 old = current_cred();
388
389 retval = -EPERM;
390 if (nsown_capable(CAP_SETGID))
390 if (ns_capable(old->user_ns, CAP_SETGID))
391 new->gid = new->egid = new->sgid = new->fsgid = kgid;
392 else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
393 new->egid = new->fsgid = kgid;
394 else
395 goto error;
396
397 return commit_creds(new);
398

--- 67 unchanged lines hidden (view full) ---

466 return -ENOMEM;
467 old = current_cred();
468
469 retval = -EPERM;
470 if (ruid != (uid_t) -1) {
471 new->uid = kruid;
472 if (!uid_eq(old->uid, kruid) &&
473 !uid_eq(old->euid, kruid) &&
391 new->gid = new->egid = new->sgid = new->fsgid = kgid;
392 else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
393 new->egid = new->fsgid = kgid;
394 else
395 goto error;
396
397 return commit_creds(new);
398

--- 67 unchanged lines hidden (view full) ---

466 return -ENOMEM;
467 old = current_cred();
468
469 retval = -EPERM;
470 if (ruid != (uid_t) -1) {
471 new->uid = kruid;
472 if (!uid_eq(old->uid, kruid) &&
473 !uid_eq(old->euid, kruid) &&
474 !nsown_capable(CAP_SETUID))
474 !ns_capable(old->user_ns, CAP_SETUID))
475 goto error;
476 }
477
478 if (euid != (uid_t) -1) {
479 new->euid = keuid;
480 if (!uid_eq(old->uid, keuid) &&
481 !uid_eq(old->euid, keuid) &&
482 !uid_eq(old->suid, keuid) &&
475 goto error;
476 }
477
478 if (euid != (uid_t) -1) {
479 new->euid = keuid;
480 if (!uid_eq(old->uid, keuid) &&
481 !uid_eq(old->euid, keuid) &&
482 !uid_eq(old->suid, keuid) &&
483 !nsown_capable(CAP_SETUID))
483 !ns_capable(old->user_ns, CAP_SETUID))
484 goto error;
485 }
486
487 if (!uid_eq(new->uid, old->uid)) {
488 retval = set_user(new);
489 if (retval < 0)
490 goto error;
491 }

--- 37 unchanged lines hidden (view full) ---

529 return -EINVAL;
530
531 new = prepare_creds();
532 if (!new)
533 return -ENOMEM;
534 old = current_cred();
535
536 retval = -EPERM;
484 goto error;
485 }
486
487 if (!uid_eq(new->uid, old->uid)) {
488 retval = set_user(new);
489 if (retval < 0)
490 goto error;
491 }

--- 37 unchanged lines hidden (view full) ---

529 return -EINVAL;
530
531 new = prepare_creds();
532 if (!new)
533 return -ENOMEM;
534 old = current_cred();
535
536 retval = -EPERM;
537 if (nsown_capable(CAP_SETUID)) {
537 if (ns_capable(old->user_ns, CAP_SETUID)) {
538 new->suid = new->uid = kuid;
539 if (!uid_eq(kuid, old->uid)) {
540 retval = set_user(new);
541 if (retval < 0)
542 goto error;
543 }
544 } else if (!uid_eq(kuid, old->uid) && !uid_eq(kuid, new->suid)) {
545 goto error;

--- 40 unchanged lines hidden (view full) ---

586
587 new = prepare_creds();
588 if (!new)
589 return -ENOMEM;
590
591 old = current_cred();
592
593 retval = -EPERM;
538 new->suid = new->uid = kuid;
539 if (!uid_eq(kuid, old->uid)) {
540 retval = set_user(new);
541 if (retval < 0)
542 goto error;
543 }
544 } else if (!uid_eq(kuid, old->uid) && !uid_eq(kuid, new->suid)) {
545 goto error;

--- 40 unchanged lines hidden (view full) ---

586
587 new = prepare_creds();
588 if (!new)
589 return -ENOMEM;
590
591 old = current_cred();
592
593 retval = -EPERM;
594 if (!nsown_capable(CAP_SETUID)) {
594 if (!ns_capable(old->user_ns, CAP_SETUID)) {
595 if (ruid != (uid_t) -1 && !uid_eq(kruid, old->uid) &&
596 !uid_eq(kruid, old->euid) && !uid_eq(kruid, old->suid))
597 goto error;
598 if (euid != (uid_t) -1 && !uid_eq(keuid, old->uid) &&
599 !uid_eq(keuid, old->euid) && !uid_eq(keuid, old->suid))
600 goto error;
601 if (suid != (uid_t) -1 && !uid_eq(ksuid, old->uid) &&
602 !uid_eq(ksuid, old->euid) && !uid_eq(ksuid, old->suid))

--- 65 unchanged lines hidden (view full) ---

668 return -EINVAL;
669
670 new = prepare_creds();
671 if (!new)
672 return -ENOMEM;
673 old = current_cred();
674
675 retval = -EPERM;
595 if (ruid != (uid_t) -1 && !uid_eq(kruid, old->uid) &&
596 !uid_eq(kruid, old->euid) && !uid_eq(kruid, old->suid))
597 goto error;
598 if (euid != (uid_t) -1 && !uid_eq(keuid, old->uid) &&
599 !uid_eq(keuid, old->euid) && !uid_eq(keuid, old->suid))
600 goto error;
601 if (suid != (uid_t) -1 && !uid_eq(ksuid, old->uid) &&
602 !uid_eq(ksuid, old->euid) && !uid_eq(ksuid, old->suid))

--- 65 unchanged lines hidden (view full) ---

668 return -EINVAL;
669
670 new = prepare_creds();
671 if (!new)
672 return -ENOMEM;
673 old = current_cred();
674
675 retval = -EPERM;
676 if (!nsown_capable(CAP_SETGID)) {
676 if (!ns_capable(old->user_ns, CAP_SETGID)) {
677 if (rgid != (gid_t) -1 && !gid_eq(krgid, old->gid) &&
678 !gid_eq(krgid, old->egid) && !gid_eq(krgid, old->sgid))
679 goto error;
680 if (egid != (gid_t) -1 && !gid_eq(kegid, old->gid) &&
681 !gid_eq(kegid, old->egid) && !gid_eq(kegid, old->sgid))
682 goto error;
683 if (sgid != (gid_t) -1 && !gid_eq(ksgid, old->gid) &&
684 !gid_eq(ksgid, old->egid) && !gid_eq(ksgid, old->sgid))

--- 54 unchanged lines hidden (view full) ---

739 return old_fsuid;
740
741 new = prepare_creds();
742 if (!new)
743 return old_fsuid;
744
745 if (uid_eq(kuid, old->uid) || uid_eq(kuid, old->euid) ||
746 uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
677 if (rgid != (gid_t) -1 && !gid_eq(krgid, old->gid) &&
678 !gid_eq(krgid, old->egid) && !gid_eq(krgid, old->sgid))
679 goto error;
680 if (egid != (gid_t) -1 && !gid_eq(kegid, old->gid) &&
681 !gid_eq(kegid, old->egid) && !gid_eq(kegid, old->sgid))
682 goto error;
683 if (sgid != (gid_t) -1 && !gid_eq(ksgid, old->gid) &&
684 !gid_eq(ksgid, old->egid) && !gid_eq(ksgid, old->sgid))

--- 54 unchanged lines hidden (view full) ---

739 return old_fsuid;
740
741 new = prepare_creds();
742 if (!new)
743 return old_fsuid;
744
745 if (uid_eq(kuid, old->uid) || uid_eq(kuid, old->euid) ||
746 uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
747 nsown_capable(CAP_SETUID)) {
747 ns_capable(old->user_ns, CAP_SETUID)) {
748 if (!uid_eq(kuid, old->fsuid)) {
749 new->fsuid = kuid;
750 if (security_task_fix_setuid(new, old, LSM_SETID_FS) == 0)
751 goto change_okay;
752 }
753 }
754
755 abort_creds(new);

--- 22 unchanged lines hidden (view full) ---

778 return old_fsgid;
779
780 new = prepare_creds();
781 if (!new)
782 return old_fsgid;
783
784 if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) ||
785 gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
748 if (!uid_eq(kuid, old->fsuid)) {
749 new->fsuid = kuid;
750 if (security_task_fix_setuid(new, old, LSM_SETID_FS) == 0)
751 goto change_okay;
752 }
753 }
754
755 abort_creds(new);

--- 22 unchanged lines hidden (view full) ---

778 return old_fsgid;
779
780 new = prepare_creds();
781 if (!new)
782 return old_fsgid;
783
784 if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) ||
785 gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
786 nsown_capable(CAP_SETGID)) {
786 ns_capable(old->user_ns, CAP_SETGID)) {
787 if (!gid_eq(kgid, old->fsgid)) {
788 new->fsgid = kgid;
789 goto change_okay;
790 }
791 }
792
793 abort_creds(new);
794 return old_fsgid;

--- 1369 unchanged lines hidden ---
787 if (!gid_eq(kgid, old->fsgid)) {
788 new->fsgid = kgid;
789 goto change_okay;
790 }
791 }
792
793 abort_creds(new);
794 return old_fsgid;

--- 1369 unchanged lines hidden ---