xfs: always log corruption errors
Make sure we log something to dmesg whenever we return -EFSCORRUPTED up the call stack. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "xfs_inode.h"
|
||||
#include "xfs_attr.h"
|
||||
#include "xfs_trace.h"
|
||||
#include "xfs_error.h"
|
||||
#include <linux/posix_acl_xattr.h>
|
||||
|
||||
|
||||
@@ -23,6 +24,7 @@
|
||||
|
||||
STATIC struct posix_acl *
|
||||
xfs_acl_from_disk(
|
||||
struct xfs_mount *mp,
|
||||
const struct xfs_acl *aclp,
|
||||
int len,
|
||||
int max_entries)
|
||||
@@ -32,11 +34,18 @@ xfs_acl_from_disk(
|
||||
const struct xfs_acl_entry *ace;
|
||||
unsigned int count, i;
|
||||
|
||||
if (len < sizeof(*aclp))
|
||||
if (len < sizeof(*aclp)) {
|
||||
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, aclp,
|
||||
len);
|
||||
return ERR_PTR(-EFSCORRUPTED);
|
||||
}
|
||||
|
||||
count = be32_to_cpu(aclp->acl_cnt);
|
||||
if (count > max_entries || XFS_ACL_SIZE(count) != len)
|
||||
if (count > max_entries || XFS_ACL_SIZE(count) != len) {
|
||||
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, aclp,
|
||||
len);
|
||||
return ERR_PTR(-EFSCORRUPTED);
|
||||
}
|
||||
|
||||
acl = posix_acl_alloc(count, GFP_KERNEL);
|
||||
if (!acl)
|
||||
@@ -145,7 +154,7 @@ xfs_get_acl(struct inode *inode, int type)
|
||||
if (error != -ENOATTR)
|
||||
acl = ERR_PTR(error);
|
||||
} else {
|
||||
acl = xfs_acl_from_disk(xfs_acl, len,
|
||||
acl = xfs_acl_from_disk(ip->i_mount, xfs_acl, len,
|
||||
XFS_ACL_MAX_ENTRIES(ip->i_mount));
|
||||
kmem_free(xfs_acl);
|
||||
}
|
||||
|
Reference in New Issue
Block a user