Merge branch 'for-linus-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Aug 2016 23:37:59 +0000 (19:37 -0400)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Aug 2016 23:37:59 +0000 (19:37 -0400)
Pull UML updates from Richard Weinberger:
 "Beside of various fixes this also contains patches to enable features
  such was Kcov, kmemleak and TRACE_IRQFLAGS_SUPPORT on UML"

* 'for-linus-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml:
  hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common()
  um: Support kcov
  um: Enable TRACE_IRQFLAGS_SUPPORT
  um: Use asm-generic/irqflags.h
  um: Fix possible deadlock in sig_handler_common()
  um: Select HAVE_DEBUG_KMEMLEAK
  um: Setup physical memory in setup_arch()
  um: Eliminate null test after alloc_bootmem

arch/um/Kconfig.common
arch/um/include/asm/irqflags.h
arch/um/kernel/Makefile
arch/um/kernel/initrd.c
arch/um/kernel/um_arch.c
arch/um/os-Linux/Makefile
arch/um/os-Linux/signal.c
arch/x86/um/vdso/Makefile
fs/hostfs/hostfs_kern.c

index 58650d098fb417911ad0be5b14dd4ee5d508e78e..fd443852103c998fd997c04ee64ebb7c32716785 100644 (file)
@@ -1,10 +1,12 @@
 config UML
        bool
        default y
+       select ARCH_HAS_KCOV
        select HAVE_ARCH_AUDITSYSCALL
        select HAVE_ARCH_SECCOMP_FILTER
        select HAVE_UID16
        select HAVE_FUTEX_CMPXCHG if FUTEX
+       select HAVE_DEBUG_KMEMLEAK
        select GENERIC_IRQ_SHOW
        select GENERIC_CPU_DEVICES
        select GENERIC_IO
@@ -31,10 +33,9 @@ config PCI
 config PCMCIA
        bool
 
-# Yet to do!
 config TRACE_IRQFLAGS_SUPPORT
        bool
-       default n
+       default y
 
 config LOCKDEP_SUPPORT
        bool
index c780d8a1677351ab99cd4bdf643e5d363ac4e9e5..3bb221e1d5a4dd3b684ebde22ca56bfecda55bbe 100644 (file)
@@ -6,37 +6,33 @@ extern int set_signals(int enable);
 extern void block_signals(void);
 extern void unblock_signals(void);
 
+#define arch_local_save_flags arch_local_save_flags
 static inline unsigned long arch_local_save_flags(void)
 {
        return get_signals();
 }
 
+#define arch_local_irq_restore arch_local_irq_restore
 static inline void arch_local_irq_restore(unsigned long flags)
 {
        set_signals(flags);
 }
 
+#define arch_local_irq_enable arch_local_irq_enable
 static inline void arch_local_irq_enable(void)
 {
        unblock_signals();
 }
 
+#define arch_local_irq_disable arch_local_irq_disable
 static inline void arch_local_irq_disable(void)
 {
        block_signals();
 }
 
-static inline unsigned long arch_local_irq_save(void)
-{
-       unsigned long flags;
-       flags = arch_local_save_flags();
-       arch_local_irq_disable();
-       return flags;
-}
+#define ARCH_IRQ_DISABLED      0
+#define ARCh_IRQ_ENABLED       (SIGIO|SIGVTALRM)
 
-static inline bool arch_irqs_disabled(void)
-{
-       return arch_local_save_flags() == 0;
-}
+#include <asm-generic/irqflags.h>
 
 #endif
index a6a5e42caaef539cb24da8e046bdc998ecbdf976..2f36d515762ecbcaf9507f00b08fa6b955b919f9 100644 (file)
@@ -3,6 +3,11 @@
 # Licensed under the GPL
 #
 
+# Don't instrument UML-specific code; without this, we may crash when
+# accessing the instrumentation buffer for the first time from the
+# kernel.
+KCOV_INSTRUMENT                := n
+
 CPPFLAGS_vmlinux.lds := -DSTART=$(LDS_START)           \
                         -DELF_ARCH=$(LDS_ELF_ARCH)     \
                         -DELF_FORMAT=$(LDS_ELF_FORMAT) \
