| From 30ce4d1903e1d8a7ccd110860a5eef3c638ed8be Mon Sep 17 00:00:00 2001 |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| Date: Sun, 8 Apr 2018 11:57:10 -0400 |
| Subject: getname_kernel() needs to make sure that ->name != ->iname in long case |
| |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| |
| commit 30ce4d1903e1d8a7ccd110860a5eef3c638ed8be upstream. |
| |
| missed it in "kill struct filename.separate" several years ago. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/namei.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/fs/namei.c |
| +++ b/fs/namei.c |
| @@ -219,9 +219,10 @@ getname_kernel(const char * filename) |
| if (len <= EMBEDDED_NAME_MAX) { |
| result->name = (char *)result->iname; |
| } else if (len <= PATH_MAX) { |
| + const size_t size = offsetof(struct filename, iname[1]); |
| struct filename *tmp; |
| |
| - tmp = kmalloc(sizeof(*tmp), GFP_KERNEL); |
| + tmp = kmalloc(size, GFP_KERNEL); |
| if (unlikely(!tmp)) { |
| __putname(result); |
| return ERR_PTR(-ENOMEM); |