Merge tag 'v3.10.103' into update
authorStricted <info@stricted.net>
Wed, 21 Mar 2018 21:58:21 +0000 (22:58 +0100)
committerStricted <info@stricted.net>
Wed, 21 Mar 2018 21:58:21 +0000 (22:58 +0100)
This is the 3.10.103 stable release

29 files changed:
1  2 
Makefile
arch/arm/kernel/ptrace.c
arch/s390/include/asm/syscall.h
drivers/hid/hid-input.c
drivers/mmc/card/block.c
drivers/mtd/ubi/build.c
drivers/usb/core/hub.c
drivers/usb/serial/option.c
fs/ext4/inode.c
fs/ext4/mballoc.c
fs/ext4/super.c
fs/fuse/inode.c
fs/nfs/nfs4proc.c
fs/ubifs/file.c
include/linux/sched.h
kernel/module.c
kernel/panic.c
kernel/printk.c
kernel/signal.c
kernel/sysctl.c
kernel/trace/trace_printk.c
mm/shmem.c
net/ipv4/netfilter/arp_tables.c
net/ipv4/netfilter/ip_tables.c
net/ipv4/tcp_input.c
net/ipv4/tcp_output.c
net/ipv6/netfilter/ip6_tables.c
net/ipv6/tcp_ipv6.c
scripts/recordmcount.c

diff --cc Makefile
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 118cef7d1ecc2bd3e13d35eff9f7136b2ea1e4a2,03331c173bd0737757e121662dd32e49e8abc565..7269afce27c96ccb0d200dfa52d7582ea3766a60
@@@ -1225,12 -1054,13 +1227,13 @@@ out_uif
        ubi_assert(ref);
        uif_close(ubi);
  out_detach:
+       ubi_devices[ubi_num] = NULL;
        ubi_wl_close(ubi);
        ubi_free_internal_volumes(ubi);
 -      vfree(ubi->vtbl);
 +      kfree(ubi->vtbl);
  out_free:
 -      vfree(ubi->peb_buf);
 -      vfree(ubi->fm_buf);
 +      kfree(ubi->peb_buf);
 +      kfree(ubi->fm_buf);
        if (ref)
                put_device(&ubi->dev);
        else
