Re: KASLR support on ARM with Kernel 4.9 and 4.14
From: Kees Cook
Date: Mon Sep 28 2020 - 15:50:32 EST
On Mon, Sep 28, 2020 at 07:41:13PM +0530, Pintu Agarwal wrote:
> On Mon, 28 Sep 2020 at 19:15, Pintu Agarwal <pintu.ping@xxxxxxxxx> wrote:
> >
> > On Sat, 26 Sep 2020 at 22:10, Kees Cook <keescook@xxxxxxxxxxxx> wrote:
> >
> > > > >> I wonder if this is an Android Common kernel?
> > > > It uses the below kernel for 4.14:
> > > > https://gitlab.com/quicla/kernel/msm-4.14/-/tree/LE.UM.3.4.2.r1.5 (or
> > > > similar branch).
> > >
> > > Okay, so yes. And this appears to have the hashing of %p backported. I
> > > cannot, however, explain why it's showing hashed pointers instead of
> > > just NULL, though.
> > >
> > > It might be related to these commits but they're not in that kernel:
> > > 3e5903eb9cff ("vsprintf: Prevent crash when dereferencing invalid pointers")
> > > 7bd57fbc4a4d ("vsprintf: don't obfuscate NULL and error pointers")
> > >
> > > > ==> The case where symbol addresses are changing.
> > > >
> > > > kptr_restrict is set to 2 by default:
> > > > / # cat /proc/sys/kernel/kptr_restrict
> > > > 2
> > > >
> > > > Basically, the goal is:
> > > > * To understand how addresses are changing in 4.14 Kernel (without
> > > > KASLR support)?
> > > > * Is it possible to support the same in 4.9 Kernel ?
> > >
> > > Try setting kptr_restrict to 0 and see if the symbol addresses change? I
> > > suspect Ard is correct: there's no KASLR here, just hashed pointers
> > > behaving weird on an old non-stock kernel. :)
> > >
> >
> > Okay. Thank you so much for your comments and suggestions.
> > You mean to say, setting kptr_restrict to 0 may avoid changing symbol
> > addresses in 4.14 ?
> > And, sorry, I could not understand the thing about this "hashed pointers".
> > How can I check this behavior in source code to understand better?
> > Is it possible to give some reference ?
> > I wanted to disable this hash pointer on 4.14 kernel and check the behavior.
> > Also if possible, we would like to make this similar change on 4.9
> > kernel as well.
> >
>
> Okay, I found these changes in 4.14 kernel:
> https://gitlab.com/quicla/kernel/msm-4.14/-/commit/e63732dbfe017aa0dbabac9d096b5fde8afbd395
That's an out-of-tree patch. The one that was backported to 4.14 from
4.15 that does %p hashing is this one:
https://gitlab.com/quicla/kernel/msm-4.14/-/commit/ad67b74d2469d9b82aaa572d76474c95bc484d57
> Are we talking about this?
> I cound not find this in 4.9 kernel.
Note that I still can't explain what you're seeing. /proc/kallsyms
shouldn't be affected by these patches -- I would expect it to either
report the true value or 00s.
> I will disable kptr_restrict and check or, I will enable
> CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS and check.
I would start with kptr_restrict=0 and see if that changes the contents
of /proc/kallsyms. If it does, then it is the hashing. If it doesn't,
well, we're back to square one. :)
--
Kees Cook