lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 25 Jul 2014 08:41:37 -0400
From:	Prarit Bhargava <prarit@...hat.com>
To:	Viresh Kumar <viresh.kumar@...aro.org>
CC:	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
	"Rafael J. Wysocki" <rjw@...ysocki.net>,
	Lenny Szubowicz <lszubowi@...hat.com>,
	"linux-pm@...r.kernel.org" <linux-pm@...r.kernel.org>
Subject: Re: [PATCH] cpufreq, store_scaling_governor requires policy->rwsem
 to be held for duration of changing governors



On 07/25/2014 07:32 AM, Prarit Bhargava wrote:
> 
> 
> On 07/25/2014 12:27 AM, Viresh Kumar wrote:
>> On 24 July 2014 23:24, Prarit Bhargava <prarit@...hat.com> wrote:
>>> The closer I looked at commit 955ef483, the more questions I have.  The first
>>> thing is that it appears that the stacktrace includes function calls that
>>> are not, and never have been, part of the linux.git tree, ie) the call trace
>>> shows
>>>
>>>             [<c0055a79>] lock_acquire+0x61/0xbc
>>>             [<c00fabf1>] sysfs_addrm_finish+0xc1/0x128
>>>             [<c00f9819>] sysfs_hash_and_remove+0x35/0x64
>>>             [<c00fbe6f>] remove_files.isra.0+0x1b/0x24
>>>             [<c00fbea5>] sysfs_remove_group+0x2d/0xa8
>>>             [<c02f9a0b>] cpufreq_governor_interactive+0x13b/0x35c
>>>             [<c02f61df>] __cpufreq_governor+0x2b/0x8c
>>>             [<c02f6579>] __cpufreq_set_policy+0xa9/0xf8
>>>             [<c02f6b75>] store_scaling_governor+0x61/0x100
>>>             [<c02f6f4d>] store+0x39/0x60
>>>             [<c00f9b81>] sysfs_write_file+0xed/0x114
>>>             [<c00b3fd1>] vfs_write+0x65/0xd8
>>>             [<c00b424b>] sys_write+0x2f/0x50
>>>             [<c000cdc1>] ret_fast_syscall+0x1/0x52
>>>
>>> and the top part of the stack from cpufreq_governor_interactive() appear to
>>> be for a driver that is not in the linux.git tree.  Google search does show
>>> that it exists in various android trees, however, my concern is that the "core"
>>> scaling governors are now broken because of an out tree driver.
>>
>> Actually the problem did occur with ondemand/conservative as well. And
>> the problem was, we accessed something from cpufreq sysfs and then were
>> trying to remove that only and so some recursive locking stuff..

> I'll try to dig in further to see if I can reproduce the above lock inversion.

Okay -- I think I got it:  The above happens only with an *older* sysfs stack
which acquires a &buffer->mutex.  This no longer happens with the new sysfs
stack so the above change is still no longer necessary in mainline linux.git (at
least AFAICT).

In any case, the change still appears to be incorrect in that it breaks the
rwsem locking scheme of the cpufreq policy.  I'll do some additional testing on
various systems and get back to you in a few days.

P.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists