03 Aug, 2018

2 commits

  • commit 5012284700775a4e6e3fbe7eac4c543c4874b559 upstream.

    Commit 8844618d8aa7: "ext4: only look at the bg_flags field if it is
    valid" will complain if block group zero does not have the
    EXT4_BG_INODE_ZEROED flag set. Unfortunately, this is not correct,
    since a freshly created file system has this flag cleared. It gets
    almost immediately after the file system is mounted read-write --- but
    the following somewhat unlikely sequence will end up triggering a
    false positive report of a corrupted file system:

    mkfs.ext4 /dev/vdc
    mount -o ro /dev/vdc /vdc
    mount -o remount,rw /dev/vdc

    Instead, when initializing the inode table for block group zero, test
    to make sure that itable_unused count is not too large, since that is
    the case that will result in some or all of the reserved inodes
    getting cleared.

    This fixes the failures reported by Eric Whiteney when running
    generic/230 and generic/231 in the the nojournal test case.

    Fixes: 8844618d8aa7 ("ext4: only look at the bg_flags field if it is valid")
    Reported-by: Eric Whitney
    Signed-off-by: Theodore Ts'o
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     
  • commit 8d5a803c6a6ce4ec258e31f76059ea5153ba46ef upstream.

    With commit 044e6e3d74a3: "ext4: don't update checksum of new
    initialized bitmaps" the buffer valid bit will get set without
    actually setting up the checksum for the allocation bitmap, since the
    checksum will get calculated once we actually allocate an inode or
    block.

    If we are doing this, then we need to (re-)check the verified bit
    after we take the block group lock. Otherwise, we could race with
    another process reading and verifying the bitmap, which would then
    complain about the checksum being invalid.

    https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1780137

    Signed-off-by: Theodore Ts'o
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     

11 Jul, 2018

1 commit

  • commit 8844618d8aa7a9973e7b527d038a2a589665002c upstream.

    The bg_flags field in the block group descripts is only valid if the
    uninit_bg or metadata_csum feature is enabled. We were not
    consistently looking at this field; fix this.

    Also block group #0 must never have uninitialized allocation bitmaps,
    or need to be zeroed, since that's where the root inode, and other
    special inodes are set up. Check for these conditions and mark the
    file system as corrupted if they are detected.

    This addresses CVE-2018-10876.

    https://bugzilla.kernel.org/show_bug.cgi?id=199403

    Signed-off-by: Theodore Ts'o
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     

02 May, 2018

1 commit

  • commit 7dac4a1726a9c64a517d595c40e95e2d0d135f6f upstream.

    An privileged attacker can cause a crash by mounting a crafted ext4
    image which triggers a out-of-bounds read in the function
    ext4_valid_block_bitmap() in fs/ext4/balloc.c.

    This issue has been assigned CVE-2018-1093.

    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199181
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1560782
    Reported-by: Wen Xu
    Signed-off-by: Theodore Ts'o
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     

24 Apr, 2018

1 commit

  • commit 044e6e3d74a3d7103a0c8a9305dfd94d64000660 upstream.

    When reading the inode or block allocation bitmap, if the bitmap needs
    to be initialized, do not update the checksum in the block group
    descriptor. That's because we're not set up to journal those changes.
    Instead, just set the verified bit on the bitmap block, so that it's
    not necessary to validate the checksum.

    When a block or inode allocation actually happens, at that point the
    checksum will be calculated, and update of the bg descriptor block
    will be properly journalled.

    Signed-off-by: Theodore Ts'o
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     

20 Dec, 2017

1 commit

  • commit 996fc4477a0ea28226b30d175f053fb6f9a4fa36 upstream.

    It's possible for ext4_get_acl() to return an ERR_PTR. So we need to
    add a check for this case in __ext4_new_inode(). Otherwise on an
    error we can end up oops the kernel.

    This was getting triggered by xfstests generic/388, which is a test
    which exercises the shutdown code path.

    Signed-off-by: Theodore Ts'o
    Signed-off-by: Greg Kroah-Hartman

    Theodore Ts'o
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

15 Sep, 2017

1 commit

  • Pull mount flag updates from Al Viro:
    "Another chunk of fmount preparations from dhowells; only trivial
    conflicts for that part. It separates MS_... bits (very grotty
    mount(2) ABI) from the struct super_block ->s_flags (kernel-internal,
    only a small subset of MS_... stuff).

    This does *not* convert the filesystems to new constants; only the
    infrastructure is done here. The next step in that series is where the
    conflicts would be; that's the conversion of filesystems. It's purely
    mechanical and it's better done after the merge, so if you could run
    something like

    list=$(for i in MS_RDONLY MS_NOSUID MS_NODEV MS_NOEXEC MS_SYNCHRONOUS MS_MANDLOCK MS_DIRSYNC MS_NOATIME MS_NODIRATIME MS_SILENT MS_POSIXACL MS_KERNMOUNT MS_I_VERSION MS_LAZYTIME; do git grep -l $i fs drivers/staging/lustre drivers/mtd ipc mm include/linux; done|sort|uniq|grep -v '^fs/namespace.c$')

    sed -i -e 's/\/SB_RDONLY/g' \
    -e 's/\/SB_NOSUID/g' \
    -e 's/\/SB_NODEV/g' \
    -e 's/\/SB_NOEXEC/g' \
    -e 's/\/SB_SYNCHRONOUS/g' \
    -e 's/\/SB_MANDLOCK/g' \
    -e 's/\/SB_DIRSYNC/g' \
    -e 's/\/SB_NOATIME/g' \
    -e 's/\/SB_NODIRATIME/g' \
    -e 's/\/SB_SILENT/g' \
    -e 's/\/SB_POSIXACL/g' \
    -e 's/\/SB_KERNMOUNT/g' \
    -e 's/\/SB_I_VERSION/g' \
    -e 's/\/SB_LAZYTIME/g' \
    $list

    and commit it with something along the lines of 'convert filesystems
    away from use of MS_... constants' as commit message, it would save a
    quite a bit of headache next cycle"

    * 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    VFS: Differentiate mount flags (MS_*) from internal superblock flags
    VFS: Convert sb->s_flags & MS_RDONLY to sb_rdonly(sb)
    vfs: Add sb_rdonly(sb) to query the MS_RDONLY flag on s_flags

    Linus Torvalds
     

31 Aug, 2017

1 commit

  • Avoid a 32-bit time overflow in recently_deleted() since i_dtime
    (inode deletion time) is stored only as a 32-bit value on disk.
    Since i_dtime isn't used for much beyond a boolean value in e2fsck
    and is otherwise only used in this function in the kernel, there is
    no benefit to use more space in the inode for this field on disk.

    Instead, compare only the relative deletion time with the low
    32 bits of the time using the newly-added time_before32() helper,
    which is similar to time_before() and time_after() for jiffies.

    Increase RECENTCY_DIRTY to 300s based on Ted's comments about
    usage experience at Google.

    Signed-off-by: Andreas Dilger
    Signed-off-by: Theodore Ts'o
    Reviewed-by: Arnd Bergmann

    Andreas Dilger
     

25 Aug, 2017

