* sm8250/lineage-20:
BACKPORT: erofs: fix lz4 inplace decompression
ANDROID: Enable percpu high priority kthreads for erofs
UPSTREAM: erofs: fix an error code in z_erofs_init_zip_subsystem()
BACKPORT: erofs: add per-cpu threads for decompression as an option
sched: Provide sched_set_fifo()
ANDROID: GKI: enable CONFIG_EROFS_FS=y
Revert "erofs: add REQ_RAHEAD flag to readahead requests"
erofs: Switch to attach/detach_page_private
include/linux/pagemap.h: introduce attach/detach_page_private
BACKPORT: erofs: fix use-after-free of on-stack io[]
MAINTAINERS: erofs: update my email address
MAINTAINERS: erofs: complete sub-entries for erofs
erofs: move erofs out of staging
staging: erofs: turn cache strategies into mount options
staging: erofs: kill CONFIG_EROFS_FS_USE_VM_MAP_RAM
staging: erofs: support IO read error injection
staging: erofs: complete POSIX ACL support
staging: erofs: add document
Reapply "erofs: support decompress big pcluster for lz4 backend"
Revert "erofs: fix lz4 inplace decompression"
Revert "Reapply "cred: switch to using atomic_long_t""
Reapply "cred: switch to using atomic_long_t"
BACKPORT: net: core: enable SO_BINDTODEVICE for non-root users
tcp: Add memory barrier to tcp_push()
tracing: Ensure visibility when inserting an element into tracing_map
net/rds: Fix UBSAN: array-index-out-of-bounds in rds_cmsg_recv
llc: Drop support for ETH_P_TR_802_2.
llc: make llc_ui_sendmsg() more robust against bonding changes
vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING
net/smc: fix illegal rmb_desc access in SMC-D connection dump
drivers: core: fix kernel-doc markup for dev_err_probe()
driver code: print symbolic error code
block: Remove special-casing of compound pages
Revert "driver core: Annotate dev_err_probe() with __must_check"
nouveau/vmm: don't set addr on the fail path to avoid warning
driver core: Annotate dev_err_probe() with __must_check
parisc/firmware: Fix F-extend for PDC addresses
x86/CPU/AMD: Fix disabling XSAVES on AMD family 0x17 due to erratum
rpmsg: virtio: Free driver_override when rpmsg_remove()
powerpc: Use always instead of always-y in for crtsavres.o
hwrng: core - Fix page fault dead lock on mmap-ed hwrng
PM: hibernate: Enforce ordering during image compression/decompression
crypto: api - Disallow identical driver names
ext4: allow for the last group to be marked as trimmed
serial: sc16is7xx: add check for unsupported SPI modes during probe
spi: introduce SPI_MODE_X_MASK macro
driver core: add device probe log helper
serial: sc16is7xx: set safe default SPI clock frequency
units: add the HZ macros
units: change from 'L' to 'UL'
units: Add Watt units
include/linux/units.h: add helpers for kelvin to/from Celsius conversion
PCI: mediatek: Clear interrupt status before dispatching handler
soc: qcom: smem: Add boundary checks for partitions
clk: qcom: gcc-sdm660: Add SDCC1 BCR clocks for SDM660
dt-bindings: clock: Add support for SDCC BCR id for SDM660
exfat: github action: run buiuld and tests on for-kernel-version-from-4.1.0 branch
exfat: fix ALIGN_DOWN undefined error
exfat: using ffs instead of internal logic
exfat: using hweight instead of internal logic
exfat: fix ctime is not updated
exfat: fix setting uninitialized time to ctime/atime
exfat: convert to new timestamp accessors
exfat: convert to ctime accessor functions
exfat: fs: pass the request_mask to generic_fillattr
exfat: convert to simple_rename_timestamp
exfat: ensure that ctime is updated whenever the mtime is
exfat: fs: add CONFIG_BUFFER_HEAD
exfat: use fat ioctls definitions from include/uapi/linux/msdos_fs.h
exfat: github action: remove liunx-4.1 source to get more disk space
exfat: support create zero-size directory
exfat: support handle zero-size directory
exfat: add ioctls for accessing attributes
exfat: vfs: get rid of old '->iterate' directory operation
Change-Id: I382edb2b4faa25ea8e11ba4b916cb2520b6ec35d
https://source.android.com/docs/security/bulletin/2024-04-01
* tag 'ASB-2024-04-05_4.19-stable' of https://android.googlesource.com/kernel/common:
Revert "Reapply "cred: switch to using atomic_long_t""
Reapply "cred: switch to using atomic_long_t"
BACKPORT: net: core: enable SO_BINDTODEVICE for non-root users
tcp: Add memory barrier to tcp_push()
tracing: Ensure visibility when inserting an element into tracing_map
net/rds: Fix UBSAN: array-index-out-of-bounds in rds_cmsg_recv
llc: Drop support for ETH_P_TR_802_2.
llc: make llc_ui_sendmsg() more robust against bonding changes
vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING
net/smc: fix illegal rmb_desc access in SMC-D connection dump
drivers: core: fix kernel-doc markup for dev_err_probe()
driver code: print symbolic error code
block: Remove special-casing of compound pages
Revert "driver core: Annotate dev_err_probe() with __must_check"
nouveau/vmm: don't set addr on the fail path to avoid warning
driver core: Annotate dev_err_probe() with __must_check
parisc/firmware: Fix F-extend for PDC addresses
x86/CPU/AMD: Fix disabling XSAVES on AMD family 0x17 due to erratum
rpmsg: virtio: Free driver_override when rpmsg_remove()
powerpc: Use always instead of always-y in for crtsavres.o
hwrng: core - Fix page fault dead lock on mmap-ed hwrng
PM: hibernate: Enforce ordering during image compression/decompression
crypto: api - Disallow identical driver names
ext4: allow for the last group to be marked as trimmed
serial: sc16is7xx: add check for unsupported SPI modes during probe
spi: introduce SPI_MODE_X_MASK macro
driver core: add device probe log helper
serial: sc16is7xx: set safe default SPI clock frequency
units: add the HZ macros
units: change from 'L' to 'UL'
units: Add Watt units
include/linux/units.h: add helpers for kelvin to/from Celsius conversion
PCI: mediatek: Clear interrupt status before dispatching handler
Change-Id: I5a5f215e11cc4d2ae7ad65c53d50819f18988acf
"LA.UM.9.12.r1-18300-SMxx50.QSSI14.0"
* tag 'LA.UM.9.12.r1-18300-SMxx50.QSSI14.0' of https://git.codelinaro.org/clo/la/kernel/msm-4.19:
soc: qcom: smem: Add boundary checks for partitions
clk: qcom: gcc-sdm660: Add SDCC1 BCR clocks for SDM660
dt-bindings: clock: Add support for SDCC BCR id for SDM660
Change-Id: I056a382b92060591cd4a261c87fc4c0d23f79d03
commit 3c12466b6b7bf1e56f9b32c366a3d83d87afb4de upstream.
Currently EROFS can map another compressed buffer for inplace
decompression, that was used to handle the cases that some pages of
compressed data are actually not in-place I/O.
However, like most simple LZ77 algorithms, LZ4 expects the compressed
data is arranged at the end of the decompressed buffer and it
explicitly uses memmove() to handle overlapping:
__________________________________________________________
|_ direction of decompression --> ____ |_ compressed data _|
Although EROFS arranges compressed data like this, it typically maps two
individual virtual buffers so the relative order is uncertain.
Previously, it was hardly observed since LZ4 only uses memmove() for
short overlapped literals and x86/arm64 memmove implementations seem to
completely cover it up and they don't have this issue. Juhyung reported
that EROFS data corruption can be found on a new Intel x86 processor.
After some analysis, it seems that recent x86 processors with the new
FSRM feature expose this issue with "rep movsb".
Let's strictly use the decompressed buffer for lz4 inplace
decompression for now. Later, as an useful improvement, we could try
to tie up these two buffers together in the correct order.
Reported-and-tested-by: Juhyung Park <qkrwngud825@gmail.com>
Closes: https://lore.kernel.org/r/CAD14+f2AVKf8Fa2OO1aAUdDNTDsVzzR6ctU_oJSmTyd6zSYR2Q@mail.gmail.com
Fixes: 0ffd71bcc3a0 ("staging: erofs: introduce LZ4 decompression inplace")
Fixes: 598162d05080 ("erofs: support decompress big pcluster for lz4 backend")
Cc: stable <stable@vger.kernel.org> # 5.4+
Tested-by: Yifan Zhao <zhaoyifan@sjtu.edu.cn>
Change-Id: Ib7a578283e33f0329ae2133223878ddf0738aba4
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20231206045534.3920847-1-hsiangkao@linux.alibaba.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[mkbestas: Adapt for android <=5.4 kernel which contains backports that
caused various conflicts]
Signed-off-by: Michael Bestas <mkbestas@lineageos.org>
Using per-cpu thread pool we can reduce the scheduling latency compared
to workqueue implementation. With this patch scheduling latency and
variation is reduced as per-cpu threads are high priority kthread_workers.
The results were evaluated on arm64 Android devices running 5.10 kernel.
The table below shows resulting improvements of total scheduling latency
for the same app launch benchmark runs with 50 iterations. Scheduling
latency is the latency between when the task (workqueue kworker vs
kthread_worker) became eligible to run to when it actually started
running.
+-------------------------+-----------+----------------+---------+
| | workqueue | kthread_worker | diff |
+-------------------------+-----------+----------------+---------+
| Average (us) | 15253 | 2914 | -80.89% |
| Median (us) | 14001 | 2912 | -79.20% |
| Minimum (us) | 3117 | 1027 | -67.05% |
| Maximum (us) | 30170 | 3805 | -87.39% |
| Standard deviation (us) | 7166 | 359 | |
+-------------------------+-----------+----------------+---------+
Background: Boot times and cold app launch benchmarks are very
important to the Android ecosystem as they directly translate to
responsiveness from user point of view. While EROFS provides
a lot of important features like space savings, we saw some
performance penalty in cold app launch benchmarks in few scenarios.
Analysis showed that the significant variance was coming from the
scheduling cost while decompression cost was more or less the same.
Having per-cpu thread pool we can see from the above table that this
variation is reduced by ~80% on average. This problem was discussed
at LPC 2022. Link to LPC 2022 slides and talk at [1]
[1] https://lpc.events/event/16/contributions/1338/
[ Gao Xiang: At least, we have to add this until WQ_UNBOUND workqueue
issue [2] on many arm64 devices is resolved. ]
[2] https://lore.kernel.org/r/CAJkfWY490-m6wNubkxiTPsW59sfsQs37Wey279LmiRxKt7aQYg@mail.gmail.com
Bug: 271636421
Bug: 278520205
Test: launch_cvd
Change-Id: I9dce2bfd6f40ec6a210161b80cee7c0417b4edb3
Signed-off-by: Sandeep Dhavale <dhavale@google.com>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230208093322.75816-1-hsiangkao@linux.alibaba.com
(cherry picked from commit 3fffb589b9a6e331e39cb75373ee7691acd7b109)
[dhavale: Fixed minor conflict as upstream now has zdata.h folded in
zdata.c]
Signed-off-by: Sandeep Dhavale <dhavale@google.com>
(cherry picked from commit 566a7f6c6b3f5f13b766fe749bbdb45918b029ac)
[dhavale: Fixed minor conflicts in Kconfig and zdata.c]
(cherry picked from commit 2de95f5d183c2174c9380a902919c8e59e380293)
Some vendors are using erofs, so instead of having to support this as a
module, build it into the kernel for everyone to use.
Bug: 157965270
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I8f8e953c13991dea50031fb4ff01ee99fbf09b88
Reason for revert: Not supported on <=5.4
This reverts commit a6b8e4a11a99cc58edd622016f47a548254da5b2.
Change-Id: I5b4b5f00fe750980d8c92c336e333142a72788ce
EROFS filesystem has been merged into linux-staging for a year.
EROFS is designed to be a better solution of saving extra storage
space with guaranteed end-to-end performance for read-only files
with the help of reduced metadata, fixed-sized output compression
and decompression inplace technologies.
In the past year, EROFS was greatly improved by many people as
a staging driver, self-tested, betaed by a large number of our
internal users, successfully applied to almost all in-service
HUAWEI smartphones as the part of EMUI 9.1 and proven to be stable
enough to be moved out of staging.
EROFS is a self-contained filesystem driver. Although there are
still some TODOs to be more generic, we have a dedicated team
actively keeping on working on EROFS in order to make it better
with the evolution of Linux kernel as the other in-kernel filesystems.
As Pavel suggested, it's better to do as one commit since git
can do moves and all histories will be saved in this way.
Let's promote it from staging and enhance it more actively as
a "real" part of kernel for more wider scenarios!
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Pavel Machek <pavel@denx.de>
Cc: David Sterba <dsterba@suse.cz>
Cc: Amir Goldstein <amir73il@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Darrick J . Wong <darrick.wong@oracle.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Jaegeuk Kim <jaegeuk@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Richard Weinberger <richard@nod.at>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Chao Yu <yuchao0@huawei.com>
Cc: Miao Xie <miaoxie@huawei.com>
Cc: Li Guifu <bluce.liguifu@huawei.com>
Cc: Fang Wei <fangwei1@huawei.com>
Change-Id: I16111e83bd97a64b13fa67354f2ee437d7b16fc5
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Link: https://lore.kernel.org/r/20190822213659.5501-1-hsiangkao@aol.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Kill all kconfig cache strategies and turn them into mount options
"cache_strategy={disable|readahead|readaround}".
As the first step, cached pages can still be usable after cache
is disabled by remounting, and these pages will be fallen out
over time, which can be refined in the later version if some
requirement is needed. Update related document as well.
Suggested-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Change-Id: I8753a190949a73b2864e5561a7b6d059da4e0684
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Link: https://lore.kernel.org/r/20190731155752.210602-20-gaoxiang25@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Used to simulate disk IO read error for testing fatal
error tolerance.
Here are the details,
1) use bio->bi_private to indicate super_block
for non-compressed bios since some (mainly meta)
pages can be of the corresponding bdev inode;
2) get super_block dynamically for compressed bios,
therefore it could not inject bios full of staging
pages, yet it doesn't affect the normal usage.
Change-Id: I82830edeac0074abf83c3758e0b692b9bd1a96ae
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This has been applied on top of a wrong revert.
The proper backport will be applied after reintroducing the reverted
commit.
This reverts commit 1a9efb0ce2.
Change-Id: I6231a3ce50ae0dec9a5633784877decc1047c327
* 'for-kernel-version-from-4.1.0' of https://github.com/namjaejeon/linux-exfat-oot:
exfat: github action: run buiuld and tests on for-kernel-version-from-4.1.0 branch
exfat: fix ALIGN_DOWN undefined error
exfat: using ffs instead of internal logic
exfat: using hweight instead of internal logic
exfat: fix ctime is not updated
exfat: fix setting uninitialized time to ctime/atime
exfat: convert to new timestamp accessors
exfat: convert to ctime accessor functions
exfat: fs: pass the request_mask to generic_fillattr
exfat: convert to simple_rename_timestamp
exfat: ensure that ctime is updated whenever the mtime is
exfat: fs: add CONFIG_BUFFER_HEAD
exfat: use fat ioctls definitions from include/uapi/linux/msdos_fs.h
exfat: github action: remove liunx-4.1 source to get more disk space
exfat: support create zero-size directory
exfat: support handle zero-size directory
exfat: add ioctls for accessing attributes
exfat: vfs: get rid of old '->iterate' directory operation
Change-Id: I8ffaa02252b1b11804a7c4c0583ebf5430bcfb49
* sm8250/lineage-20:
BACKPORT: memshare: Prevent possible integer overflow
erofs: fix lz4 inplace decompression
Revert "erofs: support decompress big pcluster for lz4 backend"
erofs: ensure that the post-EOF tails are all zeroed
erofs: fix compact 4B support for 16k block size
erofs: avoid infinite loop in z_erofs_do_read_page() when reading beyond EOF
erofs: fix potential overflow calculating xattr_isize
erofs: stop parsing non-compact HEAD index if clusterofs is invalid
erofs: avoid consecutive detection for Highmem memory
qcacmn: Fix out of bound read issue in ESP ie parse
soc: qcom: smem: Add boundary checks for partitions
msm: camera: sensor: Proper handling of race condition in util api
msm: kgsl: Do not release dma and anon buffers if unmap fails
msm: kgsl: Keep the timeline fence valid for logging
msm: camera: sensor: Proper handling of race condition in util api
fw-api: CL 25873460 - update fw common interface files
fw-api: CL 25869885 - update fw common interface files
fw-api: CL 25866433 - update fw common interface files
fw-api: CL 25840790 - update fw common interface files
fw-api: CL 25839627 - update fw common interface files
...
Change-Id: I579ac7798efc4d829d213516580746b1f2adc748
Prevent possible integer overflow by sanitizing the alloc request
size coming from the client against allottable amount of memory.
Change-Id: I74cb0f7b0808f20299586969fd5c810d44c3e576
Signed-off-by: Manoj Prabhu B <quic_bmanoj@quicinc.com>
Signed-off-by: Michael Bestas <mkbestas@lineageos.org>
"LA.UM.9.12.r1-18200-SMxx50.QSSI14.0"
* tag 'LA.UM.9.12.r1-18200-SMxx50.QSSI14.0' of https://git.codelinaro.org/clo/la/kernel/msm-4.19:
soc: qcom: smem: Add boundary checks for partitions
msm: kgsl: Do not release dma and anon buffers if unmap fails
msm: kgsl: Keep the timeline fence valid for logging
msm: npu: Fix OOB issue in IPC between driver and firmware
Change-Id: I09bfbd4349777d469c5114dd0ae21479a531571f
commit 3c12466b6b7bf1e56f9b32c366a3d83d87afb4de upstream.
Currently EROFS can map another compressed buffer for inplace
decompression, that was used to handle the cases that some pages of
compressed data are actually not in-place I/O.
However, like most simple LZ77 algorithms, LZ4 expects the compressed
data is arranged at the end of the decompressed buffer and it
explicitly uses memmove() to handle overlapping:
__________________________________________________________
|_ direction of decompression --> ____ |_ compressed data _|
Although EROFS arranges compressed data like this, it typically maps two
individual virtual buffers so the relative order is uncertain.
Previously, it was hardly observed since LZ4 only uses memmove() for
short overlapped literals and x86/arm64 memmove implementations seem to
completely cover it up and they don't have this issue. Juhyung reported
that EROFS data corruption can be found on a new Intel x86 processor.
After some analysis, it seems that recent x86 processors with the new
FSRM feature expose this issue with "rep movsb".
Let's strictly use the decompressed buffer for lz4 inplace
decompression for now. Later, as an useful improvement, we could try
to tie up these two buffers together in the correct order.
Reported-and-tested-by: Juhyung Park <qkrwngud825@gmail.com>
Closes: https://lore.kernel.org/r/CAD14+f2AVKf8Fa2OO1aAUdDNTDsVzzR6ctU_oJSmTyd6zSYR2Q@mail.gmail.com
Fixes: 0ffd71bcc3a0 ("staging: erofs: introduce LZ4 decompression inplace")
Fixes: 598162d05080 ("erofs: support decompress big pcluster for lz4 backend")
Cc: stable <stable@vger.kernel.org> # 5.4+
Tested-by: Yifan Zhao <zhaoyifan@sjtu.edu.cn>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20231206045534.3920847-1-hsiangkao@linux.alibaba.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Change-Id: I2a2b773421bbbaef7ec97ec75e0e93bf8a78255e
commit e4c1cf523d820730a86cae2c6d55924833b6f7ac upstream.
This was accidentally fixed up in commit e4c1cf523d82 but we can't
take the full change due to other dependancy issues, so here is just
the actual bugfix that is needed.
[Background]
keltargw reported an issue [1] that with mmaped I/Os, sometimes the
tail of the last page (after file ends) is not filled with zeroes.
The root cause is that such tail page could be wrongly selected for
inplace I/Os so the zeroed part will then be filled with compressed
data instead of zeroes.
A simple fix is to avoid doing inplace I/Os for such tail parts,
actually that was already fixed upstream in commit e4c1cf523d82
("erofs: tidy up z_erofs_do_read_page()") by accident.
[1] https://lore.kernel.org/r/3ad8b469-25db-a297-21f9-75db2d6ad224@linux.alibaba.com
Reported-by: keltargw <keltar.gw@gmail.com>
Fixes: 3883a79abd ("staging: erofs: introduce VLE decompression support")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Change-Id: I7936777249ed01775984c200d405d101fd74d881
commit 001b8ccd0650727e54ec16ef72bf1b8eeab7168e upstream.
In compact 4B, two adjacent lclusters are packed together as a unit to
form on-disk indexes for effective random access, as below:
(amortized = 4, vcnt = 2)
_____________________________________________
|___@_____ encoded bits __________|_ blkaddr _|
0 . amortized * vcnt = 8
. .
. . amortized * vcnt - 4 = 4
. .
.____________________________.
|_type (2 bits)_|_clusterofs_|
Therefore, encoded bits for each pack are 32 bits (4 bytes). IOWs,
since each lcluster can get 16 bits for its type and clusterofs, the
maximum supported lclustersize for compact 4B format is 16k (14 bits).
Fix this to enable compact 4B format for 16k lclusters (blocks), which
is tested on an arm64 server with 16k page size.
Fixes: 152a333a5895 ("staging: erofs: add compacted compression indexes support")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230601112341.56960-1-hsiangkao@linux.alibaba.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Change-Id: If1c45681c60f6897bb9d83662e379951084b7a32
[ Upstream commit 8191213a5835b0317c5e4d0d337ae1ae00c75253 ]
z_erofs_do_read_page() may loop infinitely due to the inappropriate
truncation in the below statement. Since the offset is 64 bits and min_t()
truncates the result to 32 bits. The solution is to replace unsigned int
with a 64-bit type, such as erofs_off_t.
cur = end - min_t(unsigned int, offset + end - map->m_la, end);
- For example:
- offset = 0x400160000
- end = 0x370
- map->m_la = 0x160370
- offset + end - map->m_la = 0x400000000
- offset + end - map->m_la = 0x00000000 (truncated as unsigned int)
- Expected result:
- cur = 0
- Actual result:
- cur = 0x370
Signed-off-by: Chunhai Guo <guochunhai@vivo.com>
Fixes: 3883a79abd ("staging: erofs: introduce VLE decompression support")
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20230710093410.44071-1-guochunhai@vivo.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Change-Id: Ibbabe41c5a338a2def37b9d29cd8c229a44450f9
[ Upstream commit 448b5a1548d87c246c3d0c3df8480d3c6eb6c11a ]
Currently, vmap()s are avoided if physical addresses are
consecutive for decompressed buffers.
I observed that is very common for 4KiB pclusters since the
numbers of decompressed pages are almost 2 or 3.
However, such detection doesn't work for Highmem pages on
32-bit machines, let's fix it now.
Reported-by: Liu Jinbao <liujinbao1@xiaomi.com>
Fixes: 7fc45dbc938a ("staging: erofs: introduce generic decompression backend")
Link: https://lore.kernel.org/r/20220708101001.21242-1-hsiangkao@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Change-Id: I5a05bb5e4feae764e820565e4a7f2cbeed8a7a3e
This reverts commit b2ea47a79d as it is
needed in Android systems. It still breaks the ABI, but that is no
longer an issue on this branch.
Bug: 317347552
Change-Id: I9c7f8901c5aabf6e0378b5218f587d6c7335522f
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Currently, SO_BINDTODEVICE requires CAP_NET_RAW. This change allows a
non-root user to bind a socket to an interface if it is not already
bound. This is useful to allow an application to bind itself to a
specific VRF for outgoing or incoming connections. Currently, an
application wanting to manage connections through several VRF need to
be privileged.
Previously, IP_UNICAST_IF and IPV6_UNICAST_IF were added for
Wine (76e21053b5 and c4062dfc42) specifically for use by
non-root processes. However, they are restricted to sendmsg() and not
usable with TCP. Allowing SO_BINDTODEVICE would allow TCP clients to
get the same privilege. As for TCP servers, outside the VRF use case,
SO_BINDTODEVICE would only further restrict connections a server could
accept.
When an application is restricted to a VRF (with `ip vrf exec`), the
socket is bound to an interface at creation and therefore, a
non-privileged call to SO_BINDTODEVICE to escape the VRF fails.
When an application bound a socket to SO_BINDTODEVICE and transmit it
to a non-privileged process through a Unix socket, a tentative to
change the bound device also fails.
Before:
>>> import socket
>>> s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, b"dummy0")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
PermissionError: [Errno 1] Operation not permitted
After:
>>> import socket
>>> s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, b"dummy0")
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, b"dummy0")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
PermissionError: [Errno 1] Operation not permitted
Bug: 323792489
Signed-off-by: Vincent Bernat <vincent@bernat.ch>
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit c427bfec18f2190b8f4718785ee8ed2db4f84ee6)
Change-Id: Ie3f4c536b78da12dd961dc681c6dfb0cdf1a06b7
Signed-off-by: Peiyong Wang <wangpeiyong@xiaomi.corp-partner.google.com>