• Linus Torvalds's avatar
    Merge tag 'copy-struct-from-user-v5.4-rc2' of... · e524d16e
    Linus Torvalds authored
    Merge tag 'copy-struct-from-user-v5.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux
    
    Pull copy_struct_from_user() helper from Christian Brauner:
     "This contains the copy_struct_from_user() helper which got split out
      from the openat2() patchset. It is a generic interface designed to
      copy a struct from userspace.
    
      The helper will be especially useful for structs versioned by size of
      which we have quite a few. This allows for backwards compatibility,
      i.e. an extended struct can be passed to an older kernel, or a legacy
      struct can be passed to a newer kernel. For the first case (extended
      struct, older kernel) the new fields in an extended struct can be set
      to zero and the struct safely passed to an older kernel.
    
      The most obvious benefit is that this helper lets us get rid of
      duplicate code present in at least sched_setattr(), perf_event_open(),
      and clone3(). More importantly it will also help to ensure that users
      implementing versioning-by-size end up with the same core semantics.
    
      This point is especially crucial since we have at least one case where
      versioning-by-size is used but with slighly different semantics:
      sched_setattr(), perf_event_open(), and clone3() all do do similar
      checks to copy_struct_from_user() while rt_sigprocmask(2) always
      rejects differently-sized struct arguments.
    
      With this pull request we also switch over sched_setattr(),
      perf_event_open(), and clone3() to use the new helper"
    
    * tag 'copy-struct-from-user-v5.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux:
      usercopy: Add parentheses around assignment in test_copy_struct_from_user
      perf_event_open: switch to copy_struct_from_user()
      sched_setattr: switch to copy_struct_from_user()
      clone3: switch to copy_struct_from_user()
      lib: introduce copy_struct_from_user() helper
    e524d16e
fork.c 69.7 KB