1 commit

  • While running number of creating file threads concurrently,
    we found heavy lock contention on group spinlock:

    FUNC TOTAL_TIME(us) COUNT AVG(us)
    ext4_create 1707443399 1440000 1185.72
    _raw_spin_lock 1317641501 180899929 7.28
    jbd2__journal_start 287821030 1453950 197.96
    jbd2_journal_get_write_access 33441470 73077185 0.46
    ext4_add_nondir 29435963 1440000 20.44
    ext4_add_entry 26015166 1440049 18.07
    ext4_dx_add_entry 25729337 1432814 17.96
    ext4_mark_inode_dirty 12302433 5774407 2.13

    most of cpu time blames to _raw_spin_lock, here is some testing
    numbers with/without patch.

    Test environment:
    Server : SuperMicro Sever (2 x E5-2690 v3@2.60GHz, 128GB 2133MHz
    DDR4 Memory, 8GbFC)
    Storage : 2 x RAID1 (DDN SFA7700X, 4 x Toshiba PX02SMU020 200GB
    Read Intensive SSD)

    format command:
    mkfs.ext4 -J size=4096

    test command:
    mpirun -np 48 mdtest -n 30000 -d /ext4/mdtest.out -F -C \
    -r -i 1 -v -p 10 -u #first run to load inode

    mpirun -np 48 mdtest -n 30000 -d /ext4/mdtest.out -F -C \
    -r -i 3 -v -p 10 -u

    Kernel version: 4.13.0-rc3

    Test 1,440,000 files with 48 directories by 48 processes:

    Without patch:

    File Creation File removal
    79,033 289,569 ops/per second
    81,463 285,359
    79,875 288,475

    With patch:
    File Creation File removal
    810669 301694
    812805 302711
    813965 297670

    Creation performance is improved more than 10X with large
    journal size. The main problem here is we test bitmap
    and do some check and journal operations which could be
    slept, then we test and set with lock hold, this could
    be racy, and make 'inode' steal by other process.

    However, after first try, we could confirm handle has
    been started and inode bitmap journaled too, then
    we could find and set bit with lock hold directly, this
    will mostly gurateee success with second try.

    Tested-by: Shuichi Ihara
    Signed-off-by: Wang Shilong
    Signed-off-by: Theodore Ts'o
    Reviewed-by: Jan Kara

    Wang Shilong
     

24 Aug, 2017

2 commits


17 Jul, 2017

1 commit

  • Firstly by applying the following with coccinelle's spatch:

    @@ expression SB; @@
    -SB->s_flags & MS_RDONLY
    +sb_rdonly(SB)

    to effect the conversion to sb_rdonly(sb), then by applying:

    @@ expression A, SB; @@
    (
    -(!sb_rdonly(SB)) && A
    +!sb_rdonly(SB) && A
    |
    -A != (sb_rdonly(SB))
    +A != sb_rdonly(SB)
    |
    -A == (sb_rdonly(SB))
    +A == sb_rdonly(SB)
    |
    -!(sb_rdonly(SB))
    +!sb_rdonly(SB)
    |
    -A && (sb_rdonly(SB))
    +A && sb_rdonly(SB)
    |
    -A || (sb_rdonly(SB))
    +A || sb_rdonly(SB)
    |
    -(sb_rdonly(SB)) != A
    +sb_rdonly(SB) != A
    |
    -(sb_rdonly(SB)) == A
    +sb_rdonly(SB) == A
    |
    -(sb_rdonly(SB)) && A
    +sb_rdonly(SB) && A
    |
    -(sb_rdonly(SB)) || A
    +sb_rdonly(SB) || A
    )

    @@ expression A, B, SB; @@
    (
    -(sb_rdonly(SB)) ? 1 : 0
    +sb_rdonly(SB)
    |
    -(sb_rdonly(SB)) ? A : B
    +sb_rdonly(SB) ? A : B
    )

    to remove left over excess bracketage and finally by applying:

    @@ expression A, SB; @@
    (
    -(A & MS_RDONLY) != sb_rdonly(SB)
    +(bool)(A & MS_RDONLY) != sb_rdonly(SB)
    |
    -(A & MS_RDONLY) == sb_rdonly(SB)
    +(bool)(A & MS_RDONLY) == sb_rdonly(SB)
    )

    to make comparisons against the result of sb_rdonly() (which is a bool)
    work correctly.

    Signed-off-by: David Howells

    David Howells
     

06 Jul, 2017

