[U-Boot] [RFC PATCH] ext4: Fix comparision of unsigned expression with < 0

Lokesh Vutla lokeshvutla at ti.com
Wed Apr 26 03:26:49 UTC 2017



On Tuesday 25 April 2017 11:34 PM, Tom Rini wrote:
> On Tue, Apr 25, 2017 at 10:22:27AM +0530, Lokesh Vutla wrote:
>> In file ext4fs.c funtion ext4fs_read_file() compares an
>> unsigned expression with < 0 like below
>>
>> 	lbaint_t blknr;
>> 	blknr = read_allocated_block(&(node->inode), i);
>> 	if (blknr < 0)
>> 		return -1;
>>
>> blknr is of type ulong/uint64_t. read_allocated_block() returns
>> long int. So comparing blknr with < 0 will always be false. Instead
>> declare blknr as long int.
>>
>> Reported-by: Sunita Nadampalli <sunitan at ti.com>
>> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
>> ---
>>  fs/ext4/ext4fs.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
>> index 7187dcfb05..081509dbb4 100644
>> --- a/fs/ext4/ext4fs.c
>> +++ b/fs/ext4/ext4fs.c
>> @@ -71,7 +71,7 @@ int ext4fs_read_file(struct ext2fs_node *node, loff_t pos,
>>  	blockcnt = lldiv(((len + pos) + blocksize - 1), blocksize);
>>  
>>  	for (i = lldiv(pos, blocksize); i < blockcnt; i++) {
>> -		lbaint_t blknr;
>> +		long int blknr;
>>  		int blockoff = pos - (blocksize * i);
>>  		int blockend = blocksize;
>>  		int skipfirst = 0;
> 
> My only question is, did you catch that by inspection, clang, or a newer

This is reported by Sunita and not sure how she caught it.

> than gcc-6.3 warning?  Also, fs/ext4/dev.c:63 is a similar problem, if
> you'd like to non-RFC a v2.  Thanks!

In this case do you want me to drop the check or change lbaint_t to long
int and update the argument type cast where ever ext4fs_devread() is called?

Thanks and regards,
Lokesh


More information about the U-Boot mailing list