Thread (15 messages) 15 messages, 4 authors, 2024-03-04

Re: [PATCH v2 5/9] mm: Initialize struct vm_unmapped_area_info

From: Christophe Leroy <hidden>
Date: 2024-03-04 18:00:48
Also in: linux-alpha, linux-arm-kernel, linux-mips, linux-mm, linux-s390, linux-sh, lkml, loongarch, sparclinux


Le 02/03/2024 à 02:51, Kees Cook a écrit :
On Sat, Mar 02, 2024 at 12:47:08AM +0000, Edgecombe, Rick P wrote:
quoted
On Wed, 2024-02-28 at 09:21 -0800, Kees Cook wrote:
quoted
I totally understand. If the "uninitialized" warnings were actually
reliable, I would agree. I look at it this way:

- initializations can be missed either in static initializers or via
   run time initializers. (So the risk of mistake here is matched --
   though I'd argue it's easier to *find* static initializers when
adding
   new struct members.)
- uninitialized warnings are inconsistent (this becomes an unknown
risk)
- when a run time initializer is missed, the contents are whatever
was
   on the stack (high risk)
- what a static initializer is missed, the content is 0 (low risk)

I think unambiguous state (always 0) is significantly more important
for
the safety of the system as a whole. Yes, individual cases maybe bad
("what uid should this be? root?!") but from a general memory safety
perspective the value doesn't become potentially influenced by order
of
operations, leftover stack memory, etc.

I'd agree, lifting everything into a static initializer does seem
cleanest of all the choices.
Hi Kees,

Well, I just gave this a try. It is giving me flashbacks of when I last
had to do a tree wide change that I couldn't fully test and the
breakage was caught by Linus.
Yeah, testing isn't fun for these kinds of things. This is traditionally
why the "obviously correct" changes tend to have an easier time landing
(i.e. adding "= {}" to all of them).
quoted
Could you let me know if you think this is additionally worthwhile
cleanup outside of the guard gap improvements of this series? Because I
was thinking a more cowardly approach could be a new vm_unmapped_area()
variant that takes the new start gap member as a separate argument
outside of struct vm_unmapped_area_info. It would be kind of strange to
keep them separate, but it would be less likely to bump something.
I think you want a new member -- AIUI, that's what that struct is for.

Looking at this resulting set of patches, I do kinda think just adding
the "= {}" in a single patch is more sensible. Having to split things
that are know at the top of the function from the stuff known at the
existing initialization time is rather awkward.

Personally, I think a single patch that sets "= {}" for all of them and
drop the all the "= 0" or "= NULL" assignments would be the cleanest way
to go.
I agree with Kees, set = {} and drop all the "something = 0;" stuff.

Christophe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help