• David Rientjes's avatar
    FLEX_ARRAY_INIT(element_size, total_nr_elements) cannot determine if · e3dcdd3d
    David Rientjes authored
    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>
    e3dcdd3d
flex_array.c 8.76 KB