On Sat, Sep 8, 2012 at 11:47 PM, Ezequiel Garcia <elezegarcia@xxxxxxxxx> wrote: > Previously the strndup_user allocation was being done through memdup_user, > and the caller was wrongly traced as being strndup_user > (the correct trace must report the caller of strndup_user). > > This is a common problem: in order to get accurate callsite tracing, > a utils function can't allocate through another utils function, > but instead do the allocation himself (or inlined). > > Here we fix this by creating an always inlined dup_user() function to > performed the real allocation and to be used by memdup_user and strndup_user. > > Cc: Pekka Enberg <penberg@xxxxxxxxxx> > Signed-off-by: Ezequiel Garcia <elezegarcia@xxxxxxxxx> > --- > mm/util.c | 11 ++++++++--- > 1 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/mm/util.c b/mm/util.c > index dc3036c..48d3ff8b 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -76,14 +76,14 @@ void *kmemdup(const void *src, size_t len, gfp_t gfp) > EXPORT_SYMBOL(kmemdup); > > /** > - * memdup_user - duplicate memory region from user space > + * dup_user - duplicate memory region from user space > * > * @src: source address in user space > * @len: number of bytes to copy > * > * Returns an ERR_PTR() on failure. > */ > -void *memdup_user(const void __user *src, size_t len) > +static __always_inline void *dup_user(const void __user *src, size_t len) > { > void *p; > > @@ -103,6 +103,11 @@ void *memdup_user(const void __user *src, size_t len) > > return p; > } > + > +void *memdup_user(const void __user *src, size_t len) > +{ > + return dup_user(src, len); > +} > EXPORT_SYMBOL(memdup_user); > > static __always_inline void *__do_krealloc(const void *p, size_t new_size, > @@ -214,7 +219,7 @@ char *strndup_user(const char __user *s, long n) > if (length > n) > return ERR_PTR(-EINVAL); > > - p = memdup_user(s, length); > + p = dup_user(s, length); > > if (IS_ERR(p)) > return p; Looks good to me. Andrew, do you want to pick this up? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>