]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - kernel/sys.c
Revert: "ring-buffer: Remove HAVE_64BIT_ALIGNED_ACCESS"
[mirror_ubuntu-hirsute-kernel.git] / kernel / sys.c
index ab6c409b1159b1538437198d5a7745766f45e906..de41df0188f0b0a6c276b070a8460f24fe86d420 100644 (file)
@@ -373,7 +373,7 @@ long __sys_setregid(gid_t rgid, gid_t egid)
        if (rgid != (gid_t) -1) {
                if (gid_eq(old->gid, krgid) ||
                    gid_eq(old->egid, krgid) ||
-                   ns_capable(old->user_ns, CAP_SETGID))
+                   ns_capable_setid(old->user_ns, CAP_SETGID))
                        new->gid = krgid;
                else
                        goto error;
@@ -382,7 +382,7 @@ long __sys_setregid(gid_t rgid, gid_t egid)
                if (gid_eq(old->gid, kegid) ||
                    gid_eq(old->egid, kegid) ||
                    gid_eq(old->sgid, kegid) ||
-                   ns_capable(old->user_ns, CAP_SETGID))
+                   ns_capable_setid(old->user_ns, CAP_SETGID))
                        new->egid = kegid;
                else
                        goto error;
@@ -432,7 +432,7 @@ long __sys_setgid(gid_t gid)
        old = current_cred();
 
        retval = -EPERM;
-       if (ns_capable(old->user_ns, CAP_SETGID))
+       if (ns_capable_setid(old->user_ns, CAP_SETGID))
                new->gid = new->egid = new->sgid = new->fsgid = kgid;
        else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
                new->egid = new->fsgid = kgid;
@@ -744,7 +744,7 @@ long __sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid)
        old = current_cred();
 
        retval = -EPERM;
-       if (!ns_capable(old->user_ns, CAP_SETGID)) {
+       if (!ns_capable_setid(old->user_ns, CAP_SETGID)) {
                if (rgid != (gid_t) -1        && !gid_eq(krgid, old->gid) &&
                    !gid_eq(krgid, old->egid) && !gid_eq(krgid, old->sgid))
                        goto error;
@@ -871,7 +871,7 @@ long __sys_setfsgid(gid_t gid)
 
        if (gid_eq(kgid, old->gid)  || gid_eq(kgid, old->egid)  ||
            gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
-           ns_capable(old->user_ns, CAP_SETGID)) {
+           ns_capable_setid(old->user_ns, CAP_SETGID)) {
                if (!gid_eq(kgid, old->fsgid)) {
                        new->fsgid = kgid;
                        if (security_task_fix_setgid(new,old,LSM_SETID_FS) == 0)
@@ -1209,6 +1209,21 @@ SYSCALL_DEFINE0(setsid)
 
 DECLARE_RWSEM(uts_sem);
 
+#ifdef COMPAT_UTS_MACHINE
+static char compat_uts_machine[__OLD_UTS_LEN+1] = COMPAT_UTS_MACHINE;
+
+static int __init parse_compat_uts_machine(char *arg)
+{
+       strncpy(compat_uts_machine, arg, __OLD_UTS_LEN);
+       compat_uts_machine[__OLD_UTS_LEN] = 0;
+       return 0;
+}
+early_param("compat_uts_machine", parse_compat_uts_machine);
+
+#undef COMPAT_UTS_MACHINE
+#define COMPAT_UTS_MACHINE compat_uts_machine
+#endif
+
 #ifdef COMPAT_UTS_MACHINE
 #define override_architecture(name) \
        (personality(current->personality) == PER_LINUX32 && \
@@ -2034,7 +2049,7 @@ static int prctl_set_mm_map(int opt, const void __user *addr, unsigned long data
         * VMAs already unmapped and kernel uses these members for statistics
         * output in procfs mostly, except
         *
-        *  - @start_brk/@brk which are used in do_brk but kernel lookups
+        *  - @start_brk/@brk which are used in do_brk_flags but kernel lookups
         *    for VMAs when updating these memvers so anything wrong written
         *    here cause kernel to swear at userspace program but won't lead
         *    to any problem in kernel itself
@@ -2238,12 +2253,12 @@ out:
 }
 
 #ifdef CONFIG_CHECKPOINT_RESTORE
-static int prctl_get_tid_address(struct task_struct *me, int __user **tid_addr)
+static int prctl_get_tid_address(struct task_struct *me, int __user * __user *tid_addr)
 {
        return put_user(me->clear_child_tid, tid_addr);
 }
 #else
-static int prctl_get_tid_address(struct task_struct *me, int __user **tid_addr)
+static int prctl_get_tid_address(struct task_struct *me, int __user * __user *tid_addr)
 {
        return -EINVAL;
 }
@@ -2427,7 +2442,7 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
                error = prctl_set_mm(arg2, arg3, arg4, arg5);
                break;
        case PR_GET_TID_ADDRESS:
-               error = prctl_get_tid_address(me, (int __user **)arg2);
+               error = prctl_get_tid_address(me, (int __user * __user *)arg2);
                break;
        case PR_SET_CHILD_SUBREAPER:
                me->signal->is_child_subreaper = !!arg2;