index 55cead809b18baccf804dd89dafec13c37eb0af0..48bae81f8dcab2febedc7238f190b985e5da4a13 100644 (file)
@@ -37,8 +37,6 @@ static int __init read_initrd(void)
        }
 
        area = alloc_bootmem(size);
-       if (area == NULL)
-               return 0;
 
        if (load_initrd(initrd, area, size) == -1)
                return 0;
index 16630e75f056de31a9b511995636c838d644775e..e8175a8aa22c7b8c7c2f4ea2daf4addd1c8eb666 100644 (file)
@@ -319,9 +319,6 @@ int __init linux_main(int argc, char **argv)
 
        start_vm = VMALLOC_START;
 
-       setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
-       mem_total_pages(physmem_size, iomem_size, highmem);
-
        virtmem_size = physmem_size;
        stack = (unsigned long) argv;
        stack &= ~(1024 * 1024 - 1);
@@ -334,7 +331,6 @@ int __init linux_main(int argc, char **argv)
                printf("Kernel virtual memory size shrunk to %lu bytes\n",
                       virtmem_size);
 
-       stack_protections((unsigned long) &init_thread_info);
        os_flush_stdout();
 
        return start_uml();
@@ -342,6 +338,10 @@ int __init linux_main(int argc, char **argv)
 
 void __init setup_arch(char **cmdline_p)
 {
+       stack_protections((unsigned long) &init_thread_info);
+       setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
+       mem_total_pages(physmem_size, iomem_size, highmem);
+
        paging_init();
        strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
        *cmdline_p = command_line;
index 08ff5094fcdd9c82897d32b1c877284803b497b2..ada473bf6f46e536048a8589f7af67edd6048f1a 100644 (file)
@@ -3,6 +3,9 @@
 # Licensed under the GPL
 #
 
+# Don't instrument UML-specific code
+KCOV_INSTRUMENT                := n
+
 obj-y = aio.o execvp.o file.o helper.o irq.o main.o mem.o process.o \
        registers.o sigio.o signal.o start_up.o time.o tty.o \
        umid.o user_syms.o util.o drivers/ skas/
index 8acaf4e384c0fc45612819f18b97cfe1ce3e1771..a86d7cc2c2d82fa7d0e5c13d1f3188efcd660fba 100644 (file)
@@ -15,6 +15,7 @@
 #include <kern_util.h>
 #include <os.h>
 #include <sysdep/mcontext.h>
+#include <um_malloc.h>
 
 void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
        [SIGTRAP]       = relay_signal,
@@ -32,7 +33,7 @@ static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
        struct uml_pt_regs *r;
        int save_errno = errno;
 
-       r = malloc(sizeof(struct uml_pt_regs));
+       r = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
        if (!r)
                panic("out of memory");
 
@@ -91,7 +92,7 @@ static void timer_real_alarm_handler(mcontext_t *mc)
 {
        struct uml_pt_regs *regs;
 
-       regs = malloc(sizeof(struct uml_pt_regs));
+       regs = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
        if (!regs)
                panic("out of memory");
 
index 6c803ca49b5d2e12f5fcd0541febe92fdccee15c..d72dec406ccbee1be87b64747d4d2aaaf13bc301 100644 (file)
@@ -2,6 +2,9 @@
 # Building vDSO images for x86.
 #
 
+# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
+KCOV_INSTRUMENT                := n
+
 VDSO64-y               := y
 
 vdso-install-$(VDSO64-y)       += vdso.so
index 5c57654927a6185cb1601bd5c52d5ba4c0475291..90e46cd752fe7568bc13198898bc450a63cc9e36 100644 (file)
@@ -959,10 +959,11 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
 
        if (S_ISLNK(root_inode->i_mode)) {
                char *name = follow_link(host_root_path);
-               if (IS_ERR(name))
+               if (IS_ERR(name)) {
                        err = PTR_ERR(name);
-               else
-                       err = read_name(root_inode, name);
+                       goto out_put;
+               }
+               err = read_name(root_inode, name);
                kfree(name);
                if (err)
                        goto out_put;
This page took 0.030089 seconds and 5 git commands to generate.