lkml.org 
[lkml]   [2019]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Linux 3.16.67
Thanks, a bunch Ben!

On 13:29 Sun 12 May , Ben Hutchings wrote:
>I'm announcing the release of the 3.16.67 kernel.
>
>All users of the 3.16 kernel series should upgrade.
>
>The updated 3.16.y git tree can be found at:
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.16.y
>and can be browsed at the normal kernel.org git web browser:
> https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git
>
>The diff from 3.16.66 is attached to this message.
>
>Ben.
>
>------------
>
> Makefile | 2 +-
> arch/x86/kvm/vmx.c | 4 +++-
> drivers/net/vxlan.c | 2 +-
> drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 16 +++++++++++-----
> drivers/spi/spi-omap-100k.c | 4 ----
> include/net/ip_fib.h | 2 +-
> kernel/fork.c | 15 ++++++++++++---
> kernel/time/timer_stats.c | 2 +-
> mm/percpu.c | 8 ++++----
> net/ipv4/fib_semantics.c | 8 +++++---
> net/ipv4/route.c | 10 ++++++----
> net/ipv6/ip6_output.c | 3 +++
> 12 files changed, 48 insertions(+), 28 deletions(-)
>
>Amit Klein (1):
> inet: update the IP ID generation algorithm to higher standards.
>
>Arend Van Spriel (1):
> brcmfmac: add length checks in scheduled scan result handler
>
>Ben Hutchings (4):
> Revert "brcmfmac: assure SSID length from firmware is limited"
> vxlan: Fix big-endian declaration of VNI
> timer/debug: Change /proc/timer_stats from 0644 to 0600
> Linux 3.16.67
>
>David Herrmann (1):
> fork: record start_time late
>
>Eric Dumazet (1):
> ipv4: fix a race in update_or_create_fnhe()
>
>Joerg Roedel (1):
> KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode()
>
>Matteo Croce (1):
> percpu: stop printing kernel addresses
>
>Nick Krause (1):
> spi: omap-100k: Remove unused definitions
>

