From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934076Ab3BMOha (ORCPT ); Wed, 13 Feb 2013 09:37:30 -0500 Received: from metis.ext.pengutronix.de ([92.198.50.35]:44159 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756877Ab3BMOh3 (ORCPT ); Wed, 13 Feb 2013 09:37:29 -0500 Message-ID: <511BA51E.9000606@pengutronix.de> Date: Wed, 13 Feb 2013 15:37:18 +0100 From: Marc Kleine-Budde Organization: Pengutronix e.K. User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130107 Thunderbird/17.0.2 MIME-Version: 1.0 To: dedekind1@gmail.com CC: linux-mtd@lists.infradead.org, linux-security-module@vger.kernel.org, LKML , "kernel@pengutronix.de" Subject: Re: SELinux + ubifs: possible circular locking dependency References: <51123C80.2050400@pengutronix.de> <5115076E.3070703@pengutronix.de> <1360759673.12703.147.camel@sauron.fi.intel.com> In-Reply-To: <1360759673.12703.147.camel@sauron.fi.intel.com> X-Enigmail-Version: 1.5 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="----enig2TEKQGUJXEENPRNERVKOV" X-SA-Exim-Connect-IP: 2001:6f8:1178:4:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) ------enig2TEKQGUJXEENPRNERVKOV Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 02/13/2013 01:47 PM, Artem Bityutskiy wrote: >> I'm on a arm imx28 v3.8-rc6 (+ a handfull of patches to support the >> custom board) but no modifications on ubifs, selinux or the vfs layer.= >> And not including the xattr patches by Subodh Nijsure. >> >> When booting with SELinux and lockdep enabled I see this _possible_ >> circular locking dependency: >=20 > I guess one needs to really understand how lockdep works, because it > seems there is no direct 'tnc_mutex -> isec->lock', and lockdep somehow= > deducts this connection inderectly. >=20 > However, it seems I see what _may_ be the reason, and here is a patch > which I think may fix the issue. Would you please test/review it? It is= > inlined and also attached. Thanks, [...] The compiler complains security/selinux/hooks.c:210:2: error: incompatible type for argument 3 o= f 'lockdep_init_map' In file included from include/linux/spinlock_types.h:18:0, from include/linux/spinlock.h:81, from include/linux/seqlock.h:29, from include/linux/time.h:5, from include/uapi/linux/timex.h:56, from include/linux/timex.h:56, from include/linux/sched.h:17, from include/linux/tracehook.h:49, from security/selinux/hooks.c:29: include/linux/lockdep.h:279:13: note: expected 'struct lock_class_key *' = but argument is of type 'struct lock_class_key' > diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c > index ef26e96..328180e 100644 > --- a/security/selinux/hooks.c > +++ b/security/selinux/hooks.c > @@ -207,6 +207,7 @@ static int inode_alloc_security(struct inode *inode= ) > return -ENOMEM; > =20 > mutex_init(&isec->lock); > + lockdep_set_class(&isec->lock, inode->i_sb->s_type->i_mutex_key); So I added an "&", so that the line looks like that: + lockdep_set_class(&isec->lock, &inode->i_sb->s_type->i_mutex_key)= ; > INIT_LIST_HEAD(&isec->list); > isec->inode =3D inode; > isec->sid =3D SECINITSID_UNLABELED; >=20 That solves original circular lock warning, but brings these two: > [ 0.213843] ------------[ cut here ]------------ > [ 0.218687] WARNING: at kernel/lockdep.c:702 __lock_acquire+0x1824/0= x1c58() > [ 0.225875] Modules linked in: > [ 0.229156] [] (unwind_backtrace+0x0/0xf0) from [] (warn_slowpath_common+0x4c/0x64) > [ 0.238812] [] (warn_slowpath_common+0x4c/0x64) from [] (warn_slowpath_null+0x1c/0x24) > [ 0.248750] [] (warn_slowpath_null+0x1c/0x24) from [] (__lock_acquire+0x1824/0x1c58) > [ 0.258500] [] (__lock_acquire+0x1824/0x1c58) from [] (lock_acquire+0x88/0x9c) > [ 0.267750] [] (lock_acquire+0x88/0x9c) from [] = (mutex_lock_nested+0x5c/0x2ec) > [ 0.276968] [] (mutex_lock_nested+0x5c/0x2ec) from [] (lock_mount+0x1c/0xbc) > [ 0.286031] [] (lock_mount+0x1c/0xbc) from [] (d= o_add_mount+0x18/0xc8) > [ 0.294531] [] (do_add_mount+0x18/0xc8) from [] = (do_mount+0x1cc/0x8d0) > [ 0.303062] [] (do_mount+0x1cc/0x8d0) from [] (s= ys_mount+0x84/0xb8) > [ 0.311343] [] (sys_mount+0x84/0xb8) from [] (de= vtmpfsd+0x4c/0x2b8) > [ 0.319593] [] (devtmpfsd+0x4c/0x2b8) from [] (k= thread+0xa4/0xb0) > [ 0.327656] [] (kthread+0xa4/0xb0) from [] (ret_= from_fork+0x14/0x2c) > [ 0.336062] ---[ end trace 1b75b31a2719ed1c ]--- The warning comes from: list_for_each_entry(class, hash_head, hash_entry) { if (class->key =3D=3D key) { /* * Huh! same key, different name? Did someone trample * on some memory? We're most confused. */ WARN_ON_ONCE(class->name !=3D lock->name); return class; } } [...] > [ 0.342000] devtmpfs: initialized > [ 0.350187] pinctrl core: initialized pinctrl subsystem > [ 0.358000] > [ 0.359656] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D > [ 0.365218] [ INFO: possible recursive locking detected ] > [ 0.370812] 3.8.0-rc7-00011-g7a589e1-dirty #108 Tainted: G W > [ 0.377562] --------------------------------------------- > [ 0.383125] swapper/1 is trying to acquire lock: > [ 0.387906] (&inode->i_sb->s_type->i_mutex_key#7){+.+.+.}, at: [] inode_doinit_with_dentry+0x8c/0x55c > [ 0.398437] > [ 0.398437] but task is already holding lock: > [ 0.404562] (&inode->i_sb->s_type->i_mutex_key#7){+.+.+.}, at: [] __create_file+0x50/0x25c > [ 0.414093] > [ 0.414093] other info that might help us debug this: > [ 0.420906] Possible unsafe locking scenario: > [ 0.420906] > [ 0.427125] CPU0 > [ 0.429687] ---- > [ 0.432250] lock(&inode->i_sb->s_type->i_mutex_key#7); > [ 0.437781] lock(&inode->i_sb->s_type->i_mutex_key#7); > [ 0.443312] > [ 0.443312] *** DEADLOCK *** > [ 0.443312] > [ 0.449593] May be due to missing lock nesting notation > [ 0.449593] > [ 0.456687] 1 lock held by swapper/1: > [ 0.460500] #0: (&inode->i_sb->s_type->i_mutex_key#7){+.+.+.}, at:= [] __create_file+0x50/0x25c > [ 0.470468] > [ 0.470468] stack backtrace: > [ 0.475125] [] (unwind_backtrace+0x0/0xf0) from [] (__lock_acquire+0x14ac/0x1c58) > [ 0.484625] [] (__lock_acquire+0x14ac/0x1c58) from [] (lock_acquire+0x88/0x9c) > [ 0.493843] [] (lock_acquire+0x88/0x9c) from [] = (mutex_lock_nested+0x5c/0x2ec) > [ 0.503093] [] (mutex_lock_nested+0x5c/0x2ec) from [] (inode_doinit_with_dentry+0x8c/0x55c) > [ 0.513468] [] (inode_doinit_with_dentry+0x8c/0x55c) from = [] (security_d_instantiate+0x1c/0x34) > [ 0.524187] [] (security_d_instantiate+0x1c/0x34) from [] (debugfs_mknod.part.15.constprop.18+0x94/0x128) > [ 0.535812] [] (debugfs_mknod.part.15.constprop.18+0x94/0x= 128) from [] (__create_file+0x1b0/0x25c) > [ 0.546781] [] (__create_file+0x1b0/0x25c) from [] (debugfs_create_dir+0x1c/0x28) > [ 0.556312] [] (debugfs_create_dir+0x1c/0x28) from [] (pinctrl_init+0x1c/0xd0) > [ 0.565531] [] (pinctrl_init+0x1c/0xd0) from [] = (do_one_initcall+0x108/0x17c) > [ 0.574656] [] (do_one_initcall+0x108/0x17c) from [] (kernel_init_freeable+0xec/0x1b4) > [ 0.584593] [] (kernel_init_freeable+0xec/0x1b4) from [] (kernel_init+0x8/0xe4) > [ 0.593906] [] (kernel_init+0x8/0xe4) from [] (r= et_from_fork+0x14/0x2c) Marc --=20 Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | ------enig2TEKQGUJXEENPRNERVKOV Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlEbpSEACgkQjTAFq1RaXHO/pwCff4DFQOWdtfjkY82Qkk7UVCgs jUMAnR7Zb3magInpJDLlwwEChf01hDgP =nH00 -----END PGP SIGNATURE----- ------enig2TEKQGUJXEENPRNERVKOV--