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 --- |