Re: [PATCH v2 1/2] mm: add GFP mask param to strndup_user
From: Andrew Morton <akpm@linux-foundation.org>
Date: 2020-08-22 03:51:59
Also in:
linux-api, lkml
On Fri, 21 Aug 2020 20:28:26 -0700 Pascal Bouchareine [off-list ref] 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?
quoted hunk ↗ jump to hunk
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)?