diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-23 22:11:50 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-23 22:11:50 -0500 |
| commit | 3aacd625f20129f5a41ea3ff3b5353b0e4dabd01 (patch) | |
| tree | 7cf4ea65397f80098b30494df31cfc8f5fa26d63 /kernel | |
| parent | 7e21774db5cc9cf8fe93a64a2f0c6cf47db8ab24 (diff) | |
| parent | 2a1d689c9ba42a6066540fb221b6ecbd6298b728 (diff) | |
Merge branch 'akpm' (incoming from Andrew)
Merge second patch-bomb from Andrew Morton:
- various misc bits
- the rest of MM
- add generic fixmap.h, use it
- backlight updates
- dynamic_debug updates
- printk() updates
- checkpatch updates
- binfmt_elf
- ramfs
- init/
- autofs4
- drivers/rtc
- nilfs
- hfsplus
- Documentation/
- coredump
- procfs
- fork
- exec
- kexec
- kdump
- partitions
- rapidio
- rbtree
- userns
- memstick
- w1
- decompressors
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (197 commits)
lib/decompress_unlz4.c: always set an error return code on failures
romfs: fix returm err while getting inode in fill_super
drivers/w1/masters/w1-gpio.c: add strong pullup emulation
drivers/memstick/host/rtsx_pci_ms.c: fix ms card data transfer bug
userns: relax the posix_acl_valid() checks
arch/sh/kernel/dwarf.c: use rbtree postorder iteration helper instead of solution using repeated rb_erase()
fs-ext3-use-rbtree-postorder-iteration-helper-instead-of-opencoding-fix
fs/ext3: use rbtree postorder iteration helper instead of opencoding
fs/jffs2: use rbtree postorder iteration helper instead of opencoding
fs/ext4: use rbtree postorder iteration helper instead of opencoding
fs/ubifs: use rbtree postorder iteration helper instead of opencoding
net/netfilter/ipset/ip_set_hash_netiface.c: use rbtree postorder iteration instead of opencoding
rbtree/test: test rbtree_postorder_for_each_entry_safe()
rbtree/test: move rb_node to the middle of the test struct
rapidio: add modular rapidio core build into powerpc and mips branches
partitions/efi: complete documentation of gpt kernel param purpose
kdump: add /sys/kernel/vmcoreinfo ABI documentation
kdump: fix exported size of vmcoreinfo note
kexec: add sysctl to disable kexec_load
fs/exec.c: call arch_pick_mmap_layout() only once
...
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/fork.c | 10 | ||||
| -rw-r--r-- | kernel/kexec.c | 3 | ||||
| -rw-r--r-- | kernel/ksysfs.c | 2 | ||||
| -rw-r--r-- | kernel/printk/printk.c | 9 | ||||
| -rw-r--r-- | kernel/sched/core.c | 24 | ||||
| -rw-r--r-- | kernel/signal.c | 7 | ||||
| -rw-r--r-- | kernel/sys.c | 8 | ||||
| -rw-r--r-- | kernel/sysctl.c | 22 |
8 files changed, 63 insertions, 22 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 2f11bbe376b0..a17621c6cd42 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -800,14 +800,11 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) | |||
| 800 | * Allocate a new mm structure and copy contents from the | 800 | * Allocate a new mm structure and copy contents from the |
| 801 | * mm structure of the passed in task structure. | 801 | * mm structure of the passed in task structure. |
| 802 | */ | 802 | */ |
| 803 | struct mm_struct *dup_mm(struct task_struct *tsk) | 803 | static struct mm_struct *dup_mm(struct task_struct *tsk) |
| 804 | { | 804 | { |
| 805 | struct mm_struct *mm, *oldmm = current->mm; | 805 | struct mm_struct *mm, *oldmm = current->mm; |
| 806 | int err; | 806 | int err; |
| 807 | 807 | ||
| 808 | if (!oldmm) | ||
| 809 | return NULL; | ||
| 810 | |||
| 811 | mm = allocate_mm(); | 808 | mm = allocate_mm(); |
| 812 | if (!mm) | 809 | if (!mm) |
| 813 | goto fail_nomem; | 810 | goto fail_nomem; |
| @@ -1229,7 +1226,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1229 | if (!try_module_get(task_thread_info(p)->exec_domain->module)) | 1226 | if (!try_module_get(task_thread_info(p)->exec_domain->module)) |
| 1230 | goto bad_fork_cleanup_count; | 1227 | goto bad_fork_cleanup_count; |
| 1231 | 1228 | ||
| 1232 | p->did_exec = 0; | ||
| 1233 | delayacct_tsk_init(p); /* Must remain after dup_task_struct() */ | 1229 | delayacct_tsk_init(p); /* Must remain after dup_task_struct() */ |
| 1234 | copy_flags(clone_flags, p); | 1230 | copy_flags(clone_flags, p); |
| 1235 | INIT_LIST_HEAD(&p->children); | 1231 | INIT_LIST_HEAD(&p->children); |
| @@ -1654,7 +1650,7 @@ SYSCALL_DEFINE0(fork) | |||
| 1654 | return do_fork(SIGCHLD, 0, 0, NULL, NULL); | 1650 | return do_fork(SIGCHLD, 0, 0, NULL, NULL); |
| 1655 | #else | 1651 | #else |
| 1656 | /* can not support in nommu mode */ | 1652 | /* can not support in nommu mode */ |
| 1657 | return(-EINVAL); | 1653 | return -EINVAL; |
| 1658 | #endif | 1654 | #endif |
| 1659 | } | 1655 | } |
| 1660 | #endif | 1656 | #endif |
| @@ -1662,7 +1658,7 @@ SYSCALL_DEFINE0(fork) | |||
| 1662 | #ifdef __ARCH_WANT_SYS_VFORK | 1658 | #ifdef __ARCH_WANT_SYS_VFORK |
| 1663 | SYSCALL_DEFINE0(vfork) | 1659 | SYSCALL_DEFINE0(vfork) |
| 1664 | { | 1660 | { |
| 1665 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, | 1661 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, |
| 1666 | 0, NULL, NULL); | 1662 | 0, NULL, NULL); |
| 1667 | } | 1663 | } |
| 1668 | #endif | 1664 | #endif |
diff --git a/kernel/kexec.c b/kernel/kexec.c index 9c970167e402..ac738781d356 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
| @@ -932,6 +932,7 @@ static int kimage_load_segment(struct kimage *image, | |||
| 932 | */ | 932 | */ |
| 933 | struct kimage *kexec_image; | 933 | struct kimage *kexec_image; |
| 934 | struct kimage *kexec_crash_image; | 934 | struct kimage *kexec_crash_image; |
| 935 | int kexec_load_disabled; | ||
| 935 | 936 | ||
| 936 | static DEFINE_MUTEX(kexec_mutex); | 937 | static DEFINE_MUTEX(kexec_mutex); |
| 937 | 938 | ||
| @@ -942,7 +943,7 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, | |||
| 942 | int result; | 943 | int result; |
| 943 | 944 | ||
| 944 | /* We only trust the superuser with rebooting the system. */ | 945 | /* We only trust the superuser with rebooting the system. */ |
| 945 | if (!capable(CAP_SYS_BOOT)) | 946 | if (!capable(CAP_SYS_BOOT) || kexec_load_disabled) |
| 946 | return -EPERM; | 947 | return -EPERM; |
| 947 | 948 | ||
| 948 | /* | 949 | /* |
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c index 9659d38e008f..d945a949760f 100644 --- a/kernel/ksysfs.c +++ b/kernel/ksysfs.c | |||
| @@ -126,7 +126,7 @@ static ssize_t vmcoreinfo_show(struct kobject *kobj, | |||
| 126 | { | 126 | { |
| 127 | return sprintf(buf, "%lx %x\n", | 127 | return sprintf(buf, "%lx %x\n", |
| 128 | paddr_vmcoreinfo_note(), | 128 | paddr_vmcoreinfo_note(), |
| 129 | (unsigned int)vmcoreinfo_max_size); | 129 | (unsigned int)sizeof(vmcoreinfo_note)); |
| 130 | } | 130 | } |
| 131 | KERNEL_ATTR_RO(vmcoreinfo); | 131 | KERNEL_ATTR_RO(vmcoreinfo); |
| 132 | 132 | ||
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index f8b41bddc6dc..b1d255f04135 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c | |||
| @@ -1595,10 +1595,13 @@ asmlinkage int vprintk_emit(int facility, int level, | |||
| 1595 | * either merge it with the current buffer and flush, or if | 1595 | * either merge it with the current buffer and flush, or if |
| 1596 | * there was a race with interrupts (prefix == true) then just | 1596 | * there was a race with interrupts (prefix == true) then just |
| 1597 | * flush it out and store this line separately. | 1597 | * flush it out and store this line separately. |
| 1598 | * If the preceding printk was from a different task and missed | ||
| 1599 | * a newline, flush and append the newline. | ||
| 1598 | */ | 1600 | */ |
| 1599 | if (cont.len && cont.owner == current) { | 1601 | if (cont.len) { |
| 1600 | if (!(lflags & LOG_PREFIX)) | 1602 | if (cont.owner == current && !(lflags & LOG_PREFIX)) |
| 1601 | stored = cont_add(facility, level, text, text_len); | 1603 | stored = cont_add(facility, level, text, |
| 1604 | text_len); | ||
| 1602 | cont_flush(LOG_NEWLINE); | 1605 | cont_flush(LOG_NEWLINE); |
| 1603 | } | 1606 | } |
| 1604 | 1607 | ||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4d6964e49711..7fea865a810d 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
| @@ -1770,7 +1770,29 @@ void set_numabalancing_state(bool enabled) | |||
| 1770 | numabalancing_enabled = enabled; | 1770 | numabalancing_enabled = enabled; |
| 1771 | } | 1771 | } |
| 1772 | #endif /* CONFIG_SCHED_DEBUG */ | 1772 | #endif /* CONFIG_SCHED_DEBUG */ |
| 1773 | #endif /* CONFIG_NUMA_BALANCING */ | 1773 | |
| 1774 | #ifdef CONFIG_PROC_SYSCTL | ||
| 1775 | int sysctl_numa_balancing(struct ctl_table *table, int write, | ||
| 1776 | void __user *buffer, size_t *lenp, loff_t *ppos) | ||
| 1777 | { | ||
| 1778 | struct ctl_table t; | ||
| 1779 | int err; | ||
| 1780 | int state = numabalancing_enabled; | ||
| 1781 | |||
| 1782 | if (write && !capable(CAP_SYS_ADMIN)) | ||
| 1783 | return -EPERM; | ||
| 1784 | |||
| 1785 | t = *table; | ||
| 1786 | t.data = &state; | ||
| 1787 | err = proc_dointvec_minmax(&t, write, buffer, lenp, ppos); | ||
| 1788 | if (err < 0) | ||
| 1789 | return err; | ||
| 1790 | if (write) | ||
| 1791 | set_numabalancing_state(state); | ||
| 1792 | return err; | ||
| 1793 | } | ||
| 1794 | #endif | ||
| 1795 | #endif | ||
| 1774 | 1796 | ||
| 1775 | /* | 1797 | /* |
| 1776 | * fork()/clone()-time setup: | 1798 | * fork()/clone()-time setup: |
diff --git a/kernel/signal.c b/kernel/signal.c index 940b30ee9a30..52f881db1ca0 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -2047,8 +2047,8 @@ static bool do_signal_stop(int signr) | |||
| 2047 | if (task_set_jobctl_pending(current, signr | gstop)) | 2047 | if (task_set_jobctl_pending(current, signr | gstop)) |
| 2048 | sig->group_stop_count++; | 2048 | sig->group_stop_count++; |
| 2049 | 2049 | ||
| 2050 | for (t = next_thread(current); t != current; | 2050 | t = current; |
| 2051 | t = next_thread(t)) { | 2051 | while_each_thread(current, t) { |
| 2052 | /* | 2052 | /* |
| 2053 | * Setting state to TASK_STOPPED for a group | 2053 | * Setting state to TASK_STOPPED for a group |
| 2054 | * stop is always done with the siglock held, | 2054 | * stop is always done with the siglock held, |
| @@ -3125,8 +3125,7 @@ int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) | |||
| 3125 | rm_from_queue_full(&mask, &t->signal->shared_pending); | 3125 | rm_from_queue_full(&mask, &t->signal->shared_pending); |
| 3126 | do { | 3126 | do { |
| 3127 | rm_from_queue_full(&mask, &t->pending); | 3127 | rm_from_queue_full(&mask, &t->pending); |
| 3128 | t = next_thread(t); | 3128 | } while_each_thread(current, t); |
| 3129 | } while (t != current); | ||
| 3130 | } | 3129 | } |
| 3131 | } | 3130 | } |
| 3132 | 3131 | ||
diff --git a/kernel/sys.c b/kernel/sys.c index c72311324ea7..c0a58be780a4 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -895,8 +895,7 @@ SYSCALL_DEFINE1(times, struct tms __user *, tbuf) | |||
| 895 | * only important on a multi-user system anyway, to make sure one user | 895 | * only important on a multi-user system anyway, to make sure one user |
| 896 | * can't send a signal to a process owned by another. -TYT, 12/12/91 | 896 | * can't send a signal to a process owned by another. -TYT, 12/12/91 |
| 897 | * | 897 | * |
| 898 | * Auch. Had to add the 'did_exec' flag to conform completely to POSIX. | 898 | * !PF_FORKNOEXEC check to conform completely to POSIX. |
| 899 | * LBT 04.03.94 | ||
| 900 | */ | 899 | */ |
| 901 | SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) | 900 | SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) |
| 902 | { | 901 | { |
| @@ -932,7 +931,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) | |||
| 932 | if (task_session(p) != task_session(group_leader)) | 931 | if (task_session(p) != task_session(group_leader)) |
| 933 | goto out; | 932 | goto out; |
| 934 | err = -EACCES; | 933 | err = -EACCES; |
| 935 | if (p->did_exec) | 934 | if (!(p->flags & PF_FORKNOEXEC)) |
| 936 | goto out; | 935 | goto out; |
| 937 | } else { | 936 | } else { |
| 938 | err = -ESRCH; | 937 | err = -ESRCH; |
| @@ -1572,8 +1571,7 @@ static void k_getrusage(struct task_struct *p, int who, struct rusage *r) | |||
| 1572 | t = p; | 1571 | t = p; |
| 1573 | do { | 1572 | do { |
| 1574 | accumulate_thread_rusage(t, r); | 1573 | accumulate_thread_rusage(t, r); |
| 1575 | t = next_thread(t); | 1574 | } while_each_thread(p, t); |
| 1576 | } while (t != p); | ||
| 1577 | break; | 1575 | break; |
| 1578 | 1576 | ||
| 1579 | default: | 1577 | default: |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 332cefcdb04b..096db7452cbd 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -62,6 +62,7 @@ | |||
| 62 | #include <linux/capability.h> | 62 | #include <linux/capability.h> |
| 63 | #include <linux/binfmts.h> | 63 | #include <linux/binfmts.h> |
| 64 | #include <linux/sched/sysctl.h> | 64 | #include <linux/sched/sysctl.h> |
| 65 | #include <linux/kexec.h> | ||
| 65 | 66 | ||
| 66 | #include <asm/uaccess.h> | 67 | #include <asm/uaccess.h> |
| 67 | #include <asm/processor.h> | 68 | #include <asm/processor.h> |
| @@ -389,6 +390,15 @@ static struct ctl_table kern_table[] = { | |||
| 389 | .mode = 0644, | 390 | .mode = 0644, |
| 390 | .proc_handler = proc_dointvec, | 391 | .proc_handler = proc_dointvec, |
| 391 | }, | 392 | }, |
| 393 | { | ||
| 394 | .procname = "numa_balancing", | ||
| 395 | .data = NULL, /* filled in by handler */ | ||
| 396 | .maxlen = sizeof(unsigned int), | ||
| 397 | .mode = 0644, | ||
| 398 | .proc_handler = sysctl_numa_balancing, | ||
| 399 | .extra1 = &zero, | ||
| 400 | .extra2 = &one, | ||
| 401 | }, | ||
| 392 | #endif /* CONFIG_NUMA_BALANCING */ | 402 | #endif /* CONFIG_NUMA_BALANCING */ |
| 393 | #endif /* CONFIG_SCHED_DEBUG */ | 403 | #endif /* CONFIG_SCHED_DEBUG */ |
| 394 | { | 404 | { |
| @@ -605,6 +615,18 @@ static struct ctl_table kern_table[] = { | |||
| 605 | .proc_handler = proc_dointvec, | 615 | .proc_handler = proc_dointvec, |
| 606 | }, | 616 | }, |
| 607 | #endif | 617 | #endif |
| 618 | #ifdef CONFIG_KEXEC | ||
| 619 | { | ||
| 620 | .procname = "kexec_load_disabled", | ||
| 621 | .data = &kexec_load_disabled, | ||
| 622 | .maxlen = sizeof(int), | ||
| 623 | .mode = 0644, | ||
| 624 | /* only handle a transition from default "0" to "1" */ | ||
| 625 | .proc_handler = proc_dointvec_minmax, | ||
| 626 | .extra1 = &one, | ||
| 627 | .extra2 = &one, | ||
| 628 | }, | ||
| 629 | #endif | ||
| 608 | #ifdef CONFIG_MODULES | 630 | #ifdef CONFIG_MODULES |
| 609 | { | 631 | { |
| 610 | .procname = "modprobe", | 632 | .procname = "modprobe", |