2 commits

  • ea_inode feature allows creating extended attributes that are up to
    64k in size. Update __ext4_new_inode() to pick increased credit limits.

    To avoid overallocating too many journal credits, update
    __ext4_xattr_set_credits() to make a distinction between xattr create
    vs update. This helps __ext4_new_inode() because all attributes are
    known to be new, so we can save credits that are normally needed to
    delete old values.

    Also, have fscrypt specify its maximum context size so that we don't
    end up allocating credits for 64k size.

    Signed-off-by: Tahsin Erdogan
    Signed-off-by: Theodore Ts'o

    Tahsin Erdogan
     
  • Extended attribute inodes are internal to ext4. Adding encryption/security
    related attributes on them would mean dealing with nested calls into ea code.
    Since they have no direct exposure to user mode, just avoid creating ea
    entries for them.

    Signed-off-by: Tahsin Erdogan
    Signed-off-by: Theodore Ts'o

    Tahsin Erdogan
     

22 Jun, 2017

2 commits

  • We don't need acls on xattr inodes because they are not directly
    accessible from user mode.

    Besides lockdep complains about recursive locking of xattr_sem as seen
    below.

    =============================================
    [ INFO: possible recursive locking detected ]
    4.11.0-rc8+ #402 Not tainted
    ---------------------------------------------
    python/1894 is trying to acquire lock:
    (&ei->xattr_sem){++++..}, at: [] ext4_xattr_get+0x66/0x270

    but task is already holding lock:
    (&ei->xattr_sem){++++..}, at: [] ext4_xattr_set_handle+0xa0/0x5d0

    other info that might help us debug this:
    Possible unsafe locking scenario:

    CPU0
    ----
    lock(&ei->xattr_sem);
    lock(&ei->xattr_sem);

    *** DEADLOCK ***

    May be due to missing lock nesting notation

    3 locks held by python/1894:
    #0: (sb_writers#10){.+.+.+}, at: [] mnt_want_write+0x1f/0x50
    #1: (&sb->s_type->i_mutex_key#15){+.+...}, at: [] vfs_setxattr+0x57/0xb0
    #2: (&ei->xattr_sem){++++..}, at: [] ext4_xattr_set_handle+0xa0/0x5d0

    stack backtrace:
    CPU: 0 PID: 1894 Comm: python Not tainted 4.11.0-rc8+ #402
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
    Call Trace:
    dump_stack+0x67/0x99
    __lock_acquire+0x5f3/0x1830
    lock_acquire+0xb5/0x1d0
    down_read+0x2f/0x60
    ext4_xattr_get+0x66/0x270
    ext4_get_acl+0x43/0x1e0
    get_acl+0x72/0xf0
    posix_acl_create+0x5e/0x170
    ext4_init_acl+0x21/0xc0
    __ext4_new_inode+0xffd/0x16b0
    ext4_xattr_set_entry+0x5ea/0xb70
    ext4_xattr_block_set+0x1b5/0x970
    ext4_xattr_set_handle+0x351/0x5d0
    ext4_xattr_set+0x124/0x180
    ext4_xattr_user_set+0x34/0x40
    __vfs_setxattr+0x66/0x80
    __vfs_setxattr_noperm+0x69/0x1c0
    vfs_setxattr+0xa2/0xb0
    setxattr+0x129/0x160
    path_setxattr+0x87/0xb0
    SyS_setxattr+0xf/0x20
    entry_SYSCALL_64_fastpath+0x18/0xad

    Signed-off-by: Tahsin Erdogan
    Signed-off-by: Theodore Ts'o

    Tahsin Erdogan
     
  • Large xattr support is implemented for EXT4_FEATURE_INCOMPAT_EA_INODE.

    If the size of an xattr value is larger than will fit in a single
    external block, then the xattr value will be saved into the body
    of an external xattr inode.

    The also helps support a larger number of xattr, since only the headers
    will be stored in the in-inode space or the single external block.

    The inode is referenced from the xattr header via "e_value_inum",
    which was formerly "e_value_block", but that field was never used.
    The e_value_size still contains the xattr size so that listing
    xattrs does not need to look up the inode if the data is not accessed.

    struct ext4_xattr_entry {
    __u8 e_name_len; /* length of name */
    __u8 e_name_index; /* attribute name index */
    __le16 e_value_offs; /* offset in disk block of value */
    __le32 e_value_inum; /* inode in which value is stored */
    __le32 e_value_size; /* size of attribute value */
    __le32 e_hash; /* hash value of name and value */
    char e_name[0]; /* attribute name */
    };

    The xattr inode is marked with the EXT4_EA_INODE_FL flag and also
    holds a back-reference to the owning inode in its i_mtime field,
    allowing the ext4/e2fsck to verify the correct inode is accessed.

    [ Applied fix by Dan Carpenter to avoid freeing an ERR_PTR. ]

    Lustre-Jira: https://jira.hpdd.intel.com/browse/LU-80
    Lustre-bugzilla: https://bugzilla.lustre.org/show_bug.cgi?id=4424
    Signed-off-by: Kalpak Shah
    Signed-off-by: James Simmons
    Signed-off-by: Andreas Dilger
    Signed-off-by: Tahsin Erdogan
    Signed-off-by: Theodore Ts'o
    Signed-off-by: Dan Carpenter

    Andreas Dilger
     

