30 Dec, 2020

1 commit

  • [ Upstream commit d8b3df8b1048405e73558b88cba2adf29490d468 ]

    Surprisingly, `block' in sector_t indicates the number of
    i_blkbits-sized blocks rather than sectors for bmap.

    In addition, considering buffer_head limits mapped size to 32-bits,
    should avoid using generic_block_bmap.

    Link: https://lore.kernel.org/r/20201209115740.18802-1-huangjianan@oppo.com
    Fixes: 9da681e017a3 ("staging: erofs: support bmap")
    Reviewed-by: Chao Yu
    Reviewed-by: Gao Xiang
    Signed-off-by: Huang Jianan
    Signed-off-by: Guo Weichao
    [ Gao Xiang: slightly update the commit message description. ]
    Signed-off-by: Gao Xiang
    Signed-off-by: Sasha Levin

    Huang Jianan
     

04 Nov, 2020

2 commits

  • pcluster should be only set up for all managed pages instead of
    temporary pages. Since it currently uses page->mapping to identify,
    the impact is minor for now.

    [ Update: Vladimir reported the kernel log becomes polluted
    because PAGE_FLAGS_CHECK_AT_FREE flag(s) set if the page
    allocation debug option is enabled. ]

    Link: https://lore.kernel.org/r/20201022145724.27284-1-hsiangkao@aol.com
    Fixes: 5ddcee1f3a1c ("erofs: get rid of __stagingpage_alloc helper")
    Cc: # 5.5+
    Tested-by: Vladimir Zapolskiy
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • EROFS has _only one_ ondisk timestamp (ctime is currently
    documented and recorded, we might also record mtime instead
    with a new compat feature if needed) for each extended inode
    since EROFS isn't mainly for archival purposes so no need to
    keep all timestamps on disk especially for Android scenarios
    due to security concerns. Also, romfs/cramfs don't have their
    own on-disk timestamp, and squashfs only records mtime instead.

    Let's also derive access time from ondisk timestamp rather than
    leaving it empty, and if mtime/atime for each file are really
    needed for specific scenarios as well, we can also use xattrs
    to record them then.

    Link: https://lore.kernel.org/r/20201031195102.21221-1-hsiangkao@aol.com
    [ Gao Xiang: It'd be better to backport for user-friendly concern. ]
    Fixes: 431339ba9042 ("staging: erofs: add inode operations")
    Cc: stable # 4.19+
    Reported-by: nl6720
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     

25 Oct, 2020

1 commit

  • Pull misc vfs updates from Al Viro:
    "Assorted stuff all over the place (the largest group here is
    Christoph's stat cleanups)"

    * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    fs: remove KSTAT_QUERY_FLAGS
    fs: remove vfs_stat_set_lookup_flags
    fs: move vfs_fstatat out of line
    fs: implement vfs_stat and vfs_lstat in terms of vfs_fstatat
    fs: remove vfs_statx_fd
    fs: omfs: use kmemdup() rather than kmalloc+memcpy
    [PATCH] reduce boilerplate in fsid handling
    fs: Remove duplicated flag O_NDELAY occurring twice in VALID_OPEN_FLAGS
    selftests: mount: add nosymfollow tests
    Add a "nosymfollow" mount option.

    Linus Torvalds
     

09 Oct, 2020

1 commit


19 Sep, 2020

4 commits


18 Sep, 2020

2 commits

  • After commit 0615090c5044 ("erofs: convert compressed files from
    readpages to readahead"), add_to_page_cache_lru() was moved to mm
    code, so that in below call path, no page will be cached into
    @pagepool list or grabbed from @pagepool list:
    - z_erofs_readpage
    - z_erofs_do_read_page
    - preload_compressed_pages
    - erofs_allocpage

    Let's get rid of this unneeded @pagepool parameter.

    Signed-off-by: Chao Yu
    Link: https://lore.kernel.org/r/20200917011821.22767-1-yuchao0@huawei.com
    Reviewed-by: Gao Xiang
    Signed-off-by: Gao Xiang

    Chao Yu
     
  • Don't recheck it since xattr_permission() already
    checks CAP_SYS_ADMIN capability.

    Just follow 5d3ce4f70172 ("f2fs: avoid duplicated permission check for "trusted." xattrs")

    Reported-by: Hongyu Jin
    [ Gao Xiang: since it could cause some complex Android overlay
    permission issue as well on android-5.4+, it'd be better to
    backport to 5.4+ rather than pure cleanup on mainline. ]
    Cc: # 5.4+
    Link: https://lore.kernel.org/r/20200811070020.6339-1-hsiangkao@redhat.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     

24 Aug, 2020

1 commit

  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

07 Aug, 2020

1 commit

  • Pull erofs updates from Gao Xiang:
    "This cycle mainly addresses an issue out of some extended inode with
    designated location, which are not generated by current mkfs but need
    to handled at runtime anyway. The others are quite trivial ones.

    - use HTTPS links instead of insecure HTTP ones;

    - fix crossing page boundary on specific extended inodes;

    - remove useless WQ_CPU_INTENSIVE flag for unbound wq;

    - minor cleanup"

    * tag 'erofs-for-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
    erofs: remove WQ_CPU_INTENSIVE flag from unbound wq's
    erofs: fold in used-once helper erofs_workgroup_unfreeze_final()
    erofs: fix extended inode could cross boundary
    erofs: Replace HTTP links with HTTPS ones

    Linus Torvalds
     

03 Aug, 2020

4 commits

  • The documentation [1] says that WQ_CPU_INTENSIVE is "meaningless" for
    unbound wq. I remove this flag from places where unbound queue is
    allocated. This is supposed to improve code readability.

    [1] https://www.kernel.org/doc/html/latest/core-api/workqueue.html#flags
    Signed-off-by: Maksym Planeta
    [Gao Xiang: since the original treewide patch [2] hasn't been merged
    yet, handling the EROFS part only for the next cycle. ]
    [2] https://lore.kernel.org/r/20200213141823.2174236-1-mplaneta@os.inf.tu-dresden.de
    Link: https://lore.kernel.org/r/20200731024049.16495-1-hsiangkao@aol.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • It's expected that erofs_workgroup_unfreeze_final() won't
    be used in other places. Let's fold it to simplify the code.

    Link: https://lore.kernel.org/r/20200729180235.25443-1-hsiangkao@redhat.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • Each ondisk inode should be aligned with inode slot boundary
    (32-byte alignment) because of nid calculation formula, so all
    compact inodes (32 byte) cannot across page boundary. However,
    extended inode is now 64-byte form, which can across page boundary
    in principle if the location is specified on purpose, although
    it's hard to be generated by mkfs due to the allocation policy
    and rarely used by Android use case now mainly for > 4GiB files.

    For now, only two fields `i_ctime_nsec` and `i_nlink' couldn't
    be read from disk properly and cause out-of-bound memory read
    with random value.

    Let's fix now.

    Fixes: 431339ba9042 ("staging: erofs: add inode operations")
    Cc: # 4.19+
    Link: https://lore.kernel.org/r/20200729175801.GA23973@xiangao.remote.csb
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • Rationale:
    Reduces attack surface on kernel devs opening the links for MITM
    as HTTPS traffic is much harder to manipulate.

    Deterministic algorithm:
    For each file:
    If not .svg:
    For each line:
    If doesn't contain `\bxmlns\b`:
    For each link, `\bhttp://[^# \t\r\n]*(?:\w|/)`:
    If neither `\bgnu\.org/license`, nor `\bmozilla\.org/MPL\b`:
    If both the HTTP and HTTPS versions
    return 200 OK and serve the same content:
    Replace HTTP with HTTPS.

    Reviewed-by: Gao Xiang
    Reviewed-by: Chao Yu
    Signed-off-by: Alexander A. Klimov
    Link: https://lore.kernel.org/r/20200713130944.34419-1-grandmaster@al2klimov.de
    Signed-off-by: Gao Xiang

    Alexander A. Klimov
     