Simple merge
Simple merge
diff --cc fs/ext4/inode.c
Simple merge
Simple merge
diff --cc fs/ext4/super.c
Simple merge
diff --cc fs/fuse/inode.c
Simple merge
Simple merge
diff --cc fs/ubifs/file.c
Simple merge
Simple merge
diff --cc kernel/module.c
Simple merge
diff --cc kernel/panic.c
Simple merge
diff --cc kernel/printk.c
index 617bc0d08e2b77ae53b7b6ea28700f3298b9b891,ee8f6be7d8a976c88f5bcbd45fd2f78b03bb4ecb..f23cbc5e9ea31f2fae57235e5c6827c812fba296
@@@ -2131,14 -2033,8 +2131,15 @@@ void console_unlock(void
        static u64 seen_seq;
        unsigned long flags;
        bool wake_klogd = false;
-       bool retry;
+       bool do_cond_resched, retry;
 +#ifdef LOG_TOO_MUCH_WARNING
 +    unsigned long total_log_size = 0;
 +    unsigned long long t1 = 0, t2 = 0;
 +    char aee_str[512];
 +    int org_loglevel = console_loglevel;
 +#endif
 +
        if (console_suspended) {
                up(&console_sem);
                return;
@@@ -2203,42 -2104,12 +2215,45 @@@ skip
                raw_spin_unlock(&logbuf_lock);
  
                stop_critical_timings();        /* don't trace print latency */
 -              call_console_drivers(level, text, len);
 -              start_critical_timings();
 +#ifdef LOG_TOO_MUCH_WARNING
 +        /*
 +           For uart console, 10us/per chars
 +           400,000 chars = need to wait 4.0 sec
 +                normal case: 4sec
 +         */
 +        if (log_in_resume) {
 +            org_loglevel = console_loglevel;
 +            console_loglevel = 4;
 +        }
 +        total_log_size += len;
 +        if (total_log_size < console_log_max)
 +                  call_console_drivers(level, text, len);
 +        else if (!already_skip_log) {
 +            sprintf(aee_str, "PRINTK too much:%lu", total_log_size);
 +            aee_kernel_warning(aee_str, "Need to shrink kernel log");
 +            already_skip_log = 1;
 +        }
 +        /**/
 +        start_critical_timings();
 +        /* For Resume log too much*/
 +        if (log_in_resume) {
 +            t2 = sched_clock();
 +            console_loglevel = org_loglevel;
 +            if (t2 - t1 > 100000000) {
 +                sprintf( aee_str,"[RESUME CONSOLE too long:%lluns>100ms] s:%lluns, e:%lluns\n", t2 - t1, t1, t2);
 +                aee_kernel_warning(aee_str, "Need to shrink kernel log");
 +            }
 +        }
 +
 +        /**/
 +#else
 +        start_critical_timings();
 +        call_console_drivers(level, text, len);
 +#endif
                local_irq_restore(flags);
+               if (do_cond_resched)
+                       cond_resched();
        }
        console_locked = 0;
        mutex_release(&console_lock_dep_map, 1, _RET_IP_);
diff --cc kernel/signal.c
Simple merge
diff --cc kernel/sysctl.c
Simple merge
Simple merge
diff --cc mm/shmem.c
Simple merge
index e4717743316e39f88aeac5f32a97bae61b0e3439,95a5f261fe8a3ab594d990f6df653781f8df5c95..bb1670b371d2050524269539cd9b506899ff0562
@@@ -465,24 -469,6 +469,23 @@@ static int mark_source_chains(const str
        return 1;
  }
  
 +static inline int check_entry(const struct arpt_entry *e)
 +{
 +      const struct xt_entry_target *t;
 +
 +      if (!arp_checkentry(&e->arp))
 +              return -EINVAL;
 +
 +      if (e->target_offset + sizeof(struct xt_entry_target) > e->next_offset)
 +              return -EINVAL;
 +
 +      t = arpt_get_target_c(e);
 +      if (e->target_offset + t->u.target_size > e->next_offset)
 +              return -EINVAL;
 +
 +      return 0;
 +}
 +
  static inline int check_target(struct arpt_entry *e, const char *name)
  {
        struct xt_entry_target *t = arpt_get_target(e);
@@@ -572,7 -558,11 +575,8 @@@ static inline int check_entry_size_and_
                return -EINVAL;
        }
  
 -      if (!arp_checkentry(&e->arp))
 -              return -EINVAL;
 +      err = check_entry(e);
 -      err = xt_check_entry_offsets(e, e->elems, e->target_offset,
 -                                   e->next_offset);
        if (err)
                return err;
  
@@@ -1233,8 -1195,11 +1209,9 @@@ check_compat_entry_size_and_hooks(struc
                return -EINVAL;
        }
  
 -      if (!arp_checkentry(&e->arp))
 -              return -EINVAL;
 +      /* For purposes of check_entry casting the compat entry is fine */
 +      ret = check_entry((struct arpt_entry *)e);
 -      ret = xt_compat_check_entry_offsets(e, e->elems, e->target_offset,
 -                                          e->next_offset);
        if (ret)
                return ret;
  
index e6cd22262ed18fe77920c1bdbdfbf346db9d8656,92c8f2727ee92492eae43944d05f6a93842070f1..8672b124e1cc8e38f84e1c963d695b6e40c713dd
@@@ -734,7 -718,11 +738,8 @@@ check_entry_size_and_hooks(struct ipt_e
                return -EINVAL;
        }
  
 -      if (!ip_checkentry(&e->ip))
 -              return -EINVAL;
 +      err = check_entry(e);
 -      err = xt_check_entry_offsets(e, e->elems, e->target_offset,
 -                                   e->next_offset);
        if (err)
                return err;
  
@@@ -1498,8 -1447,11 +1464,9 @@@ check_compat_entry_size_and_hooks(struc
                return -EINVAL;
        }
  
 -      if (!ip_checkentry(&e->ip))
 -              return -EINVAL;
 +      /* For purposes of check_entry casting the compat entry is fine */
 +      ret = check_entry((struct ipt_entry *)e);
 -      ret = xt_compat_check_entry_offsets(e, e->elems,
 -                                          e->target_offset, e->next_offset);
        if (ret)
                return ret;
  
Simple merge
Simple merge
index 2b3c29b2c5a3b878bbfe5100ef67938945a68ea5,e214222cd06f7900a416a18a8b0c22209a23aa79..beebca7c139b4ddf185858a4ea6741e7155bb494
@@@ -200,10 -200,9 +200,10 @@@ static inline bool unconditional(const 
        static const struct ip6t_ip6 uncond;
  
        return e->target_offset == sizeof(struct ip6t_entry) &&
-               memcmp(&e->ipv6, &uncond, sizeof(uncond)) == 0;
+              memcmp(&e->ipv6, &uncond, sizeof(uncond)) == 0;
  }
  
 +
  static inline const struct xt_entry_target *
  ip6t_get_target_c(const struct ip6t_entry *e)
  {
@@@ -569,26 -572,6 +573,25 @@@ static void cleanup_match(struct xt_ent
        module_put(par.match->me);
  }
  
 +static int
 +check_entry(const struct ip6t_entry *e)
 +{
 +      const struct xt_entry_target *t;
 +
 +      if (!ip6_checkentry(&e->ipv6))
 +              return -EINVAL;
 +
 +      if (e->target_offset + sizeof(struct xt_entry_target) >
 +          e->next_offset)
 +              return -EINVAL;
 +
 +      t = ip6t_get_target_c(e);
 +      if (e->target_offset + t->u.target_size > e->next_offset)
 +              return -EINVAL;
 +
 +      return 0;
 +}
 +
  static int check_match(struct xt_entry_match *m, struct xt_mtchk_param *par)
  {
        const struct ip6t_ip6 *ipv6 = par->entryinfo;
@@@ -746,7 -729,11 +749,8 @@@ check_entry_size_and_hooks(struct ip6t_
                return -EINVAL;
        }
  
 -      if (!ip6_checkentry(&e->ipv6))
 -              return -EINVAL;
 +      err = check_entry(e);
 -      err = xt_check_entry_offsets(e, e->elems, e->target_offset,
 -                                   e->next_offset);
        if (err)
                return err;
  
@@@ -1511,8 -1458,11 +1475,9 @@@ check_compat_entry_size_and_hooks(struc
                return -EINVAL;
        }
  
 -      if (!ip6_checkentry(&e->ipv6))
 -              return -EINVAL;
 +      /* For purposes of check_entry casting the compat entry is fine */
 +      ret = check_entry((struct ip6t_entry *)e);
 -      ret = xt_compat_check_entry_offsets(e, e->elems,
 -                                          e->target_offset, e->next_offset);
        if (ret)
                return ret;
  
Simple merge
Simple merge