diff options
Diffstat (limited to 'net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch')
| -rw-r--r-- | net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch b/net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch index 6f42c17..daeb5c3 100644 --- a/net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch +++ b/net/rtpengine/patches/07-always-dynamically-allocate-buffer-for-kernel-mod.patch @@ -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) { |
