Allow unix_io offsets greater than 2G
Addresses SourceForge Bug: #1547922
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index fb33c16..4ede000 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -691,7 +691,7 @@
const char *arg)
{
struct unix_private_data *data;
- unsigned long tmp;
+ unsigned long long tmp;
char *end;
EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
@@ -702,10 +702,12 @@
if (!arg)
return EXT2_ET_INVALID_ARGUMENT;
- tmp = strtoul(arg, &end, 0);
+ tmp = strtoull(arg, &end, 0);
if (*end)
return EXT2_ET_INVALID_ARGUMENT;
data->offset = tmp;
+ if (data->offset < 0)
+ return EXT2_ET_INVALID_ARGUMENT;
return 0;
}
return EXT2_ET_INVALID_ARGUMENT;