diff mbox series

[-next] exec: Fix mem leak in kernel_read_file

Message ID 20190219021038.11340-1-yuehaibing@huawei.com (mailing list archive)
State New, archived
Headers show
Series [-next] exec: Fix mem leak in kernel_read_file | expand

Commit Message

Yue Haibing Feb. 19, 2019, 2:10 a.m. UTC
syzkaller report this:
BUG: memory leak
unreferenced object 0xffffc9000488d000 (size 9195520):
  comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
  hex dump (first 32 bytes):
    ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
    02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
  backtrace:
    [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
    [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
    [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
    [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
    [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
    [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
    [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
    [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [<00000000241f889b>] 0xffffffffffffffff

It should goto 'out_free' lable to free allocated buf while kernel_read
fails.

Fixes: 39d637af5aa7 ("vfs: forbid write access when reading a file into memory")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 fs/exec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Al Viro Feb. 19, 2019, 2:25 a.m. UTC | #1
On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
> syzkaller report this:
> BUG: memory leak
> unreferenced object 0xffffc9000488d000 (size 9195520):
>   comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
>   hex dump (first 32 bytes):
>     ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
>     02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
>   backtrace:
>     [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
>     [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
>     [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
>     [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
>     [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
>     [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
>     [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
>     [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
>     [<00000000241f889b>] 0xffffffffffffffff
> 
> It should goto 'out_free' lable to free allocated buf while kernel_read
> fails.

Applied.
Dmitry Kasatkin March 11, 2019, 4:59 p.m. UTC | #2
From: Al Viro <viro@ftp.linux.org.uk> on behalf of Al Viro <viro@zeniv.linux.org.uk>
Sent: Tuesday, February 19, 2019 4:25 AM
To: yuehaibing
Cc: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; Dmitry Kasatkin; keescook@chromium.org
Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
    
On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
> syzkaller report this:
> BUG: memory leak
> unreferenced object 0xffffc9000488d000 (size 9195520):
>   comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
>   hex dump (first 32 bytes):
>     ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
>     02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
>   backtrace:
>     [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
>     [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
>     [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
>     [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
>     [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
>     [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
>     [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
>     [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
>     [<00000000241f889b>] 0xffffffffffffffff
> 
> It should goto 'out_free' lable to free allocated buf while kernel_read
> fails.

Applied.


This must be applied to stables as well...
Sasha Levin March 11, 2019, 11:16 p.m. UTC | #3
On Mon, Mar 11, 2019 at 04:59:14PM +0000, Dmitry Kasatkin wrote:
>
>From: Al Viro <viro@ftp.linux.org.uk> on behalf of Al Viro <viro@zeniv.linux.org.uk>
>Sent: Tuesday, February 19, 2019 4:25 AM
>To: yuehaibing
>Cc: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; Dmitry Kasatkin; keescook@chromium.org
>Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file

>On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
>> syzkaller report this:
>> BUG: memory leak
>> unreferenced object 0xffffc9000488d000 (size 9195520):
>>   comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
>>   hex dump (first 32 bytes):
>>     ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
>>     02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
>>   backtrace:
>>     [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
>>     [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
>>     [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
>>     [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
>>     [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
>>     [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
>>     [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
>>     [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
>>     [<00000000241f889b>] 0xffffffffffffffff
>>
>> It should goto 'out_free' lable to free allocated buf while kernel_read
>> fails.
>
>Applied.
>
>
>This must be applied to stables as well...

It's already in all relevant stable trees...

--
Thanks,
Sasha
Dmitry Kasatkin March 13, 2019, 2:12 p.m. UTC | #4
From: Sasha Levin <sashal@kernel.org>
Sent: Tuesday, March 12, 2019 1:16 AM
To: Dmitry Kasatkin
Cc: Al Viro; yuehaibing; linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; keescook@chromium.org; stable@vger.kernel.org; gregkh@google.com
Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
    
On Mon, Mar 11, 2019 at 04:59:14PM +0000, Dmitry Kasatkin wrote:
>
>From: Al Viro <viro@ftp.linux.org.uk> on behalf of Al Viro <viro@zeniv.linux.org.uk>
>Sent: Tuesday, February 19, 2019 4:25 AM
>To: yuehaibing
>Cc: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; Dmitry Kasatkin; keescook@chromium.org
>Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file

>On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
>> syzkaller report this:
>> BUG: memory leak
>> unreferenced object 0xffffc9000488d000 (size 9195520):
>>   comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
>>   hex dump (first 32 bytes):
>>     ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
>>     02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
>>   backtrace:
>>     [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
>>     [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
>>     [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
>>     [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
>>     [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
>>     [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
>>     [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
>>     [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
>>     [<00000000241f889b>] 0xffffffffffffffff
>>
>> It should goto 'out_free' lable to free allocated buf while kernel_read
>> fails.
>
>Applied.
>
>
>This must be applied to stables as well...

> It's already in all relevant stable trees...

I only can see in longterm 4.19.

What about 4.9 and 4.14?

Thanks,
Dmitry
Greg KH March 13, 2019, 2:38 p.m. UTC | #5
On Wed, Mar 13, 2019 at 02:12:30PM +0000, Dmitry Kasatkin wrote:
> 
> 
> 
> 
> 
> 
> From: Sasha Levin <sashal@kernel.org>
> Sent: Tuesday, March 12, 2019 1:16 AM
> To: Dmitry Kasatkin
> Cc: Al Viro; yuehaibing; linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; keescook@chromium.org; stable@vger.kernel.org; gregkh@google.com
> Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
>     
> On Mon, Mar 11, 2019 at 04:59:14PM +0000, Dmitry Kasatkin wrote:
> >
> >From: Al Viro <viro@ftp.linux.org.uk> on behalf of Al Viro <viro@zeniv.linux.org.uk>
> >Sent: Tuesday, February 19, 2019 4:25 AM
> >To: yuehaibing
> >Cc: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; Dmitry Kasatkin; keescook@chromium.org
> >Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
> > 
> >On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
> >> syzkaller report this:
> >> BUG: memory leak
> >> unreferenced object 0xffffc9000488d000 (size 9195520):
> >>   comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
> >>   hex dump (first 32 bytes):
> >>     ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
> >>     02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
> >>   backtrace:
> >>     [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
> >>     [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
> >>     [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
> >>     [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
> >>     [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
> >>     [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
> >>     [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
> >>     [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> >>     [<00000000241f889b>] 0xffffffffffffffff
> >>
> >> It should goto 'out_free' lable to free allocated buf while kernel_read
> >> fails.
> >
> >Applied.
> >
> >
> >This must be applied to stables as well...
> 
> > It's already in all relevant stable trees...
> 
> I only can see in longterm 4.19.
> 
> What about 4.9 and 4.14?

It was in the queue already for that (you can see it on git.kernel.org),
and they are now part of the -rc releases that are currently out for
review.

thanks,

greg k-h
Dmitry Kasatkin March 13, 2019, 3 p.m. UTC | #6
On 13/03/2019 16:38, gregkh@linuxfoundation.org wrote:
> On Wed, Mar 13, 2019 at 02:12:30PM +0000, Dmitry Kasatkin wrote:
>>
>>
>>
>>
>>
>>
>> From: Sasha Levin <sashal@kernel.org>
>> Sent: Tuesday, March 12, 2019 1:16 AM
>> To: Dmitry Kasatkin
>> Cc: Al Viro; yuehaibing; linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; keescook@chromium.org; stable@vger.kernel.org; gregkh@google.com
>> Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
>>      
>> On Mon, Mar 11, 2019 at 04:59:14PM +0000, Dmitry Kasatkin wrote:
>>>
>>> From: Al Viro <viro@ftp.linux.org.uk> on behalf of Al Viro <viro@zeniv.linux.org.uk>
>>> Sent: Tuesday, February 19, 2019 4:25 AM
>>> To: yuehaibing
>>> Cc: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; Dmitry Kasatkin; keescook@chromium.org
>>> Subject: Re: [PATCH -next] exec: Fix mem leak in kernel_read_file
>>>   
>>> On Tue, Feb 19, 2019 at 10:10:38AM +0800, YueHaibing wrote:
>>>> syzkaller report this:
>>>> BUG: memory leak
>>>> unreferenced object 0xffffc9000488d000 (size 9195520):
>>>>     comm "syz-executor.0", pid 2752, jiffies 4294787496 (age 18.757s)
>>>>     hex dump (first 32 bytes):
>>>>       ff ff ff ff ff ff ff ff a8 00 00 00 01 00 00 00  ................
>>>>       02 00 00 00 00 00 00 00 80 a1 7a c1 ff ff ff ff  ..........z.....
>>>>     backtrace:
>>>>       [<000000000863775c>] __vmalloc_node mm/vmalloc.c:1795 [inline]
>>>>       [<000000000863775c>] __vmalloc_node_flags mm/vmalloc.c:1809 [inline]
>>>>       [<000000000863775c>] vmalloc+0x8c/0xb0 mm/vmalloc.c:1831
>>>>       [<000000003f668111>] kernel_read_file+0x58f/0x7d0 fs/exec.c:924
>>>>       [<000000002385813f>] kernel_read_file_from_fd+0x49/0x80 fs/exec.c:993
>>>>       [<0000000011953ff1>] __do_sys_finit_module+0x13b/0x2a0 kernel/module.c:3895
>>>>       [<000000006f58491f>] do_syscall_64+0x147/0x600 arch/x86/entry/common.c:290
>>>>       [<00000000ee78baf4>] entry_SYSCALL_64_after_hwframe+0x49/0xbe
>>>>       [<00000000241f889b>] 0xffffffffffffffff
>>>>
>>>> It should goto 'out_free' lable to free allocated buf while kernel_read
>>>> fails.
>>>
>>> Applied.
>>>
>>>
>>> This must be applied to stables as well...
>>
>>> It's already in all relevant stable trees...
>>
>> I only can see in longterm 4.19.
>>
>> What about 4.9 and 4.14?
> 
> It was in the queue already for that (you can see it on git.kernel.org),
> and they are now part of the -rc releases that are currently out for
> review.
> 
> thanks,
> 
> greg k-h
> 

Thanks!

Dmitry
diff mbox series

Patch

diff --git a/fs/exec.c b/fs/exec.c
index 7a4b5ef..2e00333 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -932,7 +932,7 @@  int kernel_read_file(struct file *file, void **buf, loff_t *size,
 		bytes = kernel_read(file, *buf + pos, i_size - pos, &pos);
 		if (bytes < 0) {
 			ret = bytes;
-			goto out;
+			goto out_free;
 		}
 
 		if (bytes == 0)