| .. | .. | 
|---|
| 192 | 192 | case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: | 
|---|
| 193 | 193 | case Z_EROFS_VLE_CLUSTER_TYPE_HEAD: | 
|---|
| 194 | 194 | m->clusterofs = le16_to_cpu(di->di_clusterofs); | 
|---|
|  | 195 | +		if (m->clusterofs >= 1 << vi->z_logical_clusterbits) { | 
|---|
|  | 196 | +			DBG_BUGON(1); | 
|---|
|  | 197 | +			return -EFSCORRUPTED; | 
|---|
|  | 198 | +		} | 
|---|
| 195 | 199 | m->pblk = le32_to_cpu(di->di_u.blkaddr); | 
|---|
| 196 | 200 | break; | 
|---|
| 197 | 201 | default: | 
|---|
| .. | .. | 
|---|
| 225 | 229 | u8 *in, type; | 
|---|
| 226 | 230 | bool big_pcluster; | 
|---|
| 227 | 231 |  | 
|---|
| 228 |  | -	if (1 << amortizedshift == 4) | 
|---|
|  | 232 | +	if (1 << amortizedshift == 4 && lclusterbits <= 14) | 
|---|
| 229 | 233 | vcnt = 2; | 
|---|
| 230 | 234 | else if (1 << amortizedshift == 2 && lclusterbits == 12) | 
|---|
| 231 | 235 | vcnt = 16; | 
|---|
| .. | .. | 
|---|
| 318 | 322 | { | 
|---|
| 319 | 323 | struct inode *const inode = m->inode; | 
|---|
| 320 | 324 | struct erofs_inode *const vi = EROFS_I(inode); | 
|---|
| 321 |  | -	const unsigned int lclusterbits = vi->z_logical_clusterbits; | 
|---|
| 322 | 325 | const erofs_off_t ebase = ALIGN(iloc(EROFS_I_SB(inode), vi->nid) + | 
|---|
| 323 | 326 | vi->inode_isize + vi->xattr_isize, 8) + | 
|---|
| 324 | 327 | sizeof(struct z_erofs_map_header); | 
|---|
| .. | .. | 
|---|
| 327 | 330 | unsigned int amortizedshift; | 
|---|
| 328 | 331 | erofs_off_t pos; | 
|---|
| 329 | 332 | int err; | 
|---|
| 330 |  | - | 
|---|
| 331 |  | -	if (lclusterbits != 12) | 
|---|
| 332 |  | -		return -EOPNOTSUPP; | 
|---|
| 333 | 333 |  | 
|---|
| 334 | 334 | if (lcn >= totalidx) | 
|---|
| 335 | 335 | return -EINVAL; | 
|---|