mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-17 06:39:37 +02:00
xfs: check opcode and iovec count match in xlog_recover_attri_commit_pass2
commit ad206ae50e
upstream.
Check that the number of recovered log iovecs is what is expected for
the xattri opcode is expecting.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c13c21f778
commit
0934046e33
|
@ -719,6 +719,7 @@ xlog_recover_attri_commit_pass2(
|
||||||
const void *attr_value = NULL;
|
const void *attr_value = NULL;
|
||||||
const void *attr_name;
|
const void *attr_name;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
unsigned int op;
|
||||||
|
|
||||||
attri_formatp = item->ri_buf[0].i_addr;
|
attri_formatp = item->ri_buf[0].i_addr;
|
||||||
attr_name = item->ri_buf[1].i_addr;
|
attr_name = item->ri_buf[1].i_addr;
|
||||||
|
@ -737,6 +738,32 @@ xlog_recover_attri_commit_pass2(
|
||||||
return -EFSCORRUPTED;
|
return -EFSCORRUPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check the number of log iovecs makes sense for the op code. */
|
||||||
|
op = attri_formatp->alfi_op_flags & XFS_ATTRI_OP_FLAGS_TYPE_MASK;
|
||||||
|
switch (op) {
|
||||||
|
case XFS_ATTRI_OP_FLAGS_SET:
|
||||||
|
case XFS_ATTRI_OP_FLAGS_REPLACE:
|
||||||
|
/* Log item, attr name, attr value */
|
||||||
|
if (item->ri_total != 3) {
|
||||||
|
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
|
||||||
|
attri_formatp, len);
|
||||||
|
return -EFSCORRUPTED;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XFS_ATTRI_OP_FLAGS_REMOVE:
|
||||||
|
/* Log item, attr name */
|
||||||
|
if (item->ri_total != 2) {
|
||||||
|
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
|
||||||
|
attri_formatp, len);
|
||||||
|
return -EFSCORRUPTED;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
|
||||||
|
attri_formatp, len);
|
||||||
|
return -EFSCORRUPTED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Validate the attr name */
|
/* Validate the attr name */
|
||||||
if (item->ri_buf[1].i_len !=
|
if (item->ri_buf[1].i_len !=
|
||||||
xlog_calc_iovec_len(attri_formatp->alfi_name_len)) {
|
xlog_calc_iovec_len(attri_formatp->alfi_name_len)) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user