17 Jul, 2020

1 commit

  • Using uninitialized_var() is dangerous as it papers over real bugs[1]
    (or can in the future), and suppresses unrelated compiler warnings
    (e.g. "unused variable"). If the compiler thinks it is uninitialized,
    either simply initialize the variable or make compiler changes.

    In preparation for removing[2] the[3] macro[4], remove all remaining
    needless uses with the following script:

    git grep '\buninitialized_var\b' | cut -d: -f1 | sort -u | \
    xargs perl -pi -e \
    's/\buninitialized_var\(([^\)]+)\)/\1/g;
    s:\s*/\* (GCC be quiet|to make compiler happy) \*/$::g;'

    drivers/video/fbdev/riva/riva_hw.c was manually tweaked to avoid
    pathological white-space.

    No outstanding warnings were found building allmodconfig with GCC 9.3.0
    for x86_64, i386, arm64, arm, powerpc, powerpc64le, s390x, mips, sparc64,
    alpha, and m68k.

    [1] https://lore.kernel.org/lkml/20200603174714.192027-1-glider@google.com/
    [2] https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1TGqCR5vQkCzWJ0QxK6CernOU6eedsudAixw@mail.gmail.com/
    [3] https://lore.kernel.org/lkml/CA+55aFwgbgqhbp1fkxvRKEpzyR5J8n1vKT1VZdz9knmPuXhOeg@mail.gmail.com/
    [4] https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yVJu65TpLgN_ybYNv0VEOKA@mail.gmail.com/

    Reviewed-by: Leon Romanovsky # drivers/infiniband and mlx4/mlx5
    Acked-by: Jason Gunthorpe # IB
    Acked-by: Kalle Valo # wireless drivers
    Reviewed-by: Chao Yu # erofs
    Signed-off-by: Kees Cook

    Kees Cook
     

