1. 26 1月, 2014 1 次提交
  2. 16 10月, 2013 1 次提交
  3. 21 7月, 2013 1 次提交
    • Z
      ext3: fix a BUG when opening a file with O_TMPFILE flag · dda5690d
      Zheng Liu 提交于
      When we try to open a file with O_TMPFILE flag, we will trigger a bug.
      The root cause is that in ext4_orphan_add() we check ->i_nlink == 0 and
      this check always fails because we set ->i_nlink = 1 in
      inode_init_always().  We can use the following program to trigger it:
      
      int main(int argc, char *argv[])
      {
      	int fd;
      
      	fd = open(argv[1], O_TMPFILE, 0666);
      	if (fd < 0) {
      		perror("open ");
      		return -1;
      	}
      	close(fd);
      	return 0;
      }
      
      The oops message looks like this:
      
      kernel: kernel BUG at fs/ext3/namei.c:1992!
      kernel: invalid opcode: 0000 [#1] SMP
      kernel: Modules linked in: ext4 jbd2 crc16 cpufreq_ondemand ipv6 dm_mirror dm_region_hash dm_log dm_mod parport_pc parport serio_raw sg dcdbas pcspkr i2c_i801 ehci_pci ehci_hcd button acpi_cpufreq mperf e1000e ptp pps_core ttm drm_kms_helper drm hwmon i2c_algo_bit i2c_core ext3 jbd sd_mod ahci libahci libata scsi_mod uhci_hcd
      kernel: CPU: 0 PID: 2882 Comm: tst_tmpfile Not tainted 3.11.0-rc1+ #4
      kernel: Hardware name: Dell Inc. OptiPlex 780 /0V4W66, BIOS A05 08/11/2010
      kernel: task: ffff880112d30050 ti: ffff8801124d4000 task.ti: ffff8801124d4000
      kernel: RIP: 0010:[<ffffffffa00db5ae>] [<ffffffffa00db5ae>] ext3_orphan_add+0x6a/0x1eb [ext3]
      kernel: RSP: 0018:ffff8801124d5cc8  EFLAGS: 00010202
      kernel: RAX: 0000000000000000 RBX: ffff880111510128 RCX: ffff8801114683a0
      kernel: RDX: 0000000000000000 RSI: ffff880111510128 RDI: ffff88010fcf65a8
      kernel: RBP: ffff8801124d5d18 R08: 0080000000000000 R09: ffffffffa00d3b7f
      kernel: R10: ffff8801114683a0 R11: ffff8801032a2558 R12: 0000000000000000
      kernel: R13: ffff88010fcf6800 R14: ffff8801032a2558 R15: ffff8801115100d8
      kernel: FS:  00007f5d172b5700(0000) GS:ffff880117c00000(0000) knlGS:0000000000000000
      kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      kernel: CR2: 00007f5d16df15d0 CR3: 0000000110b1d000 CR4: 00000000000407f0
      kernel: Stack:
      kernel: 000000000000000c ffff8801048a7dc8 ffff8801114685a8 ffffffffa00b80d7
      kernel: ffff8801124d5e38 ffff8801032a2558 ffff88010ce24d68 0000000000000000
      kernel: ffff88011146b300 ffff8801124d5d44 ffff8801124d5d78 ffffffffa00db7e1
      kernel: Call Trace:
      kernel: [<ffffffffa00b80d7>] ? journal_start+0x8c/0xbd [jbd]
      kernel: [<ffffffffa00db7e1>] ext3_tmpfile+0xb2/0x13b [ext3]
      kernel: [<ffffffff821076f8>] path_openat+0x11f/0x5e7
      kernel: [<ffffffff821c86b4>] ? list_del+0x11/0x30
      kernel: [<ffffffff82065fa2>] ?  __dequeue_entity+0x33/0x38
      kernel: [<ffffffff82107cd5>] do_filp_open+0x3f/0x8d
      kernel: [<ffffffff82112532>] ? __alloc_fd+0x50/0x102
      kernel: [<ffffffff820f9296>] do_sys_open+0x13b/0x1cd
      kernel: [<ffffffff820f935c>] SyS_open+0x1e/0x20
      kernel: [<ffffffff82398c02>] system_call_fastpath+0x16/0x1b
      kernel: Code: 39 c7 0f 85 67 01 00 00 0f b7 03 25 00 f0 00 00 3d 00 40 00 00 74 18 3d 00 80 00 00 74 11 3d 00 a0 00 00 74 0a 83 7b 48 00 74 04 <0f> 0b eb fe 49 8b 85 50 03 00 00 4c 89 f6 48 c7 c7 c0 99 0e a0
      kernel: RIP  [<ffffffffa00db5ae>] ext3_orphan_add+0x6a/0x1eb [ext3]
      kernel: RSP <ffff8801124d5cc8>
      
      Here we couldn't call clear_nlink() directly because in d_tmpfile() we
      will call inode_dec_link_count() to decrease ->i_nlink.  So this commit
      tries to call d_tmpfile() before ext4_orphan_add() to fix this problem.
      Signed-off-by: NZheng Liu <wenqing.lz@taobao.com>
      Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
      Cc: Jan Kara <jack@suse.cz>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      dda5690d
  4. 01 7月, 2013 1 次提交
  5. 29 6月, 2013 1 次提交
  6. 23 2月, 2013 1 次提交
  7. 21 1月, 2013 1 次提交
  8. 10 10月, 2012 2 次提交
    • C
      ext3: ext3_bread usage audit · c3d59ad6
      Carlos Maiolino 提交于
      This is the ext3 version of the same patch applied to Ext4, where such goal is
      to audit the usage of ext3_bread() due a possible misinterpretion of its return
      value.
      
      Focused on directory blocks, a NULL value returned from ext3_bread() means a
      hole, which cannot exist into a directory inode. It can pass undetected after a
      fix in an uninitialized error variable.
      
      The (now) initialized variable into ext3_getblk() may lead to a zero'ed return
      value of ext3_bread() to its callers, which can make the caller do not detect
      the hole in the directory inode.
      
      This patch creates a new wrapper function ext3_dir_bread() which checks for
      holes properly, reports error, and returns EIO in that case.
      Signed-off-by: NCarlos Maiolino <cmaiolino@redhat.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      c3d59ad6
    • C
      ext3: fix possible non-initialized variable on htree_dirblock_to_tree() · aa966019
      Carlos Maiolino 提交于
      This is a backport of ext4 commit 90b0a973 which fixes a possible
      non-initialized variable on htree_dirblock_to_tree().
      Ext3 has the same non initialized variable, but, in any case it will be
      initialized by ext3_get_blocks_handle(), which will avoid the bug to be
      triggered, but, the non-initialized variable by htree_dirblock_to_tree() is
      still a bug.
      Signed-off-by: NCarlos Maiolino <cmaiolino@redhat.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      aa966019
  9. 23 7月, 2012 1 次提交
  10. 14 7月, 2012 2 次提交
  11. 11 5月, 2012 1 次提交
    • L
      vfs: make it possible to access the dentry hash/len as one 64-bit entry · 26fe5750
      Linus Torvalds 提交于
      This allows comparing hash and len in one operation on 64-bit
      architectures.  Right now only __d_lookup_rcu() takes advantage of this,
      since that is the case we care most about.
      
      The use of anonymous struct/unions hides the alternate 64-bit approach
      from most users, the exception being a few cases where we initialize a
      'struct qstr' with a static initializer.  This makes the problematic
      cases use a new QSTR_INIT() helper function for that (but initializing
      just the name pointer with a "{ .name = xyzzy }" initializer remains
      valid, as does just copying another qstr structure).
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      26fe5750
  12. 01 4月, 2012 1 次提交
  13. 09 1月, 2012 2 次提交
  14. 04 1月, 2012 3 次提交
  15. 02 11月, 2011 2 次提交
  16. 23 8月, 2011 2 次提交
  17. 12 8月, 2011 1 次提交
  18. 26 7月, 2011 1 次提交
  19. 21 7月, 2011 1 次提交
  20. 20 7月, 2011 1 次提交
  21. 25 6月, 2011 1 次提交
    • L
      ext3: Add fixed tracepoints · 785c4bcc
      Lukas Czerner 提交于
      This commit adds fixed tracepoints to the ext3 code. It is based on ext4
      tracepoints, however due to the differences of both file systems, there
      are some tracepoints missing (those for delaloc and for multi-block
      allocator) and there are some ext3 specific as well (for reservation
      windows).
      
      Here is a list:
      
      ext3_free_inode
      ext3_request_inode
      ext3_allocate_inode
      ext3_evict_inode
      ext3_drop_inode
      ext3_mark_inode_dirty
      ext3_write_begin
      ext3_ordered_write_end
      ext3_writeback_write_end
      ext3_journalled_write_end
      ext3_ordered_writepage
      ext3_writeback_writepage
      ext3_journalled_writepage
      ext3_readpage
      ext3_releasepage
      ext3_invalidatepage
      ext3_discard_blocks
      ext3_request_blocks
      ext3_allocate_blocks
      ext3_free_blocks
      ext3_sync_file_enter
      ext3_sync_file_exit
      ext3_sync_fs
      ext3_rsv_window_add
      ext3_discard_reservation
      ext3_alloc_new_reservation
      ext3_reserved
      ext3_forget
      ext3_read_block_bitmap
      ext3_direct_IO_enter
      ext3_direct_IO_exit
      ext3_unlink_enter
      ext3_unlink_exit
      ext3_truncate_enter
      ext3_truncate_exit
      ext3_get_blocks_enter
      ext3_get_blocks_exit
      ext3_load_inode
      Signed-off-by: NLukas Czerner <lczerner@redhat.com>
      Cc: Jan Kara <jack@suse.cz>
      Signed-off-by: NJan Kara <jack@suse.cz>
      785c4bcc
  22. 26 5月, 2011 3 次提交
  23. 17 5月, 2011 1 次提交
    • J
      ext3: Fix fs corruption when make_indexed_dir() fails · 86c4f6d8
      Jan Kara 提交于
      When make_indexed_dir() fails (e.g. because of ENOSPC) after it has allocated
      block for index tree root, we did not properly mark all changed buffers dirty.
      This lead to only some of these buffers being written out and thus effectively
      corrupting the directory.
      
      Fix the issue by marking all changed data dirty even in the error failure case.
      
      CC: stable@kernel.org
      Signed-off-by: NJan Kara <jack@suse.cz>
      86c4f6d8
  24. 30 4月, 2011 1 次提交
    • J
      ext3: Fix lock inversion in ext3_symlink() · ae54870a
      Jan Kara 提交于
      ext3_symlink() cannot call __page_symlink() with transaction open.
      __page_symlink() calls ext3_write_begin() which gets page lock which ranks
      above transaction start (thus lock ordering is violated) and and also
      ext3_write_begin() waits for a transaction commit when we run out of space
      which never happens if we hold transaction open.
      
      Fix the problem by stopping a transaction before calling __page_symlink()
      (we have to be careful and put inode to orphan list so that it gets deleted
      in case of crash) and starting another one after __page_symlink() returns
      for addition of symlink into a directory.
      Signed-off-by: NJan Kara <jack@suse.cz>
      ae54870a
  25. 15 3月, 2011 1 次提交
  26. 08 3月, 2011 1 次提交
  27. 02 2月, 2011 1 次提交
    • E
      fs/vfs/security: pass last path component to LSM on inode creation · 2a7dba39
      Eric Paris 提交于
      SELinux would like to implement a new labeling behavior of newly created
      inodes.  We currently label new inodes based on the parent and the creating
      process.  This new behavior would also take into account the name of the
      new object when deciding the new label.  This is not the (supposed) full path,
      just the last component of the path.
      
      This is very useful because creating /etc/shadow is different than creating
      /etc/passwd but the kernel hooks are unable to differentiate these
      operations.  We currently require that userspace realize it is doing some
      difficult operation like that and than userspace jumps through SELinux hoops
      to get things set up correctly.  This patch does not implement new
      behavior, that is obviously contained in a seperate SELinux patch, but it
      does pass the needed name down to the correct LSM hook.  If no such name
      exists it is fine to pass NULL.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      2a7dba39
  28. 11 1月, 2011 2 次提交
  29. 06 1月, 2011 2 次提交