Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux...
authorJames Morris <james.l.morris@oracle.com>
Wed, 19 Nov 2014 10:36:07 +0000 (21:36 +1100)
committerJames Morris <james.l.morris@oracle.com>
Wed, 19 Nov 2014 10:36:07 +0000 (21:36 +1100)
1  2 
Documentation/kernel-parameters.txt
include/linux/fs.h
init/main.c

@@@ -571,12 -571,6 +571,12 @@@ bytes respectively. Such letter suffixe
                        trust validation.
                        format: { id:<keyid> | builtin }
  
 +      cca=            [MIPS] Override the kernel pages' cache coherency
 +                      algorithm.  Accepted values range from 0 to 7
 +                      inclusive. See arch/mips/include/asm/pgtable-bits.h
 +                      for platform specific values (SB1, Loongson3 and
 +                      others).
 +
        ccw_timeout_log [S390]
                        See Documentation/s390/CommonIO for details.
  
                        that can be changed at run time by the
                        set_graph_function file in the debugfs tracing directory.
  
 +      ftrace_graph_notrace=[function-list]
 +                      [FTRACE] Do not trace from the functions specified in
 +                      function-list.  This list is a comma separated list of
 +                      functions that can be changed at run time by the
 +                      set_graph_notrace file in the debugfs tracing directory.
 +
        gamecon.map[2|3]=
                        [HW,JOY] Multisystem joystick and NES/SNES/PSX pad
                        support via parallel port (up to 5 devices per port)
                        Formats: { "ima" | "ima-ng" }
                        Default: "ima-ng"
  