02 May, 2017

1 commit

  • When using both encryption and SELinux (or another feature that requires
    an xattr per file) on a filesystem with 256-byte inodes, each file's
    xattrs usually spill into an external xattr block. Currently, the
    xattrs are inherited in the order ACL, security, then encryption.
    Therefore, if spillage occurs, the encryption xattr will always end up
    in the external block. This is not ideal because the encryption xattrs
    contain a nonce, so they will always be unique and will prevent the
    external xattr blocks from being deduplicated.

    To improve the situation, change the inheritance order to encryption,
    ACL, then security. This gives the encryption xattr a better chance to
    be stored in-inode, allowing the other xattr(s) to be deduplicated.

    Note that it may be better for userspace to format the filesystem with
    512-byte inodes in this case. However, it's not the default.

    Signed-off-by: Eric Biggers
    Signed-off-by: Theodore Ts'o

    Eric Biggers
     

02 Mar, 2017

1 commit


05 Feb, 2017

1 commit


01 Jan, 2017

1 commit

  • As part of an effort to clean up fscrypt-related error codes, make
    attempting to create a file in an encrypted directory that hasn't been
    "unlocked" fail with ENOKEY. Previously, several error codes were used
    for this case, including ENOENT, EACCES, and EPERM, and they were not
    consistent between and within filesystems. ENOKEY is a better choice
    because it expresses that the failure is due to lacking the encryption
    key. It also matches the error code returned when trying to open an
    encrypted regular file without the key.

    I am not aware of any users who might be relying on the previous
    inconsistent error codes, which were never documented anywhere.

    This failure case will be exercised by an xfstest.

    Signed-off-by: Eric Biggers
    Signed-off-by: Theodore Ts'o

    Eric Biggers
     

22 Nov, 2016

1 commit

  • On a lockdep-enabled kernel, xfstests generic/027 fails due to a lockdep
    warning when run on ext4 mounted with -o test_dummy_encryption:

    xfs_io/4594 is trying to acquire lock:
    (jbd2_handle
    ){++++.+}, at:
    [] jbd2_log_wait_commit+0x5/0x11b

    but task is already holding lock:
    (jbd2_handle
    ){++++.+}, at:
    [] start_this_handle+0x354/0x3d8

    The abbreviated call stack is:

    [] ? jbd2_log_wait_commit+0x5/0x11b
    [] jbd2_log_wait_commit+0x40/0x11b
    [] ? jbd2_log_wait_commit+0x5/0x11b
    [] ? __jbd2_journal_force_commit+0x76/0xa6
    [] __jbd2_journal_force_commit+0x91/0xa6
    [] jbd2_journal_force_commit_nested+0xe/0x18
    [] ext4_should_retry_alloc+0x72/0x79
    [] ext4_xattr_set+0xef/0x11f
    [] ext4_set_context+0x3a/0x16b
    [] fscrypt_inherit_context+0xe3/0x103
    [] __ext4_new_inode+0x12dc/0x153a
    [] ext4_create+0xb7/0x161

    When a file is created in an encrypted directory, ext4_set_context() is
    called to set an encryption context on the new file. This calls
    ext4_xattr_set(), which contains a retry loop where the journal is
    forced to commit if an ENOSPC error is encountered.

    If the task actually were to wait for the journal to commit in this
    case, then it would deadlock because a handle remains open from
    __ext4_new_inode(), so the running transaction can't be committed yet.
    Fortunately, __jbd2_journal_force_commit() avoids the deadlock by not
    allowing the running transaction to be committed while the current task
    has it open. However, the above lockdep warning is still triggered.

    This was a false positive which was introduced by: 1eaa566d368b: jbd2:
    track more dependencies on transaction commit

    Fix the problem by passing the handle through the 'fs_data' argument to
    ext4_set_context(), then using ext4_xattr_set_handle() instead of
    ext4_xattr_set(). And in the case where no journal handle is specified
    and ext4_set_context() has to open one, add an ENOSPC retry loop since
    in that case it is the outermost transaction.

    Signed-off-by: Eric Biggers

    Eric Biggers
     

