• Rick Edgecombe's avatar
    treewide: use initializer for struct vm_unmapped_area_info · b80fa3cb
    Rick Edgecombe authored
    Future changes will need to add a new member to struct
    vm_unmapped_area_info.  This would cause trouble for any call site that
    doesn't initialize the struct.  Currently every caller sets each member
    manually, so if new ones are added they will be uninitialized and the core
    code parsing the struct will see garbage in the new member.
    
    It could be possible to initialize the new member manually to 0 at each
    call site.  This and a couple other options were discussed.  Having some
    struct vm_unmapped_area_info instances not zero initialized will put those
    sites at risk of feeding garbage into vm_unmapped_area(), if the
    convention is to zero initialize the struct and any new field addition
    missed a call site that initializes each field manually.  So it is useful
    to do things similar across the kernel.
    
    The consensus (see links) was that in general the best way to accomplish
    taking into account both code cleanliness and minimizing the chance of
    introducing bugs, was to do C99 static initialization.  As in: struct
    vm_unmapped_area_info info = {};
    
    With this method of initialization, the whole struct will be zero
    initialized, and any statements setting fields to zero will be unneeded. 
    The change should not leave cleanup at the call sides.
    
    While iterating though the possible solutions a few archs kindly acked
    other variations that still zero initialized the struct.  These sites have
    been modified in previous changes using the pattern acked by the
    respective arch.
    
    So to be reduce the chance of bugs via uninitialized fields, perform a
    tree wide change using the consensus for the best general way to do this
    change.  Use C99 static initializing to zero the struct and remove and
    statements that simply set members to zero.
    
    Link: https://lkml.kernel.org/r/20240326021656.202649-11-rick.p.edgecombe@intel.com
    Link: https://lore.kernel.org/lkml/202402280912.33AEE7A9CF@keescook/#t
    Link: https://lore.kernel.org/lkml/j7bfvig3gew3qruouxrh7z7ehjjafrgkbcmg6tcghhfh3rhmzi@wzlcoecgy5rs/
    Link: https://lore.kernel.org/lkml/ec3e377a-c0a0-4dd3-9cb9-96517e54d17e@csgroup.eu/Signed-off-by: default avatarRick Edgecombe <rick.p.edgecombe@intel.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
    Cc: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Deepak Gupta <debug@rivosinc.com>
    Cc: Guo Ren <guoren@kernel.org>
    Cc: Helge Deller <deller@gmx.de>
    Cc: H. Peter Anvin (Intel) <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Naveen N. Rao <naveen.n.rao@linux.ibm.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    b80fa3cb
mmap.c 3.37 KB