• David Rientjes's avatar
    flex_array: introduce DEFINE_FLEX_ARRAY · 45b588d6
    David Rientjes authored
    FLEX_ARRAY_INIT(element_size, total_nr_elements) cannot determine if
    either parameter is valid, so flex arrays which are statically allocated
    with this interface can easily become corrupted or reference beyond its
    allocated memory.
    
    This removes FLEX_ARRAY_INIT() as a struct flex_array initializer since no
    initializer may perform the required checking.  Instead, the array is now
    defined with a new interface:
    
    	DEFINE_FLEX_ARRAY(name, element_size, total_nr_elements)
    
    This may be prefixed with `static' for file scope.
    
    This interface includes compile-time checking of the parameters to ensure
    they are valid.  Since the validity of both element_size and
    total_nr_elements depend on FLEX_ARRAY_BASE_SIZE and FLEX_ARRAY_PART_SIZE,
    the kernel build will fail if either of these predefined values changes
    such that the array parameters are no longer valid.
    
    Since BUILD_BUG_ON() requires compile time constants, several of the
    static inline functions that were once local to lib/flex_array.c had to be
    moved to include/linux/flex_array.h.
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Acked-by: default avatarDave Hansen <dave@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    45b588d6
flex_array.c 8.76 KB