All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Jesper Dangaard Brouer <brouer@redhat.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Ying Huang <ying.huang@intel.com>, Michal Hocko <mhocko@suse.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] mm, vmstat: Make sure mutex is a global static
Date: Wed, 8 Nov 2017 07:21:20 -0800	[thread overview]
Message-ID: <CAGXu5jKiGLAcL4QG2BoAms+JaHH-4piVe--YF3X9RhXZN53Z8Q@mail.gmail.com> (raw)
In-Reply-To: <da45fb2f-d630-3152-6138-6f67518e2b1c@suse.cz>

On Tue, Nov 7, 2017 at 11:43 PM, Vlastimil Babka <vbabka@suse.cz> wrote:
> On 11/07/2017 10:38 PM, Kees Cook wrote:
>> The mutex in sysctl_vm_numa_stat_handler() needs to be a global static, not
>> a stack variable, otherwise it doesn't serve any purpose. Also, reading the
>> file with CONFIG_LOCKDEP=y will complain:
>
> Oops, good catch.
>
>> [   63.258593] INFO: trying to register non-static key.
>> [   63.259113] the code is fine but needs lockdep annotation.
>> [   63.259596] turning off the locking correctness validator.
>> [   63.260073] CPU: 1 PID: 4102 Comm: perl Not tainted 4.14.0-rc8-next-20171107+ #419
>> [   63.260769] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
>> [   63.261570] Call Trace:
>> [   63.261783]  dump_stack+0x5f/0x86
>> [   63.262062]  register_lock_class+0xe4/0x550
>> [   63.262408]  ? __lock_acquire+0x308/0x1170
>> [   63.262746]  __lock_acquire+0x7e/0x1170
>> [   63.263063]  lock_acquire+0x9d/0x1d0
>> [   63.263363]  ? sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.263777]  ? sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.264192]  __mutex_lock+0xb8/0x9a0
>> [   63.264488]  ? sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.264942]  ? sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.265398]  ? sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.265840]  sysctl_vm_numa_stat_handler+0x8f/0x2d0
>> [   63.266270]  proc_sys_call_handler+0xe3/0x100
>> [   63.266655]  __vfs_read+0x33/0x1b0
>> [   63.266957]  vfs_read+0xa6/0x150
>> [   63.267244]  SyS_read+0x55/0xc0
>> [   63.267525]  do_syscall_64+0x56/0x140
>> [   63.267850]  entry_SYSCALL64_slow_path+0x25/0x25
>>
>> Fixes: 920d5f77d1a25 ("mm, sysctl: make NUMA stats configurable")
>
> Note that this hash is specific to particular next-$DATE as mmotm is
> reimported each day.

Ah yes, duh. :)

>
>> Cc: Jesper Dangaard Brouer <brouer@redhat.com>
>> Cc: Dave Hansen <dave.hansen@intel.com>
>> Cc: Ying Huang <ying.huang@intel.com>
>> Cc: Vlastimil Babka <vbabka@suse.cz>
>> Cc: Michal Hocko <mhocko@suse.com>
>> Signed-off-by: Kees Cook <keescook@chromium.org>
>> ---
>>  mm/vmstat.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/mm/vmstat.c b/mm/vmstat.c
>> index e0593434fd58..40b2db6db6b1 100644
>> --- a/mm/vmstat.c
>> +++ b/mm/vmstat.c
>> @@ -72,11 +72,12 @@ static void invalid_numa_statistics(void)
>>       zero_global_numa_counters();
>>  }
>>
>> +static DEFINE_MUTEX(vm_numa_stat_lock);
>> +
>>  int sysctl_vm_numa_stat_handler(struct ctl_table *table, int write,
>>               void __user *buffer, size_t *length, loff_t *ppos)
>>  {
>>       int ret, oldval;
>> -     DEFINE_MUTEX(vm_numa_stat_lock);
>
> Yeah it was Michal who suggested scoping the mutex here instead of
> global scope, but I think he didn't mean to remove the 'static'
> qualifier, and we both missed that in the review :(
> So the scope under sysctl_vm_numa_stat_handler() should be okay, just
> with the 'static' added.

That part is a matter of taste, I guess. :) But yes, static is important.

-Kees

-- 
Kees Cook
Pixel Security

  parent reply	other threads:[~2017-11-08 15:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-07 21:38 [PATCH] mm, vmstat: Make sure mutex is a global static Kees Cook
2017-11-08  7:43 ` Vlastimil Babka
2017-11-08 14:20   ` Michal Hocko
2017-11-08 15:21   ` Kees Cook [this message]
2017-11-09  7:50     ` Michal Hocko
2017-11-09  1:10 ` kemi

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=CAGXu5jKiGLAcL4QG2BoAms+JaHH-4piVe--YF3X9RhXZN53Z8Q@mail.gmail.com \
    --to=keescook@chromium.org \
    --cc=akpm@linux-foundation.org \
    --cc=brouer@redhat.com \
    --cc=dave.hansen@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhocko@suse.com \
    --cc=vbabka@suse.cz \
    --cc=ying.huang@intel.com \
    /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.