15 Nov, 2016

1 commit

  • CURRENT_TIME_SEC and CURRENT_TIME are not y2038 safe.
    current_time() will be transitioned to be y2038 safe
    along with vfs.

    current_time() returns timestamps according to the
    granularities set in the super_block.
    The granularity check in ext4_current_time() to call
    current_time() or CURRENT_TIME_SEC is not required.
    Use current_time() directly to obtain timestamps
    unconditionally, and remove ext4_current_time().

    Quota files are assumed to be on the same filesystem.
    Hence, use current_time() for these files as well.

    Signed-off-by: Deepa Dinamani
    Signed-off-by: Theodore Ts'o
    Reviewed-by: Arnd Bergmann

    Deepa Dinamani
     

06 Sep, 2016

1 commit


27 Jul, 2016

1 commit

  • Pull ext4 updates from Ted Ts'o:
    "The major change this cycle is deleting ext4's copy of the file system
    encryption code and switching things over to using the copies in
    fs/crypto. I've updated the MAINTAINERS file to add an entry for
    fs/crypto listing Jaeguk Kim and myself as the maintainers.

    There are also a number of bug fixes, most notably for some problems
    found by American Fuzzy Lop (AFL) courtesy of Vegard Nossum. Also
    fixed is a writeback deadlock detected by generic/130, and some
    potential races in the metadata checksum code"

    * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (21 commits)
    ext4: verify extent header depth
    ext4: short-cut orphan cleanup on error
    ext4: fix reference counting bug on block allocation error
    MAINTAINRES: fs-crypto maintainers update
    ext4 crypto: migrate into vfs's crypto engine
    ext2: fix filesystem deadlock while reading corrupted xattr block
    ext4: fix project quota accounting without quota limits enabled
    ext4: validate s_reserved_gdt_blocks on mount
    ext4: remove unused page_idx
    ext4: don't call ext4_should_journal_data() on the journal inode
    ext4: Fix WARN_ON_ONCE in ext4_commit_super()
    ext4: fix deadlock during page writeback
    ext4: correct error value of function verifying dx checksum
    ext4: avoid modifying checksum fields directly during checksum verification
    ext4: check for extents that wrap around
    jbd2: make journal y2038 safe
    jbd2: track more dependencies on transaction commit
    jbd2: move lockdep tracking to journal_s
    jbd2: move lockdep instrumentation for jbd2 handles
    ext4: respect the nobarrier mount option in nojournal mode
    ...

    Linus Torvalds
     

11 Jul, 2016

1 commit


08 Jun, 2016

1 commit


30 Apr, 2016

