From: Tobias Stoeckmann <tobias@stoeckmann.org>
To: util-linux@vger.kernel.org
Subject: [PATCH 1/2] fincore: Handle large files correctly on 32 bit
Date: Sun, 25 Feb 2018 20:27:18 +0100 [thread overview]
Message-ID: <20180225192717.GA5871@localhost> (raw)
If a file is larger than 4 GB on a 32 bit system with large file
support (default), it can happen that not all pages are properly
processed. This happens due to an int truncation (off_t vs size_t).
You can reproduce this on 32 bit with these commands:
$ dd if=/dev/zero of=4gb-file seek=4294967295 count=1 bs=1
$ fincore 4gb-file
fincore: failed to do mmap: 4gb-file: Invalid argument
If a file is larger than 4 GB, the first few pages of a file won't
be properly processed. "len" will be smaller than window_size,
but the for-loop iterates "window_size" bytes, skipping some pages.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
---
misc-utils/fincore.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/misc-utils/fincore.c b/misc-utils/fincore.c
index 4641408f8..ab11594cc 100644
--- a/misc-utils/fincore.c
+++ b/misc-utils/fincore.c
@@ -199,11 +199,11 @@ static int fincore_fd (struct fincore_control *ctl,
int warned_once = 0;
for (file_offset = 0; file_offset < file_size; file_offset += window_size) {
- size_t len;
+ off_t len;
void *window = NULL;
len = file_size - file_offset;
- if (len >= window_size)
+ if (len >= (off_t) window_size)
len = window_size;
window = mmap(window, len, PROT_NONE, MAP_PRIVATE, fd, file_offset);
--
2.16.2
next reply other threads:[~2018-02-25 19:27 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-25 19:27 Tobias Stoeckmann [this message]
2018-02-26 10:56 ` [PATCH 1/2] fincore: Handle large files correctly on 32 bit Karel Zak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180225192717.GA5871@localhost \
--to=tobias@stoeckmann.org \
--cc=util-linux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.