24 Jun, 2020

1 commit

  • Hongyu reported "id != index" in z_erofs_onlinepage_fixup() with
    specific aarch64 environment easily, which wasn't shown before.

    After digging into that, I found that high 32 bits of page->private
    was set to 0xaaaaaaaa rather than 0 (due to z_erofs_onlinepage_init
    behavior with specific compiler options). Actually we only use low
    32 bits to keep the page information since page->private is only 4
    bytes on most 32-bit platforms. However z_erofs_onlinepage_fixup()
    uses the upper 32 bits by mistake.

    Let's fix it now.

    Reported-and-tested-by: Hongyu Jin
    Fixes: 3883a79abd02 ("staging: erofs: introduce VLE decompression support")
    Cc: # 4.19+
    Reviewed-by: Chao Yu
    Link: https://lore.kernel.org/r/20200618234349.22553-1-hsiangkao@aol.com
    Signed-off-by: Gao Xiang

    Gao Xiang
     

03 Jun, 2020

4 commits

  • Pull erofs updates from Gao Xiang:
    "The most interesting part is the new mount api conversion, which is
    actually a old patch already pending for several cycles. And the
    others are recent trivial cleanups here.

    Summary:

    - Convert to use the new mount apis

    - Some random cleanup patches"

    * tag 'erofs-for-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
    erofs: suppress false positive last_block warning
    erofs: convert to use the new mount fs_context api
    erofs: code cleanup by removing ifdef macro surrounding

    Linus Torvalds
     
  • This is always PAGE_KERNEL - for long term mappings with other properties
    vmap should be used.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Acked-by: Peter Zijlstra (Intel)
    Cc: Christian Borntraeger
    Cc: Christophe Leroy
    Cc: Daniel Vetter
    Cc: David Airlie
    Cc: Gao Xiang
    Cc: Greg Kroah-Hartman
    Cc: Haiyang Zhang
    Cc: Johannes Weiner
    Cc: "K. Y. Srinivasan"
    Cc: Laura Abbott
    Cc: Mark Rutland
    Cc: Michael Kelley
    Cc: Minchan Kim
    Cc: Nitin Gupta
    Cc: Robin Murphy
    Cc: Sakari Ailus
    Cc: Stephen Hemminger
    Cc: Sumit Semwal
    Cc: Wei Liu
    Cc: Benjamin Herrenschmidt
    Cc: Catalin Marinas
    Cc: Heiko Carstens
    Cc: Paul Mackerras
    Cc: Vasily Gorbik
    Cc: Will Deacon
    Link: http://lkml.kernel.org/r/20200414131348.444715-19-hch@lst.de
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Use the new readahead operation in erofs.

    Signed-off-by: Matthew Wilcox (Oracle)
    Signed-off-by: Andrew Morton
    Reviewed-by: Dave Chinner
    Reviewed-by: William Kucharski
    Reviewed-by: Chao Yu
    Acked-by: Gao Xiang
    Cc: Christoph Hellwig
    Cc: Cong Wang
    Cc: Darrick J. Wong
    Cc: Eric Biggers
    Cc: Jaegeuk Kim
    Cc: John Hubbard
    Cc: Joseph Qi
    Cc: Junxiao Bi
    Cc: Michal Hocko
    Cc: Zi Yan
    Cc: Johannes Thumshirn
    Cc: Miklos Szeredi
    Link: http://lkml.kernel.org/r/20200414150233.24495-20-willy@infradead.org
    Signed-off-by: Linus Torvalds

    Matthew Wilcox (Oracle)
     
  • Use the new readahead operation in erofs

    Signed-off-by: Matthew Wilcox (Oracle)
    Signed-off-by: Andrew Morton
    Reviewed-by: William Kucharski
    Reviewed-by: Chao Yu
    Acked-by: Gao Xiang
    Cc: Christoph Hellwig
    Cc: Cong Wang
    Cc: Darrick J. Wong
    Cc: Dave Chinner
    Cc: Eric Biggers
    Cc: Jaegeuk Kim
    Cc: John Hubbard
    Cc: Joseph Qi
    Cc: Junxiao Bi
    Cc: Michal Hocko
    Cc: Zi Yan
    Cc: Johannes Thumshirn
    Cc: Miklos Szeredi
    Link: http://lkml.kernel.org/r/20200414150233.24495-19-willy@infradead.org
    Signed-off-by: Linus Torvalds

    Matthew Wilcox (Oracle)
     

