|
@@ -1036,7 +1036,7 @@ asmlinkage long sys_setregid(gid_t rgid, gid_t egid)
|
|
return -EPERM;
|
|
return -EPERM;
|
|
}
|
|
}
|
|
if (new_egid != old_egid) {
|
|
if (new_egid != old_egid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
if (rgid != (gid_t) -1 ||
|
|
if (rgid != (gid_t) -1 ||
|
|
@@ -1066,13 +1066,13 @@ asmlinkage long sys_setgid(gid_t gid)
|
|
|
|
|
|
if (capable(CAP_SETGID)) {
|
|
if (capable(CAP_SETGID)) {
|
|
if (old_egid != gid) {
|
|
if (old_egid != gid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->gid = current->egid = current->sgid = current->fsgid = gid;
|
|
current->gid = current->egid = current->sgid = current->fsgid = gid;
|
|
} else if ((gid == current->gid) || (gid == current->sgid)) {
|
|
} else if ((gid == current->gid) || (gid == current->sgid)) {
|
|
if (old_egid != gid) {
|
|
if (old_egid != gid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->egid = current->fsgid = gid;
|
|
current->egid = current->fsgid = gid;
|
|
@@ -1103,7 +1103,7 @@ static int set_user(uid_t new_ruid, int dumpclear)
|
|
switch_uid(new_user);
|
|
switch_uid(new_user);
|
|
|
|
|
|
if (dumpclear) {
|
|
if (dumpclear) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->uid = new_ruid;
|
|
current->uid = new_ruid;
|
|
@@ -1159,7 +1159,7 @@ asmlinkage long sys_setreuid(uid_t ruid, uid_t euid)
|
|
return -EAGAIN;
|
|
return -EAGAIN;
|
|
|
|
|
|
if (new_euid != old_euid) {
|
|
if (new_euid != old_euid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->fsuid = current->euid = new_euid;
|
|
current->fsuid = current->euid = new_euid;
|
|
@@ -1209,7 +1209,7 @@ asmlinkage long sys_setuid(uid_t uid)
|
|
return -EPERM;
|
|
return -EPERM;
|
|
|
|
|
|
if (old_euid != uid) {
|
|
if (old_euid != uid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->fsuid = current->euid = uid;
|
|
current->fsuid = current->euid = uid;
|
|
@@ -1254,7 +1254,7 @@ asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid)
|
|
}
|
|
}
|
|
if (euid != (uid_t) -1) {
|
|
if (euid != (uid_t) -1) {
|
|
if (euid != current->euid) {
|
|
if (euid != current->euid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->euid = euid;
|
|
current->euid = euid;
|
|
@@ -1304,7 +1304,7 @@ asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid)
|
|
}
|
|
}
|
|
if (egid != (gid_t) -1) {
|
|
if (egid != (gid_t) -1) {
|
|
if (egid != current->egid) {
|
|
if (egid != current->egid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->egid = egid;
|
|
current->egid = egid;
|
|
@@ -1350,7 +1350,7 @@ asmlinkage long sys_setfsuid(uid_t uid)
|
|
uid == current->suid || uid == current->fsuid ||
|
|
uid == current->suid || uid == current->fsuid ||
|
|
capable(CAP_SETUID)) {
|
|
capable(CAP_SETUID)) {
|
|
if (uid != old_fsuid) {
|
|
if (uid != old_fsuid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->fsuid = uid;
|
|
current->fsuid = uid;
|
|
@@ -1379,7 +1379,7 @@ asmlinkage long sys_setfsgid(gid_t gid)
|
|
gid == current->sgid || gid == current->fsgid ||
|
|
gid == current->sgid || gid == current->fsgid ||
|
|
capable(CAP_SETGID)) {
|
|
capable(CAP_SETGID)) {
|
|
if (gid != old_fsgid) {
|
|
if (gid != old_fsgid) {
|
|
- current->mm->dumpable = suid_dumpable;
|
|
|
|
|
|
+ set_dumpable(current->mm, suid_dumpable);
|
|
smp_wmb();
|
|
smp_wmb();
|
|
}
|
|
}
|
|
current->fsgid = gid;
|
|
current->fsgid = gid;
|
|
@@ -2176,14 +2176,14 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|
error = put_user(current->pdeath_signal, (int __user *)arg2);
|
|
error = put_user(current->pdeath_signal, (int __user *)arg2);
|
|
break;
|
|
break;
|
|
case PR_GET_DUMPABLE:
|
|
case PR_GET_DUMPABLE:
|
|
- error = current->mm->dumpable;
|
|
|
|
|
|
+ error = get_dumpable(current->mm);
|
|
break;
|
|
break;
|
|
case PR_SET_DUMPABLE:
|
|
case PR_SET_DUMPABLE:
|
|
if (arg2 < 0 || arg2 > 1) {
|
|
if (arg2 < 0 || arg2 > 1) {
|
|
error = -EINVAL;
|
|
error = -EINVAL;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- current->mm->dumpable = arg2;
|
|
|
|
|
|
+ set_dumpable(current->mm, arg2);
|
|
break;
|
|
break;
|
|
|
|
|
|
case PR_SET_UNALIGN:
|
|
case PR_SET_UNALIGN:
|