lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20210111091646.hkugbtlcced3vmno@linutronix.de>
Date:   Mon, 11 Jan 2021 10:16:46 +0100
From:   Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To:     Thomas Bogendoerfer <tsbogend@...ha.franken.de>
Cc:     Paul Cercueil <paul@...pouillou.net>, tglx@...utronix.de,
        airlied@...ux.ie, airlied@...hat.com, akpm@...ux-foundation.org,
        arnd@...db.de, bcrl@...ck.org, bristot@...hat.com,
        bsegall@...gle.com, bskeggs@...hat.com, chris@...kel.net,
        christian.koenig@....com, clm@...com, davem@...emloft.net,
        deanbo422@...il.com, dietmar.eggemann@....com,
        dri-devel@...ts.freedesktop.org, dsterba@...e.com,
        green.hu@...il.com, hch@....de, intel-gfx@...ts.freedesktop.org,
        jcmvbkbc@...il.com, josef@...icpanda.com, juri.lelli@...hat.com,
        kraxel@...hat.com, linux-aio@...ck.org,
        linux-arm-kernel@...ts.infradead.org, linux-btrfs@...r.kernel.org,
        linux-csky@...r.kernel.org, linux-fsdevel@...r.kernel.org,
        linux-graphics-maintainer@...are.com, linux-kernel@...r.kernel.org,
        linux-mips@...r.kernel.org, linux-mm@...ck.org,
        linux-snps-arc@...ts.infradead.org, linux-xtensa@...ux-xtensa.org,
        linux@...linux.org.uk, linuxppc-dev@...ts.ozlabs.org,
        mgorman@...e.de, mingo@...nel.org, monstr@...str.eu,
        mpe@...erman.id.au, nickhu@...estech.com,
        nouveau@...ts.freedesktop.org, paulmck@...nel.org,
        paulus@...ba.org, peterz@...radead.org, ray.huang@....com,
        rodrigo.vivi@...el.com, rostedt@...dmis.org,
        sparclinux@...r.kernel.org, spice-devel@...ts.freedesktop.org,
        sroland@...are.com, torvalds@...uxfoundation.org,
        vgupta@...opsys.com, vincent.guittot@...aro.org,
        viro@...iv.linux.org.uk, virtualization@...ts.linux-foundation.org,
        x86@...nel.org
Subject: Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic

On 2021-01-09 01:33:52 [+0100], Thomas Bogendoerfer wrote:
> On Sat, Jan 09, 2021 at 12:58:05AM +0100, Thomas Bogendoerfer wrote:
> > On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
> > > Hi Thomas,
> > > 
> > > 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this commit.
> > > 
> > > Any idea what could be happening?
> > 
> > not yet, kernel crash log of a Malta QEMU is below.
> 
> update:
> 
> This dirty hack lets the Malta QEMU boot again:
> 
> diff --git a/mm/highmem.c b/mm/highmem.c
> index c3a9ea7875ef..190cdda1149d 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -515,7 +515,7 @@ void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot)
>  	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
>  	BUG_ON(!pte_none(*(kmap_pte - idx)));
>  	pteval = pfn_pte(pfn, prot);
> -	set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval);
> +	set_pte(kmap_pte - idx, pteval);
>  	arch_kmap_local_post_map(vaddr, pteval);
>  	current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
>  	preempt_enable();
> 
> set_pte_at() tries to update cache and could do an kmap_atomic() there.
So the old implementation used set_pte() while the new one uses
set_pte_at().

> Not sure, if this is allowed at this point.
The problem is the recursion
  kmap_atomic() -> __update_cache() -> kmap_atomic()

and kmap_local_idx_push() runs out if index space before stack space.

I'm not sure if the __update_cache() worked for highmem. It has been
added for that in commit
   f4281bba81810 ("MIPS: Handle highmem pages in __update_cache")

but it assumes that the address returned by kmap_atomic() is the same or
related enough for flush_data_cache_page() to work.

> Thomas.
> 

Sebastian

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