lkml.org 
[lkml]   [2020]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/15] print_integer, proc: rewrite /proc/self via print_integer()
    Date
    Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
    ---
    fs/proc/internal.h | 1 +
    fs/proc/self.c | 8 ++++++--
    2 files changed, 7 insertions(+), 2 deletions(-)

    diff --git a/fs/proc/internal.h b/fs/proc/internal.h
    index 917cc85e3466..8abfd2fa0963 100644
    --- a/fs/proc/internal.h
    +++ b/fs/proc/internal.h
    @@ -13,6 +13,7 @@
    #include <linux/binfmts.h>
    #include <linux/sched/coredump.h>
    #include <linux/sched/task.h>
    +#include "../../lib/print-integer.h"

    struct ctl_table_header;
    struct mempolicy;
    diff --git a/fs/proc/self.c b/fs/proc/self.c
    index 57c0a1047250..c8a1662e2cfd 100644
    --- a/fs/proc/self.c
    +++ b/fs/proc/self.c
    @@ -14,15 +14,19 @@ static const char *proc_self_get_link(struct dentry *dentry,
    {
    struct pid_namespace *ns = proc_pid_ns(inode);
    pid_t tgid = task_tgid_nr_ns(current, ns);
    + char buf[10 + 1];
    + char *p = buf + sizeof(buf);
    char *name;

    if (!tgid)
    return ERR_PTR(-ENOENT);
    /* max length of unsigned int in decimal + NULL term */
    - name = kmalloc(10 + 1, dentry ? GFP_KERNEL : GFP_ATOMIC);
    + name = kmalloc(sizeof(buf), dentry ? GFP_KERNEL : GFP_ATOMIC);
    if (unlikely(!name))
    return dentry ? ERR_PTR(-ENOMEM) : ERR_PTR(-ECHILD);
    - sprintf(name, "%u", tgid);
    + *--p = '\0';
    + p = _print_integer_u32(p, tgid);
    + memcpy(name, p, buf + sizeof(buf) - p);
    set_delayed_call(done, kfree_link, name);
    return name;
    }
    --
    2.24.1
    \
     
     \ /
      Last update: 2020-04-20 22:58    [W:4.356 / U:0.440 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site