• Kees Cook's avatar
    pid: Replace struct pid 1-element array with flex-array · b69f0aeb
    Kees Cook authored
    For pid namespaces, struct pid uses a dynamically sized array member,
    "numbers".  This was implemented using the ancient 1-element fake
    flexible array, which has been deprecated for decades.
    
    Replace it with a C99 flexible array, refactor the array size
    calculations to use struct_size(), and address elements via indexes.
    Note that the static initializer (which defines a single element) works
    as-is, and requires no special handling.
    
    Without this, CONFIG_UBSAN_BOUNDS (and potentially
    CONFIG_FORTIFY_SOURCE) will trigger bounds checks:
    
      https://lore.kernel.org/lkml/20230517-bushaltestelle-super-e223978c1ba6@brauner
    
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jeff Xu <jeffxu@google.com>
    Cc: Andreas Gruenbacher <agruenba@redhat.com>
    Cc: Daniel Verkamp <dverkamp@chromium.org>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: Jeff Xu <jeffxu@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Frederic Weisbecker <frederic@kernel.org>
    Reported-by: syzbot+ac3b41786a2d0565b6d5@syzkaller.appspotmail.com
    [brauner: dropped unrelated changes and remove 0 with NULL cast]
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b69f0aeb
pid.c 18.2 KB