On Fri, 21 Aug 2020 20:28:26 -0700 Pascal Bouchareine <kalou@xxxxxxx> 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)?