Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1686736 > unrolled thread

[PATCH 4.12 00/10] 4.12.2-stable review

Started byGreg Kroah-Hartman <gregkh@linuxfoundation.org>
First post2017-07-13 18:10 +0200
Last post2017-07-14 13:50 +0200
Articles 8 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 4.12 00/10] 4.12.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-13 18:10 +0200
    [PATCH 4.12 03/10] proc: Fix proc_sys_prune_dcache to hold a sb reference Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-13 18:10 +0200
    [PATCH 4.12 02/10] imx-serial: RX DMA startup latency Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-13 18:10 +0200
    Re: [PATCH 4.12 00/10] 4.12.2-stable review Guenter Roeck <linux@roeck-us.net> - 2017-07-14 04:10 +0200
      Re: [PATCH 4.12 00/10] 4.12.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-14 12:00 +0200
    Re: [PATCH 4.12 00/10] 4.12.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-14 12:00 +0200
    Re: [PATCH 4.12 00/10] 4.12.2-stable review Mark Brown <broonie@kernel.org> - 2017-07-14 13:20 +0200
      Re: [PATCH 4.12 00/10] 4.12.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-07-14 13:50 +0200

#1686736 — [PATCH 4.12 00/10] 4.12.2-stable review

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-13 18:10 +0200
Subject[PATCH 4.12 00/10] 4.12.2-stable review
Message-ID<u2Oxm-7s0-65@gated-at.bofh.it>
This is the start of the stable review cycle for the 4.12.2 release.
There are 10 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Sat Jul 15 15:40:02 UTC 2017.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.12.2-rc1.gz
or in the git tree and branch at:
  git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.12.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 4.12.2-rc1

Mikulas Patocka <mpatocka@redhat.com>
    x86/mm/pat: Don't report PAT on CPUs that don't support it

Chao Yu <yuchao0@huawei.com>
    ext4: check return value of kstrtoull correctly in reserved_clusters_store

Jason A. Donenfeld <Jason@zx2c4.com>
    crypto: rsa-pkcs1pad - use constant time memory comparison for MACs

Horia Geantă <horia.geanta@nxp.com>
    crypto: caam - fix gfp allocation flags (part I)

Ian Abbott <abbotti@mev.co.uk>
    staging: comedi: fix clean-up of comedi_class in comedi_init()

Malcolm Priestley <tvboxspy@gmail.com>
    staging: vt6556: vnt_start Fix missing call to vnt_key_init_table.

Kirill Tkhai <ktkhai@virtuozzo.com>
    locking/rwsem-spinlock: Fix EINTR branch in __down_write_common()

Eric W. Biederman <ebiederm@xmission.com>
    proc: Fix proc_sys_prune_dcache to hold a sb reference

Peter Senna Tschudin <peter.senna@collabora.com>
    imx-serial: RX DMA startup latency

Cong Wang <xiyou.wangcong@gmail.com>
    mqueue: fix a use-after-free in sys_mq_notify()


-------------

Diffstat:

 Makefile                             |  4 ++--
 arch/x86/include/asm/pat.h           |  1 +
 arch/x86/kernel/setup.c              |  7 ++++++
 arch/x86/mm/pat.c                    | 28 ++++++++++-------------
 crypto/rsa-pkcs1pad.c                |  2 +-
 drivers/crypto/caam/caamalg.c        |  3 +--
 drivers/staging/comedi/comedi_fops.c |  1 +
 drivers/staging/vt6656/main_usb.c    |  3 +++
 drivers/tty/serial/imx.c             | 26 +++++-----------------
 fs/ext4/sysfs.c                      |  2 +-
 fs/proc/internal.h                   |  2 +-
 fs/proc/proc_sysctl.c                | 43 +++++++++++++++++++++++++-----------
 include/linux/sysctl.h               |  2 +-
 ipc/mqueue.c                         |  4 +++-
 kernel/locking/rwsem-spinlock.c      |  4 ++--
 15 files changed, 71 insertions(+), 61 deletions(-)

