linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* SPARC version of arch_validate_prot() looks broken (UAF read)
@ 2020-09-28 12:14 Jann Horn
  2020-09-29 17:30 ` Khalid Aziz
  0 siblings, 1 reply; 5+ messages in thread
From: Jann Horn @ 2020-09-28 12:14 UTC (permalink / raw)
  To: David S. Miller, sparclinux, Linux-MM, Khalid Aziz, Khalid Aziz
  Cc: kernel list, Anthony Yznaga, Andrew Morton

From what I can tell from looking at the code:

SPARC's arch_validate_prot() looks up the VMA and peeks at it; that's
not permitted though. do_mprotect_pkey() calls arch_validate_prot()
before taking the mmap lock, so we can hit use-after-free reads if
someone concurrently deletes a VMA we're looking at.

Additionally, arch_validate_prot() currently only accepts the start
address as a parameter, but the SPARC code probably should be checking
the entire given range, which might consist of multiple VMAs?

I'm not sure what the best fix is here; it kinda seems like what SPARC
really wants is a separate hook that is called from inside the loop in
do_mprotect_pkey() that iterates over the VMAs? So maybe commit
9035cf9a97e4 ("mm: Add address parameter to arch_validate_prot()")
should be reverted, and a separate hook should be created?

(Luckily the ordering of the vmacache operations works out such that
AFAICS, despite calling find_vma() without holding the mmap_sem, we
can never end up establishing a vmacache entry with a dangling pointer
that might be considered valid on a subsequent call. So this should be
limited to a rather boring UAF data read, and not be exploitable for a
UAF write or UAF function pointer read.)

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

end of thread, other threads:[~2020-10-07  6:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-28 12:14 SPARC version of arch_validate_prot() looks broken (UAF read) Jann Horn
2020-09-29 17:30 ` Khalid Aziz
2020-10-07  0:45   ` Jann Horn
2020-10-07  6:16     ` Christoph Hellwig
2020-10-07  6:31       ` Jann Horn

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).