[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200821205154.365e230dbf6f2b93a47443c4@linux-foundation.org>
Date: Fri, 21 Aug 2020 20:51:54 -0700
From: Andrew Morton <akpm@...ux-foundation.org>
To: Pascal Bouchareine <kalou@....net>
Cc: linux-kernel@...r.kernel.org, linux-api@...r.kernel.org,
netdev@...r.kernel.org, "David S. Miller" <davem@...emloft.net>,
"Jakub Kicinski" <kuba@...nel.org>,
"Alexey Dobriyan" <adobriyan@...il.com>,
"Al Viro" <viro@...iv.linux.org.uk>
Subject: Re: [PATCH v2 1/2] mm: add GFP mask param to strndup_user
On Fri, 21 Aug 2020 20:28:26 -0700 Pascal Bouchareine <kalou@....net> wrote:
> Let caller specify allocation.
> Preserve existing calls with GFP_USER.
>
> 21 files changed, 65 insertions(+), 43 deletions(-)
Why change all existing callsites so that one callsite can pass in a
different gfp_t?
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index 1ca609f66fdf..3d94ba811f4b 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -326,7 +326,7 @@ static __poll_t dma_buf_poll(struct file *file, poll_table *poll)
> */
> static long dma_buf_set_name(struct dma_buf *dmabuf, const char __user *buf)
> {
> - char *name = strndup_user(buf, DMA_BUF_NAME_LEN);
> + char *name = strndup_user(buf, DMA_BUF_NAME_LEN, GFP_USER);
> long ret = 0;
Wouldn't
#include <linux/gfp.h>
char *__strndup_user(const char __user *s, long n, gfp_t gfp);
static inline char *strndup_user(const char __user *s, long n)
{
return __strndup_user(s, n, GFP_USER);
}
be simpler?
Also...
why does strndup_user() use GFP_USER? Nobody will be mapping the
resulting strings into user pagetables (will they?). This was done by
Al's 6c2c97a24f096e32, which doesn't have a changelog :(
In [patch 2/2],
+ desc = strndup_user(user_desc, SK_MAX_DESC_SIZE, GFP_KERNEL_ACCOUNT);
if GFP_USER is legit then shouldn't this be GFP_USER_ACCOUNT (ie,
GFP_USER|__GFP_ACCOUNT)?
Powered by blists - more mailing lists