[toc] | [next] | [standalone]


#1686748 — [PATCH 4.12 03/10] proc: Fix proc_sys_prune_dcache to hold a sb reference

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-13 18:10 +0200
Subject[PATCH 4.12 03/10] proc: Fix proc_sys_prune_dcache to hold a sb reference
Message-ID<u2OQG-7O6-45@gated-at.bofh.it>
In reply to#1686736
4.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric W. Biederman <ebiederm@xmission.com>

commit 2fd1d2c4ceb2248a727696962cf3370dc9f5a0a4 upstream.

Andrei Vagin writes:
FYI: This bug has been reproduced on 4.11.7
> BUG: Dentry ffff895a3dd01240{i=4e7c09a,n=lo}  still in use (1) [unmount of proc proc]
> ------------[ cut here ]------------
> WARNING: CPU: 1 PID: 13588 at fs/dcache.c:1445 umount_check+0x6e/0x80
> CPU: 1 PID: 13588 Comm: kworker/1:1 Not tainted 4.11.7-200.fc25.x86_64 #1
> Hardware name: CompuLab sbc-flt1/fitlet, BIOS SBCFLT_0.08.04 06/27/2015
> Workqueue: events proc_cleanup_work
> Call Trace:
>  dump_stack+0x63/0x86
>  __warn+0xcb/0xf0
>  warn_slowpath_null+0x1d/0x20
>  umount_check+0x6e/0x80
>  d_walk+0xc6/0x270
>  ? dentry_free+0x80/0x80
>  do_one_tree+0x26/0x40
>  shrink_dcache_for_umount+0x2d/0x90
>  generic_shutdown_super+0x1f/0xf0
>  kill_anon_super+0x12/0x20
>  proc_kill_sb+0x40/0x50
>  deactivate_locked_super+0x43/0x70
>  deactivate_super+0x5a/0x60
>  cleanup_mnt+0x3f/0x90
>  mntput_no_expire+0x13b/0x190
>  kern_unmount+0x3e/0x50
>  pid_ns_release_proc+0x15/0x20
>  proc_cleanup_work+0x15/0x20
>  process_one_work+0x197/0x450
>  worker_thread+0x4e/0x4a0
>  kthread+0x109/0x140
>  ? process_one_work+0x450/0x450
>  ? kthread_park+0x90/0x90
>  ret_from_fork+0x2c/0x40
> ---[ end trace e1c109611e5d0b41 ]---
> VFS: Busy inodes after unmount of proc. Self-destruct in 5 seconds.  Have a nice day...
> BUG: unable to handle kernel NULL pointer dereference at           (null)
> IP: _raw_spin_lock+0xc/0x30
> PGD 0

Fix this by taking a reference to the super block in proc_sys_prune_dcache.

The superblock reference is the core of the fix however the sysctl_inodes
list is converted to a hlist so that hlist_del_init_rcu may be used.  This
allows proc_sys_prune_dache to remove inodes the sysctl_inodes list, while
not causing problems for proc_sys_evict_inode when if it later choses to
remove the inode from the sysctl_inodes list.  Removing inodes from the
sysctl_inodes list allows proc_sys_prune_dcache to have a progress
guarantee, while still being able to drop all locks.  The fact that
head->unregistering is set in start_unregistering ensures that no more
inodes will be added to the the sysctl_inodes list.

Previously the code did a dance where it delayed calling iput until the
next entry in the list was being considered to ensure the inode remained on
the sysctl_inodes list until the next entry was walked to.  The structure
of the loop in this patch does not need that so is much easier to
understand and maintain.

