Thread (25 messages) 25 messages, 3 authors, 2016-08-26

Re: [PATCH 2/2] proc: task_mmu: Reduce output processing cpu time

From: Michal Hocko <mhocko@kernel.org>
Date: 2016-08-22 07:24:18
Also in: lkml

On Sat 20-08-16 01:00:17, Joe Perches wrote:
[...]
 static int proc_maps_open(struct inode *inode, struct file *file,
 			const struct seq_operations *ops, int psize)
 {
-	struct proc_maps_private *priv = __seq_open_private(file, ops, psize);
+	struct proc_maps_private *priv;
+	struct mm_struct *mm;
+
+	mm = proc_mem_open(inode, PTRACE_MODE_READ);
+	if (IS_ERR(mm))
+		return PTR_ERR(mm);
 
+	priv = __seq_open_private_bufsize(file, ops, psize,
+					  mm && mm->map_count ?
+					  mm->map_count * 0x300 : PAGE_SIZE);
NAK to this! Seriously, this just gives any random user access to user
defined amount of memory which not accounted, not reclaimable and a
potential consumer of any higher order blocks.

Besides that, at least one show_smap output will always fit inside the
single page and AFAIR (it's been quite a while since I've looked into
seq_file internals) the buffer grows only when the single show doesn't
fit in.
quoted hunk ↗ jump to hunk
 	if (!priv)
 		return -ENOMEM;
 
 	priv->inode = inode;
-	priv->mm = proc_mem_open(inode, PTRACE_MODE_READ);
-	if (IS_ERR(priv->mm)) {
-		int err = PTR_ERR(priv->mm);
-
-		seq_release_private(inode, file);
-		return err;
-	}
+	priv->mm = mm;
 
 	return 0;
 }
@@ -721,6 +723,25 @@ void __weak arch_show_smap(struct seq_file *m, struct vm_area_struct *vma)
 {
 }
 
+static void show_val_kb(struct seq_file *m, const char *s, unsigned long num)
+{
+	char v[32];
+	static const char blanks[7] = {' ', ' ', ' ', ' ',' ', ' ', ' '};
+	int len;
+
+	len = num_to_str(v, sizeof(v), num >> 10);
+
+	seq_write(m, s, 16);
+
+	if (len > 0) {
+		if (len < 8)
+			seq_write(m, blanks, 8 - len);
+
+		seq_write(m, v, len);
+	}
+	seq_write(m, " kB\n", 4);
+}
+
I really do not understand why you insist on code duplication rather
than reuse but if you really insist then just make this (without the
above __seq_open_private_bufsize, re-measure and add the results to the
changelog and repost.
-- 
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help