summaryrefslogtreecommitdiffstats
path: root/net/rtpengine/patches/102-always-dynamically-allocate-buffer-for-kernel-mod.patch
blob: 7d67fee0fccefe3122194da9ad2915ec78a814be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--- a/kernel-module/xt_RTPENGINE.c
+++ b/kernel-module/xt_RTPENGINE.c
@@ -3786,7 +3786,6 @@ static inline ssize_t proc_control_read_
 	struct rtpengine_table *t;
 	int err;
 	enum rtpengine_command cmd;
-	char scratchbuf[512];
 	size_t readlen, writelen, writeoffset;
 	int i;
 
@@ -3828,13 +3827,9 @@ static inline ssize_t proc_control_read_
 		return -ERANGE;
 
 	// do we need an extra large storage buffer?
-	if (buflen > sizeof(scratchbuf)) {
-		msg.storage = kmalloc(buflen, GFP_KERNEL);
-		if (!msg.storage)
-			return -ENOMEM;
-	}
-	else
-		msg.storage = scratchbuf;
+	msg.storage = kmalloc(buflen, GFP_KERNEL);
+	if (!msg.storage)
+		return -ENOMEM;
 
 	// get our table
 	inode = file->f_path.dentry->d_inode;
@@ -3947,16 +3942,14 @@ static inline ssize_t proc_control_read_
 			goto err_free;
 	}
 
-	if (msg.storage != scratchbuf)
-		kfree(msg.storage);
+	kfree(msg.storage);
 
 	return buflen;
 
 err_table_free:
 	table_put(t);
 err_free:
-	if (msg.storage != scratchbuf)
-		kfree(msg.storage);
+	kfree(msg.storage);
 	return err;
 }
 static ssize_t proc_control_write(struct file *file, const char __user *ubuf, size_t buflen, loff_t *off) {