29 May, 2020

2 commits

  • As Andrew mentioned, some rare specific gcc versions could report
    last_block uninitialized warning. Actually last_block doesn't need
    to be uninitialized first from its implementation due to bio == NULL
    condition. After a bio is allocated, last_block will be assigned
    then.

    The detailed analysis is in this thread [1]. So let's silence those
    confusing gccs simply.

    [1] https://lore.kernel.org/r/20200421072839.GA13867@hsiangkao-HP-ZHAN-66-Pro-G1

    Cc: Andrew Morton
    Reviewed-by: Chao Yu
    Link: https://lore.kernel.org/r/20200528084844.23359-1-hsiangkao@redhat.com
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • Convert the erofs to use new internal mount API as the old one will
    be obsoleted and removed. This allows greater flexibility in
    communication of mount parameters between userspace, the VFS and the
    filesystem.

    See Documentation/filesystems/mount_api.txt for more information.

    Cc: Al Viro
    Cc: David Howells
    Signed-off-by: Chao Yu
    Link: https://lore.kernel.org/r/20200529104836.17843-1-hsiangkao@redhat.com
    Signed-off-by: Gao Xiang

    Chao Yu
     

27 May, 2020

1 commit

  • Define erofs_listxattr and erofs_xattr_handlers to NULL when
    CONFIG_EROFS_FS_XATTR is not enabled, then we can remove many
    ugly ifdef macros in the code.

    Signed-off-by: Chengguang Xu
    Reviewed-by: Gao Xiang
    Reviewed-by: Chao Yu
    Link: https://lore.kernel.org/r/20200526090343.22794-1-cgxu519@mykernel.net
    Signed-off-by: Gao Xiang

    Chengguang Xu
     

03 Mar, 2020

