From: Paul Moore <paul@paul-moore.com>
To: Wang Yufen <wangyufen@huawei.com>
Cc: linux-security-module@vger.kernel.org, netdev@vger.kernel.org,
jmorris@namei.org, serge@hallyn.com, martin.lau@kernel.org,
daniel@iogearbox.net, ast@kernel.org, pabeni@redhat.com,
kuba@kernel.org, edumazet@google.com,
Stanislav Fomichev <sdf@google.com>
Subject: Re: [PATCH] net: fix memory leak in security_sk_alloc()
Date: Fri, 11 Nov 2022 10:08:42 -0500 [thread overview]
Message-ID: <CAHC9VhQL0rV608+kJCAcRGHnfo1QLa5g2faws1_Mitipi1wjNQ@mail.gmail.com> (raw)
In-Reply-To: <1668160371-39153-1-git-send-email-wangyufen@huawei.com>
On Fri, Nov 11, 2022 at 4:32 AM Wang Yufen <wangyufen@huawei.com> wrote:
>
> kmemleak reports this issue:
>
> unreferenced object 0xffff88810b7835c0 (size 32):
> comm "test_progs", pid 270, jiffies 4294969007 (age 1621.315s)
> hex dump (first 32 bytes):
> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
> 03 00 00 00 03 00 00 00 0f 00 00 00 00 00 00 00 ................
> backtrace:
> [<00000000376cdeab>] kmalloc_trace+0x27/0x110
> [<000000003bcdb3b6>] selinux_sk_alloc_security+0x66/0x110
> [<000000003959008f>] security_sk_alloc+0x47/0x80
> [<00000000e7bc6668>] sk_prot_alloc+0xbd/0x1a0
> [<0000000002d6343a>] sk_alloc+0x3b/0x940
> [<000000009812a46d>] unix_create1+0x8f/0x3d0
> [<000000005ed0976b>] unix_create+0xa1/0x150
> [<0000000086a1d27f>] __sock_create+0x233/0x4a0
> [<00000000cffe3a73>] __sys_socket_create.part.0+0xaa/0x110
> [<0000000007c63f20>] __sys_socket+0x49/0xf0
> [<00000000b08753c8>] __x64_sys_socket+0x42/0x50
> [<00000000b56e26b3>] do_syscall_64+0x3b/0x90
> [<000000009b4871b8>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
>
> The issue occurs in the following scenarios:
>
> unix_create1()
> sk_alloc()
> sk_prot_alloc()
> security_sk_alloc()
> call_int_hook()
> hlist_for_each_entry()
> entry1->hook.sk_alloc_security
> <-- selinux_sk_alloc_security() succeeded,
> <-- sk->security alloced here.
> entry2->hook.sk_alloc_security
> <-- bpf_lsm_sk_alloc_security() failed
> goto out_free;
> ... <-- the sk->security not freed, memleak
>
> To fix, if security_sk_alloc() failed and sk->security not null,
> goto out_free_sec to reclaim resources.
>
> I'm not sure whether this fix makes sense, but if hook lists don't
> support this usage, might need to modify the
> "tools/testing/selftests/bpf/progs/lsm_cgroup.c" test case.
The core problem is that the LSM is not yet fully stacked (work is
actively going on in this space) which means that some LSM hooks do
not support multiple LSMs at the same time; unfortunately the
networking hooks fall into this category.
While there can only be one LSM which manages the sock::sk_security
field by defining a sk_alloc_security hook, it *should* be possible
for other LSMs to to leverage the socket hooks, e.g.
security_socket_bind(), as long as they don't manipulate any of the
sock::sk_security state.
I would suggest modifying the ".../bpf/progs/lsm_cgroup.c" test until
the LSM supports stacking the networking hooks.
--
paul-moore.com
next prev parent reply other threads:[~2022-11-11 15:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-11 9:52 [PATCH] net: fix memory leak in security_sk_alloc() Wang Yufen
2022-11-11 10:33 ` wangyufen
2022-11-11 15:08 ` Paul Moore [this message]
2022-11-11 18:52 ` Stanislav Fomichev
2022-11-11 16:28 ` Eric Dumazet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHC9VhQL0rV608+kJCAcRGHnfo1QLa5g2faws1_Mitipi1wjNQ@mail.gmail.com \
--to=paul@paul-moore.com \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=edumazet@google.com \
--cc=jmorris@namei.org \
--cc=kuba@kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=martin.lau@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@google.com \
--cc=serge@hallyn.com \
--cc=wangyufen@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).