Re: [PATCH] pstore: ramoops: support pmsg size larger than kmalloc limitation

From: Guilherme G. Piccoli
Date: Thu Jun 29 2023 - 15:23:34 EST


On 28/06/2023 20:24, Kees Cook wrote:
> On Wed, Jun 28, 2023 at 03:12:10PM -0300, Guilherme G. Piccoli wrote:
>> Also - Kees certainly knows that way better, but - are we 100% sure that
>> the region for pstore can be non-contiguous? For some reason, I always
>> thought this was a requirement - grepping the code, I found this
>> (wrong?) comment:
>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/pstore/zone.c#n3
>
> The contiguous requirements are entirely for the RAM backend's storage,
> so these intermediate memory regions can use non-contiguous physical
> backing memory (i.e. vmalloc).
>
> Even the special case of crash-dumping should be fine for the large
> buffer used to hold the crash before doing compression.
>
> There are effectively 4 types of allocations in pstore:
>
> 1- a physical -> virtual mapping for the RAM backend
> 2- the allocations (if any) for non-RAM backends to hold a copy of pstore
> records when extracted from the backend storage (e.g NVRAM, EFI vars,
> etc).
> 3- incoming allocations that are used temporarily to hand data to the
> backend (e.g. the write_compat used in this patch)
> 4- the allocation used for holding the pstorefs data contents (which I
> need to double-check, but is entirely defined by the backends)
>
> Changes aren't needed for (1), it's fine on its own. This patch changes
> allocations for (2) and (3) for pmsg and the RAM backend, if I'm reading
> it correctly. I think (4) is included as part of (2), but I need to
> check. As long as all paths use kvfree() for the record buffers,
> everything should Just Work for RAM. Switching the other backends to
> also use kvalloc() would allow for greater flexibility, though.
>
> Anyway, it's on my list to review and test. I'm still working through
> other things related to the merge window opening, so I may be a bit slow
> for the next week. :)
>
> -Kees
>

Thanks a bunch for the clarification Kees, much appreciated!
Now I understand it way better =)