diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
| commit | 7731b8bc94e599c9a79e428f3359ff2c34b7576a (patch) | |
| tree | 879f18ccbe274122f2d4f095b43cbc7f953e0ada /fs/xfs/libxfs/xfs_inode_buf.c | |
| parent | 48e315618dc4dc8904182cd221e3d395d5d97005 (diff) | |
| parent | 9ffc59d57228d74809700be6f7ecb1db10292f05 (diff) | |
Merge branch 'linus' into x86/urgent
Required to queue a dependent fix.
Diffstat (limited to 'fs/xfs/libxfs/xfs_inode_buf.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_inode_buf.c | 34 | 
1 files changed, 15 insertions, 19 deletions
diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c index 1201107eabc6..d38d724534c4 100644 --- a/fs/xfs/libxfs/xfs_inode_buf.c +++ b/fs/xfs/libxfs/xfs_inode_buf.c @@ -1,19 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Copyright (c) 2000-2006 Silicon Graphics, Inc.   * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   */  #include "xfs.h"  #include "xfs_fs.h" @@ -201,11 +189,6 @@ xfs_imap_to_bp(  			ASSERT(buf_flags & XBF_TRYLOCK);  			return error;  		} - -		if (error == -EFSCORRUPTED && -		    (iget_flags & XFS_IGET_UNTRUSTED)) -			return -EINVAL; -  		xfs_warn(mp, "%s: xfs_trans_read_buf() returned error %d.",  			__func__, error);  		return error; @@ -397,6 +380,7 @@ xfs_dinode_verify(  	xfs_ino_t		ino,  	struct xfs_dinode	*dip)  { +	xfs_failaddr_t		fa;  	uint16_t		mode;  	uint16_t		flags;  	uint64_t		flags2; @@ -513,6 +497,12 @@ xfs_dinode_verify(  			return __this_address;  	} +	/* extent size hint validation */ +	fa = xfs_inode_validate_extsize(mp, be32_to_cpu(dip->di_extsize), +			mode, flags); +	if (fa) +		return fa; +  	/* only version 3 or greater inodes are extensively verified here */  	if (dip->di_version < 3)  		return NULL; @@ -521,7 +511,7 @@ xfs_dinode_verify(  	/* don't allow reflink/cowextsize if we don't have reflink */  	if ((flags2 & (XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE)) && -            !xfs_sb_version_hasreflink(&mp->m_sb)) +	     !xfs_sb_version_hasreflink(&mp->m_sb))  		return __this_address;  	/* only regular files get reflink */ @@ -536,6 +526,12 @@ xfs_dinode_verify(  	if ((flags2 & XFS_DIFLAG2_REFLINK) && (flags2 & XFS_DIFLAG2_DAX))  		return __this_address; +	/* COW extent size hint validation */ +	fa = xfs_inode_validate_cowextsize(mp, be32_to_cpu(dip->di_cowextsize), +			mode, flags, flags2); +	if (fa) +		return fa; +  	return NULL;  }  | 
