diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2006-06-26 03:25:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-26 12:58:25 -0400 |
commit | 8578cea7509cbdec25b31d08b48a92fcc3b1a9e3 (patch) | |
tree | 8de6c9bcd4108c3311fab9e66c3be5132e6f854d /fs/proc/base.c | |
parent | 9cc8cbc7f8b7bc3db48bf6d59a731af728e786ce (diff) |
[PATCH] proc: make PROC_NUMBUF the buffer size for holding integers as strings
Currently in /proc at several different places we define buffers to hold a
process id, or a file descriptor . In most of them we use either a hard coded
number or a different define. Modify them all to use PROC_NUMBUF, so the code
has a chance of being maintained.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/proc/base.c')
-rw-r--r-- | fs/proc/base.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index bbcaef9adb57..20746e124409 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -185,6 +185,9 @@ enum pid_directory_inos { | |||
185 | PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */ | 185 | PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */ |
186 | }; | 186 | }; |
187 | 187 | ||
188 | /* Worst case buffer size needed for holding an integer. */ | ||
189 | #define PROC_NUMBUF 10 | ||
190 | |||
188 | struct pid_entry { | 191 | struct pid_entry { |
189 | int type; | 192 | int type; |
190 | int len; | 193 | int len; |
@@ -807,12 +810,12 @@ static ssize_t oom_adjust_read(struct file *file, char __user *buf, | |||
807 | size_t count, loff_t *ppos) | 810 | size_t count, loff_t *ppos) |
808 | { | 811 | { |
809 | struct task_struct *task = proc_task(file->f_dentry->d_inode); | 812 | struct task_struct *task = proc_task(file->f_dentry->d_inode); |
810 | char buffer[8]; | 813 | char buffer[PROC_NUMBUF]; |
811 | size_t len; | 814 | size_t len; |
812 | int oom_adjust = task->oomkilladj; | 815 | int oom_adjust = task->oomkilladj; |
813 | loff_t __ppos = *ppos; | 816 | loff_t __ppos = *ppos; |
814 | 817 | ||
815 | len = sprintf(buffer, "%i\n", oom_adjust); | 818 | len = snprintf(buffer, sizeof(buffer), "%i\n", oom_adjust); |
816 | if (__ppos >= len) | 819 | if (__ppos >= len) |
817 | return 0; | 820 | return 0; |
818 | if (count > len-__ppos) | 821 | if (count > len-__ppos) |
@@ -827,14 +830,14 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf, | |||
827 | size_t count, loff_t *ppos) | 830 | size_t count, loff_t *ppos) |
828 | { | 831 | { |
829 | struct task_struct *task = proc_task(file->f_dentry->d_inode); | 832 | struct task_struct *task = proc_task(file->f_dentry->d_inode); |
830 | char buffer[8], *end; | 833 | char buffer[PROC_NUMBUF], *end; |
831 | int oom_adjust; | 834 | int oom_adjust; |
832 | 835 | ||
833 | if (!capable(CAP_SYS_RESOURCE)) | 836 | if (!capable(CAP_SYS_RESOURCE)) |
834 | return -EPERM; | 837 | return -EPERM; |
835 | memset(buffer, 0, 8); | 838 | memset(buffer, 0, sizeof(buffer)); |
836 | if (count > 6) | 839 | if (count > sizeof(buffer) - 1) |
837 | count = 6; | 840 | count = sizeof(buffer) - 1; |
838 | if (copy_from_user(buffer, buf, count)) | 841 | if (copy_from_user(buffer, buf, count)) |
839 | return -EFAULT; | 842 | return -EFAULT; |
840 | oom_adjust = simple_strtol(buffer, &end, 0); | 843 | oom_adjust = simple_strtol(buffer, &end, 0); |
@@ -1099,8 +1102,6 @@ static struct inode_operations proc_pid_link_inode_operations = { | |||
1099 | .follow_link = proc_pid_follow_link | 1102 | .follow_link = proc_pid_follow_link |
1100 | }; | 1103 | }; |
1101 | 1104 | ||
1102 | #define NUMBUF 10 | ||
1103 | |||
1104 | static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir) | 1105 | static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir) |
1105 | { | 1106 | { |
1106 | struct dentry *dentry = filp->f_dentry; | 1107 | struct dentry *dentry = filp->f_dentry; |
@@ -1108,7 +1109,7 @@ static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir) | |||
1108 | struct task_struct *p = proc_task(inode); | 1109 | struct task_struct *p = proc_task(inode); |
1109 | unsigned int fd, tid, ino; | 1110 | unsigned int fd, tid, ino; |
1110 | int retval; | 1111 | int retval; |
1111 | char buf[NUMBUF]; | 1112 | char buf[PROC_NUMBUF]; |
1112 | struct files_struct * files; | 1113 | struct files_struct * files; |
1113 | struct fdtable *fdt; | 1114 | struct fdtable *fdt; |
1114 | 1115 | ||
@@ -1144,7 +1145,7 @@ static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir) | |||
1144 | continue; | 1145 | continue; |
1145 | rcu_read_unlock(); | 1146 | rcu_read_unlock(); |
1146 | 1147 | ||
1147 | j = NUMBUF; | 1148 | j = PROC_NUMBUF; |
1148 | i = fd; | 1149 | i = fd; |
1149 | do { | 1150 | do { |
1150 | j--; | 1151 | j--; |
@@ -1153,7 +1154,7 @@ static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir) | |||
1153 | } while (i); | 1154 | } while (i); |
1154 | 1155 | ||
1155 | ino = fake_ino(tid, PROC_TID_FD_DIR + fd); | 1156 | ino = fake_ino(tid, PROC_TID_FD_DIR + fd); |
1156 | if (filldir(dirent, buf+j, NUMBUF-j, fd+2, ino, DT_LNK) < 0) { | 1157 | if (filldir(dirent, buf+j, PROC_NUMBUF-j, fd+2, ino, DT_LNK) < 0) { |
1157 | rcu_read_lock(); | 1158 | rcu_read_lock(); |
1158 | break; | 1159 | break; |
1159 | } | 1160 | } |
@@ -1828,14 +1829,14 @@ static struct inode_operations proc_tid_attr_inode_operations = { | |||
1828 | static int proc_self_readlink(struct dentry *dentry, char __user *buffer, | 1829 | static int proc_self_readlink(struct dentry *dentry, char __user *buffer, |
1829 | int buflen) | 1830 | int buflen) |
1830 | { | 1831 | { |
1831 | char tmp[30]; | 1832 | char tmp[PROC_NUMBUF]; |
1832 | sprintf(tmp, "%d", current->tgid); | 1833 | sprintf(tmp, "%d", current->tgid); |
1833 | return vfs_readlink(dentry,buffer,buflen,tmp); | 1834 | return vfs_readlink(dentry,buffer,buflen,tmp); |
1834 | } | 1835 | } |
1835 | 1836 | ||
1836 | static void *proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) | 1837 | static void *proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) |
1837 | { | 1838 | { |
1838 | char tmp[30]; | 1839 | char tmp[PROC_NUMBUF]; |
1839 | sprintf(tmp, "%d", current->tgid); | 1840 | sprintf(tmp, "%d", current->tgid); |
1840 | return ERR_PTR(vfs_follow_link(nd,tmp)); | 1841 | return ERR_PTR(vfs_follow_link(nd,tmp)); |
1841 | } | 1842 | } |
@@ -1869,7 +1870,7 @@ static struct inode_operations proc_self_inode_operations = { | |||
1869 | void proc_flush_task(struct task_struct *task) | 1870 | void proc_flush_task(struct task_struct *task) |
1870 | { | 1871 | { |
1871 | struct dentry *dentry, *leader, *dir; | 1872 | struct dentry *dentry, *leader, *dir; |
1872 | char buf[30]; | 1873 | char buf[PROC_NUMBUF]; |
1873 | struct qstr name; | 1874 | struct qstr name; |
1874 | 1875 | ||
1875 | name.name = buf; | 1876 | name.name = buf; |
@@ -2026,8 +2027,6 @@ out: | |||
2026 | return result; | 2027 | return result; |
2027 | } | 2028 | } |
2028 | 2029 | ||
2029 | #define PROC_NUMBUF 10 | ||
2030 | |||
2031 | /* | 2030 | /* |
2032 | * Find the first tgid to return to user space. | 2031 | * Find the first tgid to return to user space. |
2033 | * | 2032 | * |