From: Bhaskar Chowdhury <unixbhaskar@gmail.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
torvalds@linux-foundation.org, Jiri Slaby <jslaby@suse.cz>,
stable@vger.kernel.org, lwn@lwn.net
Subject: Re: Linux 3.16.67
Date: Sun, 12 May 2019 18:42:30 +0530 [thread overview]
Message-ID: <20190512131230.GA28303@Gentoo> (raw)
In-Reply-To: <lsq.1557584591.907202651@decadent.org.uk>
[-- Attachment #1: Type: text/plain, Size: 12807 bytes --]
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);
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
prev parent reply other threads:[~2019-05-12 13:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-12 12:29 Linux 3.16.67 Ben Hutchings
2019-05-12 13:12 ` Bhaskar Chowdhury [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190512131230.GA28303@Gentoo \
--to=unixbhaskar@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=ben@decadent.org.uk \
--cc=jslaby@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=lwn@lwn.net \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.