]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
udf: avoid uninitialized variable use
authorArnd Bergmann <arnd@arndb.de>
Fri, 1 Jan 2016 14:21:54 +0000 (15:21 +0100)
committerJan Kara <jack@suse.cz>
Mon, 4 Jan 2016 09:53:29 +0000 (10:53 +0100)
A new warning has come up from a recent cleanup:

fs/udf/inode.c: In function 'udf_setup_indirect_aext':
fs/udf/inode.c:1927:28: warning: 'adsize' may be used uninitialized in this function [-Wmaybe-uninitialized]

If the alloc_type is neither ICBTAG_FLAG_AD_SHORT nor
ICBTAG_FLAG_AD_LONG, the value of adsize is undefined. Currently,
callers of these functions make sure alloc_type is one of the two valid
ones but for future proofing make sure we handle the case of invalid
alloc type as well.  This changes the code to return -EIOin that case.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: fcea62babc81 ("udf: Factor out code for creating indirect extent")
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/inode.c

index 846294891925a404d0460647644ff44133babf37..91d8fa9d87a4b1da7daa037e30623f0b9d8a96c0 100644 (file)
@@ -1889,6 +1889,8 @@ int udf_setup_indirect_aext(struct inode *inode, int block,
                adsize = sizeof(struct short_ad);
        else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG)
                adsize = sizeof(struct long_ad);
+       else
+               return -EIO;
 
        neloc.logicalBlockNum = block;
        neloc.partitionReferenceNum = epos->block.partitionReferenceNum;
@@ -1962,6 +1964,8 @@ int __udf_add_aext(struct inode *inode, struct extent_position *epos,
                adsize = sizeof(struct short_ad);
        else if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
                adsize = sizeof(struct long_ad);
+       else
+               return -EIO;
 
        if (!epos->bh) {
                WARN_ON(iinfo->i_lenAlloc !=