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  linux-cve-announce  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:   Mon, 22 May 2017 13:51:52 +0200
From:   Michal Hocko <mhocko@...nel.org>
To:     Wei Yongjun <weiyj.lk@...il.com>
Cc:     jinqian@...roid.com, gregkh@...uxfoundation.org,
        lstoakes@...il.com, jack@...e.cz, christian.koenig@....com,
        Wei Yongjun <weiyongjun1@...wei.com>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH] goldfish_pipe: use GFP_ATOMIC under spin lock

On Sun 21-05-17 09:48:36, Michal Hocko wrote:
> On Sun 21-05-17 00:45:46, Wei Yongjun wrote:
> > From: Wei Yongjun <weiyongjun1@...wei.com>
> > 
> > The function get_free_pipe_id_locked() is called from
> > goldfish_pipe_open() with a lock is held, so we should
> > use GFP_ATOMIC instead of GFP_KERNEL.
> 
> Why is GFP_NOWAIT insufficient? Does this path needs an access to memory
> reserves?

And now when looking at the code more deeply, wouldn't it be much better
to simply do the allocation outside of the spin lock and do assignments
with the lock held?

> 
> > Signed-off-by: Wei Yongjun <weiyongjun1@...wei.com>
> > ---
> >  drivers/platform/goldfish/goldfish_pipe.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
> > index 2de1e60..5f36721 100644
> > --- a/drivers/platform/goldfish/goldfish_pipe.c
> > +++ b/drivers/platform/goldfish/goldfish_pipe.c
> > @@ -704,7 +704,7 @@ static int get_free_pipe_id_locked(struct goldfish_pipe_dev *dev)
> >  		/* Reallocate the array */
> >  		u32 new_capacity = 2 * dev->pipes_capacity;
> >  		struct goldfish_pipe **pipes =
> > -			kcalloc(new_capacity, sizeof(*pipes), GFP_KERNEL);
> > +			kcalloc(new_capacity, sizeof(*pipes), GFP_ATOMIC);
> >  		if (!pipes)
> >  			return -ENOMEM;
> >  		memcpy(pipes, dev->pipes, sizeof(*pipes) * dev->pipes_capacity);
> > 
> 
> -- 
> Michal Hocko
> SUSE Labs

-- 
Michal Hocko
SUSE Labs

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