4 commits

  • As Lasse pointed out, "Looking at fs/erofs/decompress.c,
    the return value from LZ4_decompress_safe_partial is only
    checked for negative value to catch errors. ... So if
    I understood it correctly, if there is bad data whose
    uncompressed size is much less than it should be, it can
    leave part of the output buffer untouched and expose the
    previous data as the file content. "

    Let's fix it now.

    Cc: Lasse Collin
    Fixes: 7fc45dbc938a ("staging: erofs: introduce generic decompression backend")
    [ Gao Xiang: v5.3+, I will manually backport this to stable later. ]
    Link: https://lore.kernel.org/r/20200226081008.86348-3-gaoxiang25@huawei.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • As Lasse pointed out, "EROFS uses LZ4_decompress_safe_partial
    for both partial and full blocks. Thus when it is decoding a
    full block, it doesn't know if the LZ4 decoder actually decoded
    all the input. The real uncompressed size could be bigger than
    the value stored in the file system metadata.

    Using LZ4_decompress_safe instead of _safe_partial when
    decompressing a full block would help to detect errors."

    So it's reasonable to use _safe in case of potential corrupted
    images and it might have some speed gain as well although
    I didn't observe much difference.

    Note that legacy compressor (< 5.3, no LZ4_0PADDING) could
    encode extra data in a pcluster, which is excluded as well.

    Cc: Lasse Collin
    Fixes: 0ffd71bcc3a0 ("staging: erofs: introduce LZ4 decompression inplace")
    [ Gao Xiang: v5.3+, I will manually backport this to stable later. ]
    Link: https://lore.kernel.org/r/20200226081008.86348-2-gaoxiang25@huawei.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • The remaining count should not include successful
    shrink attempts.

    Fixes: e7e9a307be9d ("staging: erofs: introduce workstation for decompression")
    Cc: # 4.19+
    Link: https://lore.kernel.org/r/20200226081008.86348-1-gaoxiang25@huawei.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     
  • XArray has friendly APIs and it will replace the old radix
    tree in the near future.

    This convert makes use of __xa_cmpxchg when inserting on
    a just inserted item by other thread. In detail, instead
    of totally looking up again as what we did for the old
    radix tree, it will try to legitimize the current in-tree
    item in the XArray therefore more effective.

    In addition, naming is rather a challenge for non-English
    speaker like me. The basic idea of workstn is to provide
    a runtime sparse array with items arranged in the physical
    block number order. Such items (was called workgroup) can be
    used to record compress clusters or for later new features.

    However, both workgroup and workstn seem not good names from
    whatever point of view, so I'd like to rename them as pslot
    and managed_pslots to stand for physical slots. This patch
    handles the second as a part of the radix tree convert.

    Cc: Matthew Wilcox
    Link: https://lore.kernel.org/r/20200220024642.91529-1-gaoxiang25@huawei.com
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     

21 Jan, 2020

2 commits


11 Jan, 2020

1 commit

  • rq->out[1] should be valid before accessing. Otherwise,
    in very rare cases, out-of-bound dirty onstack rq->out[1]
    can equal to *in and lead to unintended memmove behavior.

    Link: https://lore.kernel.org/r/20200107022546.19432-1-gaoxiang25@huawei.com
    Fixes: 7fc45dbc938a ("staging: erofs: introduce generic decompression backend")
    Cc: # 5.3+
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     

07 Jan, 2020

4 commits


12 Dec, 2019

1 commit

  • Pull erofs fixes from Gao Xiang:
    "Mainly address a regression reported by David recently observed
    together with overlayfs due to the improper return value of
    listxattr() without xattr. Update outdated expressions in document as
    well.

    Summary:

    - Fix improper return value of listxattr() with no xattr

    - Keep up documentation with latest code"

    * tag 'erofs-for-5.5-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
    erofs: update documentation
    erofs: zero out when listxattr is called with no xattr

    Linus Torvalds
     

04 Dec, 2019

1 commit

  • As David reported [1], ENODATA returns when attempting
    to modify files by using EROFS as an overlayfs lower layer.

    The root cause is that listxattr could return unexpected
    -ENODATA by mistake for inodes without xattr. That breaks
    listxattr return value convention and it can cause copy
    up failure when used with overlayfs.

    Resolve by zeroing out if no xattr is found for listxattr.

    [1] https://lore.kernel.org/r/CAEvUa7nxnby+rxK-KRMA46=exeOMApkDMAV08AjMkkPnTPV4CQ@mail.gmail.com
    Link: https://lore.kernel.org/r/20191201084040.29275-1-hsiangkao@aol.com
    Fixes: cadf1ccf1b00 ("staging: erofs: add error handling for xattr submodule")
    Cc: # 4.19+
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Gao Xiang
     

24 Nov, 2019

1 commit

  • We have already handled cache_strategy option carefully,
    so incorrect setting could not pass option parsing.
    Meanwhile, print 'cache_strategy=(unknown)' can cause
    failure on remount.

    Link: https://lore.kernel.org/r/20191119115049.3401-1-cgxu519@mykernel.net
    Signed-off-by: Chengguang Xu
    Reviewed-by: Gao Xiang
    Reviewed-by: Chao Yu
    Signed-off-by: Gao Xiang

    Chengguang Xu