Merge pull request #839 from Ansuel/rtengine-pcre2
[feed/telephony.git] / net / rtpengine / patches / 07-always-dynamically-allocate-buffer-for-kernel-mod.patch
index 6f42c1794fcebcc64357f7fe78c3b82cf7da3433..daeb5c38127c935127a7ba380e65f2429f6dcfc3 100644 (file)
@@ -1,36 +1,46 @@
 --- a/kernel-module/xt_RTPENGINE.c
 +++ b/kernel-module/xt_RTPENGINE.c
-@@ -3455,14 +3455,11 @@ static inline ssize_t proc_control_read_
-       struct inode *inode;
-       uint32_t id;
+@@ -3781,7 +3781,6 @@ static inline ssize_t proc_control_read_
        struct rtpengine_table *t;
--      struct rtpengine_message msgbuf;
-       struct rtpengine_message *msg;
        int err;
+       enum rtpengine_command cmd;
+-      char scratchbuf[512];
+       size_t readlen, writelen, writeoffset;
+       int i;
  
-       if (buflen < sizeof(*msg))
-               return -EIO;
--      if (buflen == sizeof(*msg))
--              msg = &msgbuf;
-       else { /* > */
-               msg = kmalloc(buflen, GFP_KERNEL);
-               if (!msg)
-@@ -3559,16 +3556,14 @@ static inline ssize_t proc_control_read_
-                       goto out;
+@@ -3823,13 +3822,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;
+@@ -3942,16 +3937,14 @@ static inline ssize_t proc_control_read_
+                       goto err_free;
        }
  
--      if (msg != &msgbuf)
--              kfree(msg);
-+      kfree(msg);
+-      if (msg.storage != scratchbuf)
+-              kfree(msg.storage);
++      kfree(msg.storage);
  
        return buflen;
  
- err:
+ err_table_free:
        table_put(t);
out:
--      if (msg != &msgbuf)
--              kfree(msg);
-+      kfree(msg);
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) {