Reported-by: Andrei Vagin <avagin@gmail.com>
Tested-by: Andrei Vagin <avagin@openvz.org>
Fixes: ace0c791e6c3 ("proc/sysctl: Don't grab i_lock under sysctl_lock.")
Fixes: d6cffbbe9a7e ("proc/sysctl: prune stale dentries during unregistering")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/proc/internal.h     |    2 +-
 fs/proc/proc_sysctl.c  |   43 ++++++++++++++++++++++++++++++-------------
 include/linux/sysctl.h |    2 +-
 3 files changed, 32 insertions(+), 15 deletions(-)

--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -67,7 +67,7 @@ struct proc_inode {
 	struct proc_dir_entry *pde;
 	struct ctl_table_header *sysctl;
 	struct ctl_table *sysctl_entry;
-	struct list_head sysctl_inodes;
+	struct hlist_node sysctl_inodes;
 	const struct proc_ns_operations *ns_ops;
 	struct inode vfs_inode;
 };
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -191,7 +191,7 @@ static void init_header(struct ctl_table
 	head->set = set;
 	head->parent = NULL;
 	head->node = node;
-	INIT_LIST_HEAD(&head->inodes);
+	INIT_HLIST_HEAD(&head->inodes);
 	if (node) {
 		struct ctl_table *entry;
 		for (entry = table; entry->procname; entry++, node++)
@@ -261,25 +261,42 @@ static void unuse_table(struct ctl_table
 			complete(p->unregistering);
 }
 
-/* called under sysctl_lock */
 static void proc_sys_prune_dcache(struct ctl_table_header *head)
 {
-	struct inode *inode, *prev = NULL;
+	struct inode *inode;
 	struct proc_inode *ei;
+	struct hlist_node *node;
+	struct super_block *sb;
 
 	rcu_read_lock();
-	list_for_each_entry_rcu(ei, &head->inodes, sysctl_inodes) {
-		inode = igrab(&ei->vfs_inode);
-		if (inode) {
-			rcu_read_unlock();
-			iput(prev);
-			prev = inode;
-			d_prune_aliases(inode);
+	for (;;) {
+		node = hlist_first_rcu(&head->inodes);
+		if (!node)
+			break;
+		ei = hlist_entry(node, struct proc_inode, sysctl_inodes);
+		spin_lock(&sysctl_lock);
+		hlist_del_init_rcu(&ei->sysctl_inodes);
+		spin_unlock(&sysctl_lock);
+
+		inode = &ei->vfs_inode;
+		sb = inode->i_sb;
+		if (!atomic_inc_not_zero(&sb->s_active))
+			continue;
+		inode = igrab(inode);
+		rcu_read_unlock();
+		if (unlikely(!inode)) {
+			deactivate_super(sb);
 			rcu_read_lock();
+			continue;
 		}
+
+		d_prune_aliases(inode);
+		iput(inode);
+		deactivate_super(sb);
+
+		rcu_read_lock();
 	}
 	rcu_read_unlock();
-	iput(prev);
 }
 
 /* called under sysctl_lock, will reacquire if has to wait */
@@ -461,7 +478,7 @@ static struct inode *proc_sys_make_inode
 	}
 	ei->sysctl = head;
 	ei->sysctl_entry = table;
-	list_add_rcu(&ei->sysctl_inodes, &head->inodes);
+	hlist_add_head_rcu(&ei->sysctl_inodes, &head->inodes);
 	head->count++;
 	spin_unlock(&sysctl_lock);
 
@@ -489,7 +506,7 @@ out:
 void proc_sys_evict_inode(struct inode *inode, struct ctl_table_header *head)
 {
 	spin_lock(&sysctl_lock);
-	list_del_rcu(&PROC_I(inode)->sysctl_inodes);
+	hlist_del_init_rcu(&PROC_I(inode)->sysctl_inodes);
 	if (!--head->count)
 		kfree_rcu(head, rcu);
 	spin_unlock(&sysctl_lock);
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -143,7 +143,7 @@ struct ctl_table_header
 	struct ctl_table_set *set;
 	struct ctl_dir *parent;
 	struct ctl_node *node;
-	struct list_head inodes; /* head for proc_inode->sysctl_inodes */
+	struct hlist_head inodes; /* head for proc_inode->sysctl_inodes */
 };
 
 struct ctl_dir {

[toc] | [prev] | [next] | [standalone]


#1686749 — [PATCH 4.12 02/10] imx-serial: RX DMA startup latency

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-13 18:10 +0200
Subject[PATCH 4.12 02/10] imx-serial: RX DMA startup latency
Message-ID<u2OQH-7O6-53@gated-at.bofh.it>
In reply to#1686736
4.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Senna Tschudin <peter.senna@collabora.com>

commit 4dec2f119e86f9c91e60cdd8f0cc057452e331a9 upstream.

18a4208 introduced a change to reduce the RX DMA latency on the first reception
when the serial port was opened for reading. However it was claiming a hardirq
unsafe lock after a hardirq safe lock which is not allowed and causes lockdep
to complain verbosely.

This patch changes the code to always start RX DMA earlier, instead of
relying on the flags used to open the serial port removing the code that
was looking for the serial file flags.

Signed-off-by: Peter Senna Tschudin <peter.senna@collabora.com>
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Fabio Estevam <festevam@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/serial/imx.c |   26 +++++---------------------
 1 file changed, 5 insertions(+), 21 deletions(-)

--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1340,29 +1340,13 @@ static int imx_startup(struct uart_port
 	imx_enable_ms(&sport->port);
 
 	/*
-	 * If the serial port is opened for reading start RX DMA immediately
-	 * instead of waiting for RX FIFO interrupts. In our iMX53 the average
-	 * delay for the first reception dropped from approximately 35000
-	 * microseconds to 1000 microseconds.
+	 * Start RX DMA immediately instead of waiting for RX FIFO interrupts.
+	 * In our iMX53 the average delay for the first reception dropped from
+	 * approximately 35000 microseconds to 1000 microseconds.
 	 */
 	if (sport->dma_is_enabled) {
-		struct tty_struct *tty = sport->port.state->port.tty;
-		struct tty_file_private *file_priv;
-		int readcnt = 0;
-
-		spin_lock(&tty->files_lock);
-
-		if (!list_empty(&tty->tty_files))
-			list_for_each_entry(file_priv, &tty->tty_files, list)
-				if (!(file_priv->file->f_flags & O_WRONLY))
-					readcnt++;
-
-		spin_unlock(&tty->files_lock);
-
-		if (readcnt > 0) {
-			imx_disable_rx_int(sport);
-			start_rx_dma(sport);
-		}
+		imx_disable_rx_int(sport);
+		start_rx_dma(sport);
 	}
 
 	spin_unlock_irqrestore(&sport->port.lock, flags);

[toc] | [prev] | [next] | [standalone]


#1687028

FromGuenter Roeck <linux@roeck-us.net>
Date2017-07-14 04:10 +0200
Message-ID<u2Ydj-5eG-3@gated-at.bofh.it>
In reply to#1686736
On 07/13/2017 08:40 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.12.2 release.
> There are 10 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sat Jul 15 15:40:02 UTC 2017.
> Anything received after that time might be too late.
> 

Build results:
	total: 145 pass: 145 fail: 0
Qemu test results:
	total: 122 pass: 122 fail: 0

Details are available at http://kerneltests.org/builders.

Guenter

[toc] | [prev] | [next] | [standalone]


#1687216

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-14 12:00 +0200
Message-ID<u35ya-1D9-11@gated-at.bofh.it>
In reply to#1687028
On Thu, Jul 13, 2017 at 07:08:54PM -0700, Guenter Roeck wrote:
> On 07/13/2017 08:40 AM, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 4.12.2 release.
> > There are 10 patches in this series, all will be posted as a response
> > to this one.  If anyone has any issues with these being applied, please
> > let me know.
> > 
> > Responses should be made by Sat Jul 15 15:40:02 UTC 2017.
> > Anything received after that time might be too late.
> > 
> 
> Build results:
> 	total: 145 pass: 145 fail: 0
> Qemu test results:
> 	total: 122 pass: 122 fail: 0
> 
> Details are available at http://kerneltests.org/builders.

Thanks for testing all of these and letting me know.

greg k-h

[toc] | [prev] | [next] | [standalone]


#1687221

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-14 12:00 +0200
Message-ID<u35yb-1D9-27@gated-at.bofh.it>
In reply to#1686736
On Thu, Jul 13, 2017 at 03:07:46PM -0700, kernelci.org bot wrote:
> stable-rc/linux-4.12.y boot: 226 boots: 5 failed, 216 passed with 4 offline, 1 conflict (v4.12.1-11-g28917cd49df9)

Should I be concerned about these 5 failures?  No other test systems
shows any problems...

thanks,

greg k-h

[toc] | [prev] | [next] | [standalone]


#1687266

FromMark Brown <broonie@kernel.org>
Date2017-07-14 13:20 +0200
Message-ID<u36NA-2CT-15@gated-at.bofh.it>
In reply to#1686736

[Multipart message — attachments visible in raw view] — view raw

On Thu, Jul 13, 2017 at 03:07:46PM -0700, kernelci.org bot wrote:

> 
>     multi_v7_defconfig
>         imx6ul-pico-hobbit_rootfs:nfs: 1 failed lab
> 
>     mvebu_v5_defconfig
>         kirkwood-openblocks_a7_rootfs:nfs: 1 failed lab
> 
>     multi_v7_defconfig+CONFIG_PROVE_LOCKING=y
>         omap4-panda: 1 failed lab

These look at first glance labs were having a bad day.

>         sun5i-r8-chip: 1 failed lab

This one isn't immediately obvious to me, the kernel got to the end of
boot then nothing from userspace:

    https://storage.kernelci.org/stable-rc/linux-4.12.y/v4.12.1-11-g28917cd49df9/arm/multi_v7_defconfig+CONFIG_PROVE_LOCKING=y/lab-free-electrons/boot-sun5i-r8-chip.html

>     multi_v7_defconfig+CONFIG_SMP=n
>         sun5i-r8-chip: 1 failed lab

Same board, same symptoms.  It's not booting in -next either in a
similar way so I'd not worry about it for now.

[toc] | [prev] | [next] | [standalone]


#1687280

FromGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Date2017-07-14 13:50 +0200
Message-ID<u37gB-2NV-7@gated-at.bofh.it>
In reply to#1687266
On Fri, Jul 14, 2017 at 12:17:03PM +0100, Mark Brown wrote:
> On Thu, Jul 13, 2017 at 03:07:46PM -0700, kernelci.org bot wrote:
> 
> > 
> >     multi_v7_defconfig
> >         imx6ul-pico-hobbit_rootfs:nfs: 1 failed lab
> > 
> >     mvebu_v5_defconfig
> >         kirkwood-openblocks_a7_rootfs:nfs: 1 failed lab
> > 
> >     multi_v7_defconfig+CONFIG_PROVE_LOCKING=y
> >         omap4-panda: 1 failed lab
> 
> These look at first glance labs were having a bad day.
> 
> >         sun5i-r8-chip: 1 failed lab
> 
> This one isn't immediately obvious to me, the kernel got to the end of
> boot then nothing from userspace:
> 
>     https://storage.kernelci.org/stable-rc/linux-4.12.y/v4.12.1-11-g28917cd49df9/arm/multi_v7_defconfig+CONFIG_PROVE_LOCKING=y/lab-free-electrons/boot-sun5i-r8-chip.html
> 
> >     multi_v7_defconfig+CONFIG_SMP=n
> >         sun5i-r8-chip: 1 failed lab
> 
> Same board, same symptoms.  It's not booting in -next either in a
> similar way so I'd not worry about it for now.

Ok, thanks for looking into these.

greg k-h

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web