mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/3] selinux: Fix and clean policydb->cond_list error paths
@ 2022-01-28 20:28 vbendel
  2022-01-28 20:28 ` [PATCH 1/3] selinux: consistently clear cond_list on " vbendel
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: vbendel @ 2022-01-28 20:28 UTC (permalink / raw)
  To: paul, stephen.smalley.work, eparis
  Cc: omosnace, selinux, linux-kernel, Vratislav Bendel

There are two users of policydb->cond_list: cond_read_list()
and duplicate_policydb_cond_list(). If any of them gets an error,
usually an -ENOMEM, the error-path-cleanup *_destroy() functions
get called twice: firstly from these two and secondly from
the caller functions' error paths.

In case such -ENOMEM happens while assigning cond_node data, i.e.
while ->cond_list_len is already non-zero, it leads to inappropriate
dereferencing of policydb->cond_list[] data in the second called
cond_list_destroy() from the caller functions' error paths, resulting
with:
- NULL pointer deref from cond_read_list();
- use-after-free + double-free from duplicate_policydb_cond_list().
(the cond_read_list() manages to set ->cond_list to NULL)

Patch 1/3 simply makes the error behavior consistent by always setting
->cond_list to NULL.

Patch 2/3 fixes the actual bug by resetting ->cond_list_len to 0,
so any subsequent cond_list_destroy() calls would become noop.

Patch 3/3 cleans up the duplicate *_destroy calls on these error paths,
albeit it's a bit questionable and I'm looking for feedback on it:
- on one hand the idea is that the caller functions call the *_destroy()
bits anyway, hence removing duplicate efforts (which also fixes the bug,
but I'd still prefer to apply patches 1 and 2 regardless);
- on the other hand it's appropriate and more bug-proof for a function
to clean everything it allocated on error.
Hence I'm looking forward to seeing what approach the upstream would find
more appropriate.

Signed-off-by: Vratislav Bendel <vbendel@redhat.com>



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-02-02 11:15 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-28 20:28 [PATCH 0/3] selinux: Fix and clean policydb->cond_list error paths vbendel
2022-01-28 20:28 ` [PATCH 1/3] selinux: consistently clear cond_list on " vbendel
2022-02-01 17:38   ` Paul Moore
2022-02-01 20:09     ` Paul Moore
2022-02-02 11:15       ` Vratislav Bendel
2022-01-28 20:28 ` [PATCH 2/3] selinux: fix double free of " vbendel
2022-01-28 20:28 ` [PATCH 3/3] selinux: remove duplicate cond_list clean up calls vbendel
2022-02-01 20:09   ` Paul Moore
2022-01-31 12:06 ` [PATCH 0/3] selinux: Fix and clean policydb->cond_list error paths Ondrej Mosnacek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome