mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
Changes since last update:
- Fix a "BUG: kernel NULL pointer dereference" issue due to
inconsistent on-disk indices of compressed inodes against
per-sb `available_compr_algs` generated by Syzkaller;
- Don't use certain unnecessary folio_*() helpers if the folio
type (page cache) is known.
-----BEGIN PGP SIGNATURE-----
iQJFBAABCgAvFiEEQ0A6bDUS9Y+83NPFUXZn5Zlu5qoFAmWpO4cRHHhpYW5nQGtl
cm5lbC5vcmcACgkQUXZn5Zlu5qrJ7w//UpMasVxNpnZCsaWntDhp8AM9+wQZjosM
sc0B1sFjuISQuGfjVEpnlabSudzRRGKI/0R55M8/woa8fuSXJiRNou+bv9Ogi+Aa
CJ4E4+TSCGq98rjuuM9gb5L7V36pBp0PtxgANzKskHcq5w5JUNG6f6nhNQqnvRUG
M7hBvzzLLz3fRPZZFzdu5S8ekwuBrq8K/PBM7PFfDgbl5IZ0cjLXXIdx61MXTro9
FGGJSRbJsUYg6+sqb0YWmluW4CBiwe7crovp6IaPBU0744Ga+jGyTNrOWAGjW42e
7glsM5MClTfmv17LJK3jV1Dg8EPkKtrhpeTCdECnWnuAyLGKFOT4juNc68GzCieR
sSRR+WhmF/B2msAvyH4+gcaULCMAhLiVL1Yf1sfaxC1walEuyEM0EPWEHhAEGXjA
BpT6+EZBbYdh24hpyNSNWy/xGMHuiUFy7940yII0o/9cvEbMXNPtIHxA09mOH08X
1tWgLlsLJ69ApIFYD3TkP9yNj22HrxRCQByKvYEe9JsmxwqDayXUP5FQLv1NPNMm
ds36PDbNpxAM/cBnQcfPbZSODSWOCkLIHtmOvFP12tiixMG7yc4KY14Wuj3ZyHYr
T16BZLlcdobHPapSsxzEQqPTgAYBcvh+6PHXfwnLsoXSYQXoxaUQMX1JREnmC3+I
4nMpKIp3qpY=
=knvn
-----END PGP SIGNATURE-----
Merge tag 'erofs-for-6.8-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs
Pull erofs fixes from Gao Xiang:
- Fix a "BUG: kernel NULL pointer dereference" issue due to
inconsistent on-disk indices of compressed inodes against
per-sb `available_compr_algs` generated by Syzkaller
- Don't use certain unnecessary folio_*() helpers if the folio
type (page cache) is known
* tag 'erofs-for-6.8-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
erofs: Don't use certain unnecessary folio_*() functions
erofs: fix inconsistent per-file compression format
This commit is contained in:
commit
6f3625006b
|
|
@ -408,7 +408,7 @@ int z_erofs_parse_cfgs(struct super_block *sb, struct erofs_super_block *dsb)
|
|||
int size, ret = 0;
|
||||
|
||||
if (!erofs_sb_has_compr_cfgs(sbi)) {
|
||||
sbi->available_compr_algs = Z_EROFS_COMPRESSION_LZ4;
|
||||
sbi->available_compr_algs = 1 << Z_EROFS_COMPRESSION_LZ4;
|
||||
return z_erofs_load_lz4_config(sb, dsb, NULL, 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -165,10 +165,10 @@ static int erofs_fscache_read_folios_async(struct fscache_cookie *cookie,
|
|||
static int erofs_fscache_meta_read_folio(struct file *data, struct folio *folio)
|
||||
{
|
||||
int ret;
|
||||
struct erofs_fscache *ctx = folio_mapping(folio)->host->i_private;
|
||||
struct erofs_fscache *ctx = folio->mapping->host->i_private;
|
||||
struct erofs_fscache_request *req;
|
||||
|
||||
req = erofs_fscache_req_alloc(folio_mapping(folio),
|
||||
req = erofs_fscache_req_alloc(folio->mapping,
|
||||
folio_pos(folio), folio_size(folio));
|
||||
if (IS_ERR(req)) {
|
||||
folio_unlock(folio);
|
||||
|
|
@ -276,7 +276,7 @@ static int erofs_fscache_read_folio(struct file *file, struct folio *folio)
|
|||
struct erofs_fscache_request *req;
|
||||
int ret;
|
||||
|
||||
req = erofs_fscache_req_alloc(folio_mapping(folio),
|
||||
req = erofs_fscache_req_alloc(folio->mapping,
|
||||
folio_pos(folio), folio_size(folio));
|
||||
if (IS_ERR(req)) {
|
||||
folio_unlock(folio);
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ static int z_erofs_do_map_blocks(struct inode *inode,
|
|||
.map = map,
|
||||
};
|
||||
int err = 0;
|
||||
unsigned int lclusterbits, endoff;
|
||||
unsigned int lclusterbits, endoff, afmt;
|
||||
unsigned long initial_lcn;
|
||||
unsigned long long ofs, end;
|
||||
|
||||
|
|
@ -543,17 +543,20 @@ static int z_erofs_do_map_blocks(struct inode *inode,
|
|||
err = -EFSCORRUPTED;
|
||||
goto unmap_out;
|
||||
}
|
||||
if (vi->z_advise & Z_EROFS_ADVISE_INTERLACED_PCLUSTER)
|
||||
map->m_algorithmformat =
|
||||
Z_EROFS_COMPRESSION_INTERLACED;
|
||||
else
|
||||
map->m_algorithmformat =
|
||||
Z_EROFS_COMPRESSION_SHIFTED;
|
||||
} else if (m.headtype == Z_EROFS_LCLUSTER_TYPE_HEAD2) {
|
||||
map->m_algorithmformat = vi->z_algorithmtype[1];
|
||||
afmt = vi->z_advise & Z_EROFS_ADVISE_INTERLACED_PCLUSTER ?
|
||||
Z_EROFS_COMPRESSION_INTERLACED :
|
||||
Z_EROFS_COMPRESSION_SHIFTED;
|
||||
} else {
|
||||
map->m_algorithmformat = vi->z_algorithmtype[0];
|
||||
afmt = m.headtype == Z_EROFS_LCLUSTER_TYPE_HEAD2 ?
|
||||
vi->z_algorithmtype[1] : vi->z_algorithmtype[0];
|
||||
if (!(EROFS_I_SB(inode)->available_compr_algs & (1 << afmt))) {
|
||||
erofs_err(inode->i_sb, "inconsistent algorithmtype %u for nid %llu",
|
||||
afmt, vi->nid);
|
||||
err = -EFSCORRUPTED;
|
||||
goto unmap_out;
|
||||
}
|
||||
}
|
||||
map->m_algorithmformat = afmt;
|
||||
|
||||
if ((flags & EROFS_GET_BLOCKS_FIEMAP) ||
|
||||
((flags & EROFS_GET_BLOCKS_READMORE) &&
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user