proc: use initializer for clearing some buffers
authorAlexey Dobriyan <adobriyan@gmail.com>
Fri, 29 Sep 2023 16:30:18 +0000 (19:30 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 18 Oct 2023 21:43:22 +0000 (14:43 -0700)
Save LOC by using dark magic of initialisation instead of memset().

Those buffer aren't passed to userspace directly so padding is not
an issue.

Link: https://lkml.kernel.org/r/3821d3a2-6e10-4629-b0d5-9519d828ab72@p183
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/proc/base.c
fs/proc/task_mmu.c

index c0e971cc6d41c584791461a643d8a9022815c14a..601329f9629a0ae46c0923ceae33fa5cd56b63c6 100644 (file)
@@ -1153,11 +1153,10 @@ err_unlock:
 static ssize_t oom_adj_write(struct file *file, const char __user *buf,
                             size_t count, loff_t *ppos)
 {
-       char buffer[PROC_NUMBUF];
+       char buffer[PROC_NUMBUF] = {};
        int oom_adj;
        int err;
 
-       memset(buffer, 0, sizeof(buffer));
        if (count > sizeof(buffer) - 1)
                count = sizeof(buffer) - 1;
        if (copy_from_user(buffer, buf, count)) {
@@ -1213,11 +1212,10 @@ static ssize_t oom_score_adj_read(struct file *file, char __user *buf,
 static ssize_t oom_score_adj_write(struct file *file, const char __user *buf,
                                        size_t count, loff_t *ppos)
 {
-       char buffer[PROC_NUMBUF];
+       char buffer[PROC_NUMBUF] = {};
        int oom_score_adj;
        int err;
 
-       memset(buffer, 0, sizeof(buffer));
        if (count > sizeof(buffer) - 1)
                count = sizeof(buffer) - 1;
        if (copy_from_user(buffer, buf, count)) {
@@ -1358,13 +1356,13 @@ static ssize_t proc_fault_inject_write(struct file * file,
                        const char __user * buf, size_t count, loff_t *ppos)
 {
        struct task_struct *task;
-       char buffer[PROC_NUMBUF];
+       char buffer[PROC_NUMBUF] = {};
        int make_it_fail;
        int rv;
 
        if (!capable(CAP_SYS_RESOURCE))
                return -EPERM;
-       memset(buffer, 0, sizeof(buffer));
+
        if (count > sizeof(buffer) - 1)
                count = sizeof(buffer) - 1;
        if (copy_from_user(buffer, buf, count))
@@ -1509,11 +1507,10 @@ sched_autogroup_write(struct file *file, const char __user *buf,
 {
        struct inode *inode = file_inode(file);
        struct task_struct *p;
-       char buffer[PROC_NUMBUF];
+       char buffer[PROC_NUMBUF] = {};
        int nice;
        int err;
 
-       memset(buffer, 0, sizeof(buffer));
        if (count > sizeof(buffer) - 1)
                count = sizeof(buffer) - 1;
        if (copy_from_user(buffer, buf, count))
@@ -1666,10 +1663,9 @@ static ssize_t comm_write(struct file *file, const char __user *buf,
 {
        struct inode *inode = file_inode(file);
        struct task_struct *p;
-       char buffer[TASK_COMM_LEN];
+       char buffer[TASK_COMM_LEN] = {};
        const size_t maxlen = sizeof(buffer) - 1;
 
-       memset(buffer, 0, sizeof(buffer));
        if (copy_from_user(buffer, buf, count > maxlen ? maxlen : count))
                return -EFAULT;
 
index 3dd5be96691b4cc234454353ec1b8a324760e0c2..d4d55d5bae51b016883eb6e4ff0feceb462fd620 100644 (file)
@@ -849,9 +849,7 @@ static void __show_smap(struct seq_file *m, const struct mem_size_stats *mss,
 static int show_smap(struct seq_file *m, void *v)
 {
        struct vm_area_struct *vma = v;
-       struct mem_size_stats mss;
-
-       memset(&mss, 0, sizeof(mss));
+       struct mem_size_stats mss = {};
 
        smap_gather_stats(vma, &mss, 0);
 
@@ -877,7 +875,7 @@ static int show_smap(struct seq_file *m, void *v)
 static int show_smaps_rollup(struct seq_file *m, void *v)
 {
        struct proc_maps_private *priv = m->private;
-       struct mem_size_stats mss;
+       struct mem_size_stats mss = {};
        struct mm_struct *mm = priv->mm;
        struct vm_area_struct *vma;
        unsigned long vma_start = 0, last_vma_end = 0;
@@ -893,8 +891,6 @@ static int show_smaps_rollup(struct seq_file *m, void *v)
                goto out_put_task;
        }
 
-       memset(&mss, 0, sizeof(mss));
-
        ret = mmap_read_lock_killable(mm);
        if (ret)
                goto out_put_mm;
@@ -1246,14 +1242,13 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
                                size_t count, loff_t *ppos)
 {
        struct task_struct *task;
-       char buffer[PROC_NUMBUF];
+       char buffer[PROC_NUMBUF] = {};
        struct mm_struct *mm;
        struct vm_area_struct *vma;
        enum clear_refs_types type;
        int itype;
        int rv;
 
-       memset(buffer, 0, sizeof(buffer));
        if (count > sizeof(buffer) - 1)
                count = sizeof(buffer) - 1;
        if (copy_from_user(buffer, buf, count))