>diff --git a/Makefile b/Makefile
>index 7387b85870f2..33a54d0451a3 100644
>--- a/Makefile
>+++ b/Makefile
>@@ -1,6 +1,6 @@
> VERSION = 3
> PATCHLEVEL = 16
>-SUBLEVEL = 66
>+SUBLEVEL = 67
> EXTRAVERSION =
> NAME = Museum of Fishiegoodies
>
>diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
>index bc3dc38fa486..bd6b883f3075 100644
>--- a/arch/x86/kvm/vmx.c
>+++ b/arch/x86/kvm/vmx.c
>@@ -4224,7 +4224,9 @@ static u8 vmx_msr_bitmap_mode(struct kvm_vcpu *vcpu)
> {
> u8 mode = 0;
>
>- if (irqchip_in_kernel(vcpu->kvm) && apic_x2apic_mode(vcpu->arch.apic)) {
>+ if (cpu_has_secondary_exec_ctrls() &&
>+ (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) &
>+ SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) {
> mode |= MSR_BITMAP_MODE_X2APIC;
> if (enable_apicv)
> mode |= MSR_BITMAP_MODE_X2APIC_APICV;
>diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
>index 31abf2e7b199..d7e4f83f8bf3 100644
>--- a/drivers/net/vxlan.c
>+++ b/drivers/net/vxlan.c
>@@ -706,7 +706,7 @@ static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan,
> static int vxlan_fdb_create(struct vxlan_dev *vxlan,
> const u8 *mac, union vxlan_addr *ip,
> __u16 state, __be16 port,
>- __be32 vni, __u32 ifindex, __u8 ndm_flags,
>+ __u32 vni, __u32 ifindex, __u8 ndm_flags,
> struct vxlan_fdb **fdb)
> {
> struct vxlan_rdst *rd = NULL;
>diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
>index e6e2c5afec06..1a0a62219eed 100644
>--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
>+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
>@@ -3033,6 +3033,7 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
> struct brcmf_pno_scanresults_le *pfn_result;
> u32 result_count;
> u32 status;
>+ u32 datalen;
>
> brcmf_dbg(SCAN, "Enter\n");
>
>@@ -3059,6 +3060,14 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
> if (result_count > 0) {
> int i;
>
>+ data += sizeof(struct brcmf_pno_scanresults_le);
>+ netinfo_start = (struct brcmf_pno_net_info_le *)data;
>+ datalen = e->datalen - ((void *)netinfo_start - (void *)pfn_result);
>+ if (datalen < result_count * sizeof(*netinfo)) {
>+ brcmf_err("insufficient event data\n");
>+ goto out_err;
>+ }
>+
> request = kzalloc(sizeof(*request), GFP_KERNEL);
> ssid = kcalloc(result_count, sizeof(*ssid), GFP_KERNEL);
> channel = kcalloc(result_count, sizeof(*channel), GFP_KERNEL);
>@@ -3068,9 +3077,6 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
> }
>
> request->wiphy = wiphy;
>- data += sizeof(struct brcmf_pno_scanresults_le);
>- netinfo_start = (struct brcmf_pno_net_info_le *)data;
>-
> for (i = 0; i < result_count; i++) {
> netinfo = &netinfo_start[i];
> if (!netinfo) {
>@@ -3080,10 +3086,10 @@ brcmf_notify_sched_scan_results(struct brcmf_if *ifp,
> goto out_err;
> }
>
>- brcmf_dbg(SCAN, "SSID:%s Channel:%d\n",
>- netinfo->SSID, netinfo->channel);
> if (netinfo->SSID_len > IEEE80211_MAX_SSID_LEN)
> netinfo->SSID_len = IEEE80211_MAX_SSID_LEN;
>+ brcmf_dbg(SCAN, "SSID:%s Channel:%d\n",
>+ netinfo->SSID, netinfo->channel);
> memcpy(ssid[i].ssid, netinfo->SSID, netinfo->SSID_len);
> ssid[i].ssid_len = netinfo->SSID_len;
> request->n_ssids++;
>diff --git a/drivers/spi/spi-omap-100k.c b/drivers/spi/spi-omap-100k.c
>index e7ffcded4e14..75a5b1913807 100644
>--- a/drivers/spi/spi-omap-100k.c
>+++ b/drivers/spi/spi-omap-100k.c
>@@ -70,10 +70,6 @@
> #define SPI_STATUS_WE (1UL << 1)
> #define SPI_STATUS_RD (1UL << 0)
>
>-#define WRITE 0
>-#define READ 1
>-
>-
> /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
> * cache operations; better heuristics consider wordsize and bitrate.
> */
>diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
>index 68d6df7bc85a..928bf612f6ff 100644
>--- a/include/net/ip_fib.h
>+++ b/include/net/ip_fib.h
>@@ -89,7 +89,7 @@ struct fib_nh {
> int nh_saddr_genid;
> struct rtable __rcu * __percpu *nh_pcpu_rth_output;
> struct rtable __rcu *nh_rth_input;
>- struct fnhe_hash_bucket *nh_exceptions;
>+ struct fnhe_hash_bucket __rcu *nh_exceptions;
> };
>
> /*
>diff --git a/kernel/fork.c b/kernel/fork.c
>index 27f6a67f692e..7dc86b50f925 100644
>--- a/kernel/fork.c
>+++ b/kernel/fork.c
>@@ -1265,9 +1265,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
>
> posix_cpu_timers_init(p);
>
>- do_posix_clock_monotonic_gettime(&p->start_time);
>- p->real_start_time = p->start_time;
>- monotonic_to_bootbased(&p->real_start_time);
> p->io_context = NULL;
> p->audit_context = NULL;
> if (clone_flags & CLONE_THREAD)
>@@ -1422,6 +1419,18 @@ static struct task_struct *copy_process(unsigned long clone_flags,
> INIT_LIST_HEAD(&p->thread_group);
> p->task_works = NULL;
>
>+ /*
>+ * From this point on we must avoid any synchronous user-space
>+ * communication until we take the tasklist-lock. In particular, we do
>+ * not want user-space to be able to predict the process start-time by
>+ * stalling fork(2) after we recorded the start_time but before it is
>+ * visible to the system.
>+ */
>+
>+ do_posix_clock_monotonic_gettime(&p->start_time);
>+ p->real_start_time = p->start_time;
>+ monotonic_to_bootbased(&p->real_start_time);
>+
> /*
> * Make it visible to the rest of the system, but dont wake it up yet.
> * Need tasklist lock for parent etc handling!
>diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c
>index 1fb08f21302e..0334899f1d3e 100644
>--- a/kernel/time/timer_stats.c
>+++ b/kernel/time/timer_stats.c
>@@ -417,7 +417,7 @@ static int __init init_tstats_procfs(void)
> {
> struct proc_dir_entry *pe;
>
>- pe = proc_create("timer_stats", 0644, NULL, &tstats_fops);
>+ pe = proc_create("timer_stats", 0600, NULL, &tstats_fops);
> if (!pe)
> return -ENOMEM;
> return 0;
>diff --git a/mm/percpu.c b/mm/percpu.c
>index 2ddf9a990dbd..7fae38984a21 100644
>--- a/mm/percpu.c
>+++ b/mm/percpu.c
>@@ -1716,8 +1716,8 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
> #endif
> }
>
>- pr_info("PERCPU: Embedded %zu pages/cpu @%p s%zu r%zu d%zu u%zu\n",
>- PFN_DOWN(size_sum), base, ai->static_size, ai->reserved_size,
>+ pr_info("PERCPU: Embedded %zu pages/cpu s%zu r%zu d%zu u%zu\n",
>+ PFN_DOWN(size_sum), ai->static_size, ai->reserved_size,
> ai->dyn_size, ai->unit_size);
>
> rc = pcpu_setup_first_chunk(ai, base);
>@@ -1830,8 +1830,8 @@ int __init pcpu_page_first_chunk(size_t reserved_size,
> }
>
> /* we're ready, commit */
>- pr_info("PERCPU: %d %s pages/cpu @%p s%zu r%zu d%zu\n",
>- unit_pages, psize_str, vm.addr, ai->static_size,
>+ pr_info("PERCPU: %d %s pages/cpu s%zu r%zu d%zu\n",
>+ unit_pages, psize_str, ai->static_size,
> ai->reserved_size, ai->dyn_size);
>
> rc = pcpu_setup_first_chunk(ai, vm.addr);
>diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
>index 6f44569623ae..83656bdb00e2 100644
>--- a/net/ipv4/fib_semantics.c
>+++ b/net/ipv4/fib_semantics.c
>@@ -157,9 +157,12 @@ static void rt_fibinfo_free(struct rtable __rcu **rtp)
>
> static void free_nh_exceptions(struct fib_nh *nh)
> {
>- struct fnhe_hash_bucket *hash = nh->nh_exceptions;
>+ struct fnhe_hash_bucket *hash;
> int i;
>
>+ hash = rcu_dereference_protected(nh->nh_exceptions, 1);
>+ if (!hash)
>+ return;
> for (i = 0; i < FNHE_HASH_SIZE; i++) {
> struct fib_nh_exception *fnhe;
>
>@@ -206,8 +209,7 @@ static void free_fib_info_rcu(struct rcu_head *head)
> change_nexthops(fi) {
> if (nexthop_nh->nh_dev)
> dev_put(nexthop_nh->nh_dev);
>- if (nexthop_nh->nh_exceptions)
>- free_nh_exceptions(nexthop_nh);
>+ free_nh_exceptions(nexthop_nh);
> rt_fibinfo_free_cpus(nexthop_nh->nh_pcpu_rth_output);
> rt_fibinfo_free(&nexthop_nh->nh_rth_input);
> } endfor_nexthops(fi);
>diff --git a/net/ipv4/route.c b/net/ipv4/route.c
>index 4f7c378c841d..e0d59ff394b2 100644
>--- a/net/ipv4/route.c
>+++ b/net/ipv4/route.c
>@@ -487,13 +487,15 @@ EXPORT_SYMBOL(ip_idents_reserve);
> void __ip_select_ident(struct iphdr *iph, int segs)
> {
> static u32 ip_idents_hashrnd __read_mostly;
>+ static u32 ip_idents_hashrnd_extra __read_mostly;
> u32 hash, id;
>
> net_get_random_once(&ip_idents_hashrnd, sizeof(ip_idents_hashrnd));
>+ net_get_random_once(&ip_idents_hashrnd_extra, sizeof(ip_idents_hashrnd_extra));
>
> hash = jhash_3words((__force u32)iph->daddr,
> (__force u32)iph->saddr,
>- iph->protocol,
>+ iph->protocol ^ ip_idents_hashrnd_extra,
> ip_idents_hashrnd);
> id = ip_idents_reserve(hash, segs);
> iph->id = htons(id);
>@@ -633,12 +635,12 @@ static void update_or_create_fnhe(struct fib_nh *nh, __be32 daddr, __be32 gw,
>
> spin_lock_bh(&fnhe_lock);
>
>- hash = nh->nh_exceptions;
>+ hash = rcu_dereference(nh->nh_exceptions);
> if (!hash) {
> hash = kzalloc(FNHE_HASH_SIZE * sizeof(*hash), GFP_ATOMIC);
> if (!hash)
> goto out_unlock;
>- nh->nh_exceptions = hash;
>+ rcu_assign_pointer(nh->nh_exceptions, hash);
> }
>
> hash += hval;
>@@ -1291,7 +1293,7 @@ static void ip_del_fnhe(struct fib_nh *nh, __be32 daddr)
>
> static struct fib_nh_exception *find_exception(struct fib_nh *nh, __be32 daddr)
> {
>- struct fnhe_hash_bucket *hash = nh->nh_exceptions;
>+ struct fnhe_hash_bucket *hash = rcu_dereference(nh->nh_exceptions);
> struct fib_nh_exception *fnhe;
> u32 hval;
>
>diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
>index e59b30054b0f..bb98cde51476 100644
>--- a/net/ipv6/ip6_output.c
>+++ b/net/ipv6/ip6_output.c
>@@ -541,12 +541,15 @@ static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
> static void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt)
> {
> static u32 ip6_idents_hashrnd __read_mostly;
>+ static u32 ip6_idents_hashrnd_extra __read_mostly;
> u32 hash, id;
>
> net_get_random_once(&ip6_idents_hashrnd, sizeof(ip6_idents_hashrnd));
>+ net_get_random_once(&ip6_idents_hashrnd_extra, sizeof(ip6_idents_hashrnd_extra));
>
> hash = __ipv6_addr_jhash(&rt->rt6i_dst.addr, ip6_idents_hashrnd);
> hash = __ipv6_addr_jhash(&rt->rt6i_src.addr, hash);
>+ hash = jhash_1word(hash, ip6_idents_hashrnd_extra);
>
> id = ip_idents_reserve(hash, 1);
> fhdr->identification = htonl(id);



[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2019-05-12 15:12    [W:0.037 / U:2.336 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site