1. 01 2月, 2017 1 次提交
  2. 24 1月, 2017 3 次提交
  3. 10 1月, 2017 3 次提交
    • Z
      sysctl: Drop reference added by grab_header in proc_sys_readdir · 93362fa4
      Zhou Chengming 提交于
      Fixes CVE-2016-9191, proc_sys_readdir doesn't drop reference
      added by grab_header when return from !dir_emit_dots path.
      It can cause any path called unregister_sysctl_table will
      wait forever.
      
      The calltrace of CVE-2016-9191:
      
      [ 5535.960522] Call Trace:
      [ 5535.963265]  [<ffffffff817cdaaf>] schedule+0x3f/0xa0
      [ 5535.968817]  [<ffffffff817d33fb>] schedule_timeout+0x3db/0x6f0
      [ 5535.975346]  [<ffffffff817cf055>] ? wait_for_completion+0x45/0x130
      [ 5535.982256]  [<ffffffff817cf0d3>] wait_for_completion+0xc3/0x130
      [ 5535.988972]  [<ffffffff810d1fd0>] ? wake_up_q+0x80/0x80
      [ 5535.994804]  [<ffffffff8130de64>] drop_sysctl_table+0xc4/0xe0
      [ 5536.001227]  [<ffffffff8130de17>] drop_sysctl_table+0x77/0xe0
      [ 5536.007648]  [<ffffffff8130decd>] unregister_sysctl_table+0x4d/0xa0
      [ 5536.014654]  [<ffffffff8130deff>] unregister_sysctl_table+0x7f/0xa0
      [ 5536.021657]  [<ffffffff810f57f5>] unregister_sched_domain_sysctl+0x15/0x40
      [ 5536.029344]  [<ffffffff810d7704>] partition_sched_domains+0x44/0x450
      [ 5536.036447]  [<ffffffff817d0761>] ? __mutex_unlock_slowpath+0x111/0x1f0
      [ 5536.043844]  [<ffffffff81167684>] rebuild_sched_domains_locked+0x64/0xb0
      [ 5536.051336]  [<ffffffff8116789d>] update_flag+0x11d/0x210
      [ 5536.057373]  [<ffffffff817cf61f>] ? mutex_lock_nested+0x2df/0x450
      [ 5536.064186]  [<ffffffff81167acb>] ? cpuset_css_offline+0x1b/0x60
      [ 5536.070899]  [<ffffffff810fce3d>] ? trace_hardirqs_on+0xd/0x10
      [ 5536.077420]  [<ffffffff817cf61f>] ? mutex_lock_nested+0x2df/0x450
      [ 5536.084234]  [<ffffffff8115a9f5>] ? css_killed_work_fn+0x25/0x220
      [ 5536.091049]  [<ffffffff81167ae5>] cpuset_css_offline+0x35/0x60
      [ 5536.097571]  [<ffffffff8115aa2c>] css_killed_work_fn+0x5c/0x220
      [ 5536.104207]  [<ffffffff810bc83f>] process_one_work+0x1df/0x710
      [ 5536.110736]  [<ffffffff810bc7c0>] ? process_one_work+0x160/0x710
      [ 5536.117461]  [<ffffffff810bce9b>] worker_thread+0x12b/0x4a0
      [ 5536.123697]  [<ffffffff810bcd70>] ? process_one_work+0x710/0x710
      [ 5536.130426]  [<ffffffff810c3f7e>] kthread+0xfe/0x120
      [ 5536.135991]  [<ffffffff817d4baf>] ret_from_fork+0x1f/0x40
      [ 5536.142041]  [<ffffffff810c3e80>] ? kthread_create_on_node+0x230/0x230
      
      One cgroup maintainer mentioned that "cgroup is trying to offline
      a cpuset css, which takes place under cgroup_mutex.  The offlining
      ends up trying to drain active usages of a sysctl table which apprently
      is not happening."
      The real reason is that proc_sys_readdir doesn't drop reference added
      by grab_header when return from !dir_emit_dots path. So this cpuset
      offline path will wait here forever.
      
      See here for details: http://www.openwall.com/lists/oss-security/2016/11/04/13
      
      Fixes: f0c3b509 ("[readdir] convert procfs")
      Cc: stable@vger.kernel.org
      Reported-by: NCAI Qian <caiqian@redhat.com>
      Tested-by: NYang Shukui <yangshukui@huawei.com>
      Signed-off-by: NZhou Chengming <zhouchengming1@huawei.com>
      Acked-by: NAl Viro <viro@ZenIV.linux.org.uk>
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      93362fa4
    • E
      libfs: Modify mount_pseudo_xattr to be clear it is not a userspace mount · 75422726
      Eric W. Biederman 提交于
      Add MS_KERNMOUNT to the flags that are passed.
      Use sget_userns and force &init_user_ns instead of calling sget so that
      even if called from a weird context the internal filesystem will be
      considered to be in the intial user namespace.
      
      Luis Ressel reported that the the failure to pass MS_KERNMOUNT into
      mount_pseudo broke his in development graphics driver that uses the
      generic drm infrastructure.  I am not certain the deriver was bug
      free in it's usage of that infrastructure but since
      mount_pseudo_xattr can never be triggered by userspace it is clearer
      and less error prone, and less problematic for the code to be explicit.
      Reported-by: NLuis Ressel <aranea@aixah.de>
      Tested-by: NLuis Ressel <aranea@aixah.de>
      Acked-by: NAl Viro <viro@ZenIV.linux.org.uk>
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      75422726
    • E
      mnt: Protect the mountpoint hashtable with mount_lock · 3895dbf8
      Eric W. Biederman 提交于
      Protecting the mountpoint hashtable with namespace_sem was sufficient
      until a call to umount_mnt was added to mntput_no_expire.  At which
      point it became possible for multiple calls of put_mountpoint on
      the same hash chain to happen on the same time.
      
      Kristen Johansen <kjlx@templeofstupid.com> reported:
      > This can cause a panic when simultaneous callers of put_mountpoint
      > attempt to free the same mountpoint.  This occurs because some callers
      > hold the mount_hash_lock, while others hold the namespace lock.  Some
      > even hold both.
      >
      > In this submitter's case, the panic manifested itself as a GP fault in
      > put_mountpoint() when it called hlist_del() and attempted to dereference
      > a m_hash.pprev that had been poisioned by another thread.
      
      Al Viro observed that the simple fix is to switch from using the namespace_sem
      to the mount_lock to protect the mountpoint hash table.
      
      I have taken Al's suggested patch moved put_mountpoint in pivot_root
      (instead of taking mount_lock an additional time), and have replaced
      new_mountpoint with get_mountpoint a function that does the hash table
      lookup and addition under the mount_lock.   The introduction of get_mounptoint
      ensures that only the mount_lock is needed to manipulate the mountpoint
      hashtable.
      
      d_set_mounted is modified to only set DCACHE_MOUNTED if it is not
      already set.  This allows get_mountpoint to use the setting of
      DCACHE_MOUNTED to ensure adding a struct mountpoint for a dentry
      happens exactly once.
      
      Cc: stable@vger.kernel.org
      Fixes: ce07d891 ("mnt: Honor MNT_LOCKED when detaching mounts")
      Reported-by: NKrister Johansen <kjlx@templeofstupid.com>
      Suggested-by: NAl Viro <viro@ZenIV.linux.org.uk>
      Acked-by: NAl Viro <viro@ZenIV.linux.org.uk>
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      3895dbf8
  4. 27 12月, 2016 6 次提交
  5. 26 12月, 2016 3 次提交
    • T
      ktime: Get rid of ktime_equal() · 1f3a8e49
      Thomas Gleixner 提交于
      No point in going through loops and hoops instead of just comparing the
      values.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      1f3a8e49
    • T
      ktime: Cleanup ktime_set() usage · 8b0e1953
      Thomas Gleixner 提交于
      ktime_set(S,N) was required for the timespec storage type and is still
      useful for situations where a Seconds and Nanoseconds part of a time value
      needs to be converted. For anything where the Seconds argument is 0, this
      is pointless and can be replaced with a simple assignment.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      8b0e1953
    • T
      ktime: Get rid of the union · 2456e855
      Thomas Gleixner 提交于
      ktime is a union because the initial implementation stored the time in
      scalar nanoseconds on 64 bit machine and in a endianess optimized timespec
      variant for 32bit machines. The Y2038 cleanup removed the timespec variant
      and switched everything to scalar nanoseconds. The union remained, but
      become completely pointless.
      
      Get rid of the union and just keep ktime_t as simple typedef of type s64.
      
      The conversion was done with coccinelle and some manual mopping up.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      2456e855
  6. 25 12月, 2016 1 次提交
  7. 23 12月, 2016 5 次提交
    • J
      ufs: fix function declaration for ufs_truncate_blocks · f698cccb
      Jeff Layton 提交于
      sparse says:
      
          fs/ufs/inode.c:1195:6: warning: symbol 'ufs_truncate_blocks' was not declared. Should it be static?
      
      Note that the forward declaration in the file is already marked static.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      f698cccb
    • A
      fs: exec: apply CLOEXEC before changing dumpable task flags · 613cc2b6
      Aleksa Sarai 提交于
      If you have a process that has set itself to be non-dumpable, and it
      then undergoes exec(2), any CLOEXEC file descriptors it has open are
      "exposed" during a race window between the dumpable flags of the process
      being reset for exec(2) and CLOEXEC being applied to the file
      descriptors. This can be exploited by a process by attempting to access
      /proc/<pid>/fd/... during this window, without requiring CAP_SYS_PTRACE.
      
      The race in question is after set_dumpable has been (for get_link,
      though the trace is basically the same for readlink):
      
      [vfs]
      -> proc_pid_link_inode_operations.get_link
         -> proc_pid_get_link
            -> proc_fd_access_allowed
               -> ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
      
      Which will return 0, during the race window and CLOEXEC file descriptors
      will still be open during this window because do_close_on_exec has not
      been called yet. As a result, the ordering of these calls should be
      reversed to avoid this race window.
      
      This is of particular concern to container runtimes, where joining a
      PID namespace with file descriptors referring to the host filesystem
      can result in security issues (since PRCTL_SET_DUMPABLE doesn't protect
      against access of CLOEXEC file descriptors -- file descriptors which may
      reference filesystem objects the container shouldn't have access to).
      
      Cc: dev@opencontainers.org
      Cc: <stable@vger.kernel.org> # v3.2+
      Reported-by: NMichael Crosby <crosbymichael@gmail.com>
      Signed-off-by: NAleksa Sarai <asarai@suse.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      613cc2b6
    • T
      seq_file: reset iterator to first record for zero offset · e522751d
      Tomasz Majchrzak 提交于
      If kernfs file is empty on a first read, successive read operations
      using the same file descriptor will return no data, even when data is
      available. Default kernfs 'seq_next' implementation advances iterator
      position even when next object is not there. Kernfs 'seq_start' for
      following requests will not return iterator as position is already on
      the second object.
      
      This defect doesn't allow to monitor badblocks sysfs files from MD raid.
      They are initially empty but if data appears at some stage, userspace is
      not able to read it.
      Signed-off-by: NTomasz Majchrzak <tomasz.majchrzak@intel.com>
      Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      e522751d
    • D
      vfs: fix isize/pos/len checks for reflink & dedupe · 22725ce4
      Darrick J. Wong 提交于
      Strengthen the checking of pos/len vs. i_size, clarify the return values
      for the clone prep function, and remove pointless code.
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      22725ce4
    • A
      move aio compat to fs/aio.c · c00d2c7e
      Al Viro 提交于
      ... and fix the minor buglet in compat io_submit() - native one
      kills ioctx as cleanup when put_user() fails.  Get rid of
      bogus compat_... in !CONFIG_AIO case, while we are at it - they
      should simply fail with ENOSYS, same as for native counterparts.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      c00d2c7e
  8. 22 12月, 2016 10 次提交
    • L
      befs: add NFS export support · ac632f5b
      Luis de Bethencourt 提交于
      Implement mandatory export_operations, so it is possible to export befs via
      nfs.
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      ac632f5b
    • L
      befs: remove trailing whitespaces · e60f749b
      Luis de Bethencourt 提交于
      Removing all trailing whitespaces in befs.
      
      I was skeptic about tainting the history with this, but whitespace changes
      can be ignored by using 'git blame -w' and 'git log -w'.
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      e60f749b
    • L
      befs: remove signatures from comments · 50b00fc4
      Luis de Bethencourt 提交于
      No idea why some comments have signatures. These predate git. Removing them
      since they add noise and no information.
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      50b00fc4
    • L
      befs: fix style issues in header files · 12ecb38d
      Luis de Bethencourt 提交于
      Fixing checkpatch.pl issues in befs header files:
      WARNING: Missing a blank line after declarations
      +       befs_inode_addr iaddr;
      +       iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift;
      
      WARNING: space prohibited between function name and open parenthesis '('
      +       return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr);
      
      ERROR: "foo * bar" should be "foo *bar"
      +                   const char *key, befs_off_t * value);
      
      ERROR: Macros with complex values should be enclosed in parentheses
      +#define PACKED __attribute__ ((__packed__))
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      12ecb38d
    • L
      befs: fix style issues in linuxvfs.c · 62b80719
      Luis de Bethencourt 提交于
      Fix the following type of checkpatch.pl issues:
      WARNING: line over 80 characters
      +static struct dentry *befs_lookup(struct inode *, struct dentry *, unsigned int);
      
      ERROR: code indent should use tabs where possible
      +        if (!bi)$
      
      WARNING: please, no spaces at the start of a line
      +        if (!bi)$
      
      WARNING: labels should not be indented
      +      unacquire_bh:
      
      WARNING: space prohibited between function name and open parenthesis '('
      +                                             sizeof (struct befs_inode_info),
      
      WARNING: braces {} are not necessary for single statement blocks
      +       if (!*out) {
      +               return -ENOMEM;
      +       }
      
      WARNING: Block comments use a trailing */ on a separate line
      +        * in special cases */
      
      WARNING: Missing a blank line after declarations
      +               int token;
      +               if (!*p)
      
      ERROR: do not use assignment in if condition
      +       if (!(bh = sb_bread(sb, sb_block))) {
      
      ERROR: space prohibited after that open parenthesis '('
      +       if( befs_sb->num_blocks > ~((sector_t)0) ) {
      
      ERROR: space prohibited before that close parenthesis ')'
      +       if( befs_sb->num_blocks > ~((sector_t)0) ) {
      
      ERROR: space required before the open parenthesis '('
      +       if( befs_sb->num_blocks > ~((sector_t)0) ) {
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      62b80719
    • L
      befs: fix typos in linuxvfs.c · 1ca7087e
      Luis de Bethencourt 提交于
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      1ca7087e
    • L
      befs: fix style issues in io.c · 4c7df645
      Luis de Bethencourt 提交于
      Fixing the two following checkpatch.pl issues:
      ERROR: trailing whitespace
      + * Based on portions of file.c and inode.c $
      
      WARNING: labels should not be indented
      +      error:
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      4c7df645
    • L
      befs: fix style issues in inode.c · 85a06b30
      Luis de Bethencourt 提交于
      Fixing the following checkpatch.pl errors and warning:
      ERROR: trailing whitespace
      + * $
      
      WARNING: Block comments use * on subsequent lines
      +/*
      +       Validates the correctness of the befs inode
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_check_inode(struct super_block *sb, befs_inode * raw_inode,
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      85a06b30
    • L
      befs: fix style issues in debug.c · a83179a8
      Luis de Bethencourt 提交于
      Fix all checkpatch.pl errors and warnings in debug.c:
      ERROR: trailing whitespace
      + * $
      
      WARNING: Missing a blank line after declarations
      +       va_list args;
      +       va_start(args, fmt);
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_dump_inode(const struct super_block *sb, befs_inode * inode)
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_dump_super_block(const struct super_block *sb, befs_super_block * sup)
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_dump_small_data(const struct super_block *sb, befs_small_data * sd)
      
      WARNING: line over 80 characters
      +befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super * super)
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super * super)
      
      ERROR: "foo * bar" should be "foo *bar"
      +befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead * node)
      Signed-off-by: NLuis de Bethencourt <luisbg@osg.samsung.com>
      a83179a8
    • L
      splice: reinstate SIGPIPE/EPIPE handling · 52bce911
      Linus Torvalds 提交于
      Commit 8924feff ("splice: lift pipe_lock out of splice_to_pipe()")
      caused a regression when there were no more readers left on a pipe that
      was being spliced into: rather than the expected SIGPIPE and -EPIPE
      return value, the writer would end up waiting forever for space to free
      up (which obviously was not going to happen with no readers around).
      
      Fixes: 8924feff ("splice: lift pipe_lock out of splice_to_pipe()")
      Reported-and-tested-by: NAndreas Schwab <schwab@linux-m68k.org>
      Debugged-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: stable@kernel.org   # v4.9
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      52bce911
  9. 20 12月, 2016 8 次提交