xfs: don't leak EFSBADCRC to userspace
[deliverable/linux.git] / fs / xfs / xfs_trans_buf.c
index 647b6f1d8923fee484ada5eea3e2e68d47df8286..b8eef0549f3f9a39cc68d06cf7a9cbcb04af469f 100644 (file)
@@ -275,6 +275,10 @@ xfs_trans_read_buf_map(
                        XFS_BUF_UNDONE(bp);
                        xfs_buf_stale(bp);
                        xfs_buf_relse(bp);
+
+                       /* bad CRC means corrupted metadata */
+                       if (error == EFSBADCRC)
+                               error = EFSCORRUPTED;
                        return error;
                }
 #ifdef DEBUG
@@ -338,6 +342,9 @@ xfs_trans_read_buf_map(
                                if (tp->t_flags & XFS_TRANS_DIRTY)
                                        xfs_force_shutdown(tp->t_mountp,
                                                        SHUTDOWN_META_IO_ERROR);
+                               /* bad CRC means corrupted metadata */
+                               if (error == EFSBADCRC)
+                                       error = EFSCORRUPTED;
                                return error;
                        }
                }
@@ -375,6 +382,10 @@ xfs_trans_read_buf_map(
                if (tp->t_flags & XFS_TRANS_DIRTY)
                        xfs_force_shutdown(tp->t_mountp, SHUTDOWN_META_IO_ERROR);
                xfs_buf_relse(bp);
+
+               /* bad CRC means corrupted metadata */
+               if (error == EFSBADCRC)
+                       error = EFSCORRUPTED;
                return error;
        }
 #ifdef DEBUG
This page took 0.028938 seconds and 5 git commands to generate.