+       ima_template_fmt=
+                       [IMA] Define a custom template format.
+                       Format: { "field1|...|fieldN" }
        ima.ahash_minsize= [IMA] Minimum file size for asynchronous hash usage
                        Format: <min_file_size>
                        Set the minimal file size for using asynchronous hash.
        ip=             [IP_PNP]
                        See Documentation/filesystems/nfs/nfsroot.txt.
  
 -      ip2=            [HW] Set IO/IRQ pairs for up to 4 IntelliPort boards
 -                      See comment before ip2_setup() in
 -                      drivers/char/ip2/ip2base.c.
 -
        irqfixup        [HW]
                        When an interrupt is not handled search all handlers
                        for it. Intended to get systems with badly broken
                        7 (KERN_DEBUG)          debug-level messages
  
        log_buf_len=n[KMG]      Sets the size of the printk ring buffer,
 -                      in bytes.  n must be a power of two.  The default
 -                      size is set in the kernel config file.
 +                      in bytes.  n must be a power of two and greater
 +                      than the minimal size. The minimal size is defined
 +                      by LOG_BUF_SHIFT kernel config parameter. There is
 +                      also CONFIG_LOG_CPU_MAX_BUF_SHIFT config parameter
 +                      that allows to increase the default size depending on
 +                      the number of CPUs. See init/Kconfig for more details.
  
        logo.nologo     [FB] Disables display of the built-in Linux logo.
                        This may be used to provide more screen space for
                        and restore using xsave. The kernel will fallback to
                        enabling legacy floating-point and sse state.
  
 +      noxsaveopt      [X86] Disables xsaveopt used in saving x86 extended
 +                      register states. The kernel will fall back to use
 +                      xsave to save the states. By using this parameter,
 +                      performance of saving the states is degraded because
 +                      xsave doesn't support modified optimization while
 +                      xsaveopt supports it on xsaveopt enabled systems.
 +
 +      noxsaves        [X86] Disables xsaves and xrstors used in saving and
 +                      restoring x86 extended register state in compacted
 +                      form of xsave area. The kernel will fall back to use
 +                      xsaveopt and xrstor to save and restore the states
 +                      in standard form of xsave area. By using this
 +                      parameter, xsave area per process might occupy more
 +                      memory on xsaves enabled systems.
 +
        eagerfpu=       [X86]
                        on      enable eager fpu restore
                        off     disable eager fpu restore
                        quiescent states.  Units are jiffies, minimum
                        value is one, and maximum value is HZ.
  
 +      rcutree.rcu_nocb_leader_stride= [KNL]
 +                      Set the number of NOCB kthread groups, which
 +                      defaults to the square root of the number of
 +                      CPUs.  Larger numbers reduces the wakeup overhead
 +                      on the per-CPU grace-period kthreads, but increases
 +                      that same overhead on each group's leader.
 +
        rcutree.qhimark= [KNL]
                        Set threshold of queued RCU callbacks beyond which
                        batch limiting is disabled.
  
        S               [KNL] Run init in single mode
  
 +      s390_iommu=     [HW,S390]
 +                      Set s390 IOTLB flushing mode
 +              strict
 +                      With strict flushing every unmap operation will result in
 +                      an IOTLB flush. Default is lazy flushing before reuse,
 +                      which is faster.
 +
        sa1100ir        [NET]
                        See drivers/net/irda/sa1100_ir.c.
  
                                        bogus residue values);
                                s = SINGLE_LUN (the device has only one
                                        Logical Unit);
 +                              u = IGNORE_UAS (don't bind to the uas driver);
                                w = NO_WP_DETECT (don't test whether the
                                        medium is write-protected).
                        Example: quirks=0419:aaf5:rl,0421:0433:rc
                        Disables the ticketlock slowpath using Xen PV
                        optimizations.
  
 +      xen_nopv        [X86]
 +                      Disables the PV optimizations forcing the HVM guest to
 +                      run as generic HVM guest with no PV drivers.
 +
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
                        <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
diff --combined include/linux/fs.h
@@@ -387,7 -387,7 +387,7 @@@ struct address_space 
        struct inode            *host;          /* owner: inode, block_device */
        struct radix_tree_root  page_tree;      /* radix tree of all pages */
        spinlock_t              tree_lock;      /* and lock protecting it */
 -      unsigned int            i_mmap_writable;/* count VM_SHARED mappings */
 +      atomic_t                i_mmap_writable;/* count VM_SHARED mappings */
        struct rb_root          i_mmap;         /* tree of private and shared mappings */
        struct list_head        i_mmap_nonlinear;/*list VM_NONLINEAR mappings */
        struct mutex            i_mmap_mutex;   /* protect tree, count, list */
@@@ -470,35 -470,10 +470,35 @@@ static inline int mapping_mapped(struc
   * Note that i_mmap_writable counts all VM_SHARED vmas: do_mmap_pgoff
   * marks vma as VM_SHARED if it is shared, and the file was opened for
   * writing i.e. vma may be mprotected writable even if now readonly.
 + *
 + * If i_mmap_writable is negative, no new writable mappings are allowed. You
 + * can only deny writable mappings, if none exists right now.
   */
  static inline int mapping_writably_mapped(struct address_space *mapping)
  {
 -      return mapping->i_mmap_writable != 0;
 +      return atomic_read(&mapping->i_mmap_writable) > 0;
 +}
 +
 +static inline int mapping_map_writable(struct address_space *mapping)
 +{
 +      return atomic_inc_unless_negative(&mapping->i_mmap_writable) ?
 +              0 : -EPERM;
 +}
 +
 +static inline void mapping_unmap_writable(struct address_space *mapping)
 +{
 +      atomic_dec(&mapping->i_mmap_writable);
 +}
 +
 +static inline int mapping_deny_writable(struct address_space *mapping)
 +{
 +      return atomic_dec_unless_positive(&mapping->i_mmap_writable) ?
 +              0 : -EBUSY;
 +}
 +
 +static inline void mapping_allow_writable(struct address_space *mapping)
 +{
 +      atomic_inc(&mapping->i_mmap_writable);
  }
  
  /*
@@@ -858,7 -833,7 +858,7 @@@ static inline struct file *get_file(str
   *
   * Lockd stuffs a "host" pointer into this.
   */
 -typedef struct files_struct *fl_owner_t;
 +typedef void *fl_owner_t;
  
  struct file_lock_operations {
        void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
@@@ -1275,7 -1250,6 +1275,7 @@@ struct super_block 
  
        /* AIO completions deferred from interrupt context */
        struct workqueue_struct *s_dio_done_wq;
 +      struct hlist_head s_pins;
  
        /*
         * Keep the lru lists last in the structure so they always sit on their
@@@ -1553,6 -1527,7 +1553,7 @@@ ssize_t rw_copy_check_uvector(int type
                              struct iovec *fast_pointer,
                              struct iovec **ret_pointer);
  
+ extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
  extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
  extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
  extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
@@@ -2361,7 -2336,6 +2362,7 @@@ extern int do_pipe_flags(int *, int)
  
  extern int kernel_read(struct file *, loff_t, char *, unsigned long);
  extern ssize_t kernel_write(struct file *, const char *, size_t, loff_t);
 +extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
  extern struct file * open_exec(const char *);
   
  /* fs/dcache.c -- generic fs support functions */
@@@ -2715,7 -2689,7 +2716,7 @@@ static const struct file_operations __f
        .read    = simple_attr_read,                                    \
        .write   = simple_attr_write,                                   \
        .llseek  = generic_file_llseek,                                 \
 -};
 +}
  
  static inline __printf(1, 2)
  void __simple_attr_check_format(const char *fmt, ...)
diff --combined init/main.c
@@@ -6,7 -6,7 +6,7 @@@
   *  GK 2/5/95  -  Changed to support mounting root fs via NFS
   *  Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
   *  Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
 - *  Simplified starting of init:  Michael A. Griffith <grif@acm.org> 
 + *  Simplified starting of init:  Michael A. Griffith <grif@acm.org>
   */
  
  #define DEBUG         /* Enable initcall_debug */
@@@ -78,6 -78,7 +78,7 @@@
  #include <linux/context_tracking.h>
  #include <linux/random.h>
  #include <linux/list.h>
+ #include <linux/integrity.h>
  
  #include <asm/io.h>
  #include <asm/bugs.h>
@@@ -136,7 -137,7 +137,7 @@@ static char *ramdisk_execute_command
   * Used to generate warnings if static_key manipulation functions are used
   * before jump_label_init is called.
   */
 -bool static_key_initialized __read_mostly = false;
 +bool static_key_initialized __read_mostly;
  EXPORT_SYMBOL_GPL(static_key_initialized);
  
  /*
@@@ -159,8 -160,8 +160,8 @@@ static int __init set_reset_devices(cha
  
  __setup("reset_devices", set_reset_devices);
  
 -static const char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
 -const char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
 +static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
 +const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
  static const char *panic_later, *panic_param;
  
  extern const struct obs_kernel_param __setup_start[], __setup_end[];
@@@ -199,6 -200,7 +200,6 @@@ static int __init obsolete_checksetup(c
   * still work even if initially too large, it will just take slightly longer
   */
  unsigned long loops_per_jiffy = (1<<12);
 -
  EXPORT_SYMBOL(loops_per_jiffy);
  
  static int __init debug_kernel(char *str)
@@@ -375,8 -377,8 +376,8 @@@ static void __init setup_command_line(c
        initcall_command_line =
                memblock_virt_alloc(strlen(boot_command_line) + 1, 0);
        static_command_line = memblock_virt_alloc(strlen(command_line) + 1, 0);
 -      strcpy (saved_command_line, boot_command_line);
 -      strcpy (static_command_line, command_line);
 +      strcpy(saved_command_line, boot_command_line);
 +      strcpy(static_command_line, command_line);
  }
  
  /*
@@@ -444,8 -446,8 +445,8 @@@ void __init parse_early_options(char *c
  /* Arch code calls this early on, or if not, just before other parsing. */
  void __init parse_early_param(void)
  {
 -      static __initdata int done = 0;
 -      static __initdata char tmp_cmdline[COMMAND_LINE_SIZE];
 +      static int done __initdata;
 +      static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
  
        if (done)
                return;
@@@ -499,8 -501,7 +500,8 @@@ static void __init mm_init(void
  
  asmlinkage __visible void __init start_kernel(void)
  {
 -      char * command_line, *after_dashes;
 +      char *command_line;
 +      char *after_dashes;
        extern const struct kernel_param __start___param[], __stop___param[];
  
        /*
         * fragile until we cpu_idle() for the first time.
         */
        preempt_disable();
 -      if (WARN(!irqs_disabled(), "Interrupts were enabled *very* early, fixing it\n"))
 +      if (WARN(!irqs_disabled(),
 +               "Interrupts were enabled *very* early, fixing it\n"))
                local_irq_disable();
        idr_init_cache();
        rcu_init();
@@@ -1027,8 -1027,11 +1028,11 @@@ static noinline void __init kernel_init
         * Ok, we have completed the initial bootup, and
         * we're essentially up and running. Get rid of the
         * initmem segments and start the user-mode stuff..
+        *
+        * rootfs is available now, try loading the public keys
+        * and default modules
         */
  
-       /* rootfs is available now, try loading default modules */
+       integrity_load_keys();
        load_default_modules();
  }