2 commits

  • Instead of just printing warning messages, if the orphan list is
    corrupted, declare the file system is corrupted. If there are any
    reserved inodes in the orphaned inode list, declare the file system
    corrupted and stop right away to avoid doing more potential damage to
    the file system.

    Cc: stable@vger.kernel.org
    Signed-off-by: Theodore Ts'o

    Theodore Ts'o
     
  • If the orphaned inode list contains inode #5, ext4_iget() returns a
    bad inode (since the bootloader inode should never be referenced
    directly). Because of the bad inode, we end up processing the inode
    repeatedly and this hangs the machine.

    This can be reproduced via:

    mke2fs -t ext4 /tmp/foo.img 100
    debugfs -w -R "ssv last_orphan 5" /tmp/foo.img
    mount -o loop /tmp/foo.img /mnt

    (But don't do this if you are using an unpatched kernel if you care
    about the system staying functional. :-)

    This bug was found by the port of American Fuzzy Lop into the kernel
    to find file system problems[1]. (Since it *only* happens if inode #5
    shows up on the orphan list --- 3, 7, 8, etc. won't do it, it's not
    surprising that AFL needed two hours before it found it.)

    [1] http://events.linuxfoundation.org/sites/events/files/slides/AFL%20filesystem%20fuzzing%2C%20Vault%202016_0.pdf

    Cc: stable@vger.kernel.org
    Reported by: Vegard Nossum
    Signed-off-by: Theodore Ts'o

    Theodore Ts'o
     

10 Mar, 2016

1 commit


12 Feb, 2016

1 commit

  • When block group checksum is wrong, we call ext4_error() while holding
    group spinlock from ext4_init_block_bitmap() or
    ext4_init_inode_bitmap() which results in scheduling while in atomic.
    Fix the issue by calling ext4_error() later after dropping the spinlock.

    CC: stable@vger.kernel.org
    Reported-by: Dmitry Vyukov
    Signed-off-by: Jan Kara
    Signed-off-by: Theodore Ts'o
    Reviewed-by: Darrick J. Wong

    Jan Kara
     

09 Jan, 2016

1 commit


18 Oct, 2015

3 commits


24 Jul, 2015

1 commit


01 Jun, 2015

1 commit

  • Factor out calls to ext4_inherit_context() and move them to
    __ext4_new_inode(); this fixes a problem where ext4_tmpfile() wasn't
    calling calling ext4_inherit_context(), so the temporary file wasn't
    getting protected. Since the blocks for the tmpfile could end up on
    disk, they really should be protected if the tmpfile is created within
    the context of an encrypted directory.

    Signed-off-by: Theodore Ts'o

    Theodore Ts'o
     

19 May, 2015

1 commit

  • The superblock fields s_file_encryption_mode and s_dir_encryption_mode
    are vestigal, so remove them as a cleanup. While we're at it, allow
    file systems with both encryption and inline_data enabled at the same
    time to work correctly. We can't have encrypted inodes with inline
    data, but there's no reason to prohibit unencrypted inodes from using
    the inline data feature.

    Signed-off-by: Theodore Ts'o

    Theodore Ts'o
     

27 Apr, 2015

1 commit

  • Pull fourth vfs update from Al Viro:
    "d_inode() annotations from David Howells (sat in for-next since before
    the beginning of merge window) + four assorted fixes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    RCU pathwalk breakage when running into a symlink overmounting something
    fix I_DIO_WAKEUP definition
    direct-io: only inc/dec inode->i_dio_count for file systems
    fs/9p: fix readdir()
    VFS: assorted d_backing_inode() annotations
    VFS: fs/inode.c helpers: d_inode() annotations
    VFS: fs/cachefiles: d_backing_inode() annotations
    VFS: fs library helpers: d_inode() annotations
    VFS: assorted weird filesystems: d_inode() annotations
    VFS: normal filesystems (and lustre): d_inode() annotations
    VFS: security/: d_inode() annotations
    VFS: security/: d_backing_inode() annotations
    VFS: net/: d_inode() annotations
    VFS: net/unix: d_backing_inode() annotations
    VFS: kernel/: d_inode() annotations
    VFS: audit: d_backing_inode() annotations
    VFS: Fix up some ->d_inode accesses in the chelsio driver
    VFS: Cachefiles should perform fs modifications on the top layer only
    VFS: AF_UNIX sockets should call mknod on the top layer only

    Linus Torvalds
     

16 Apr, 2015

1 commit