From: Eric Sandeen <sandeen@sandeen.net>
To: xfs-oss <xfs@oss.sgi.com>
Subject: [PATCH V2] xfs_io: don't assign cvtnum() return to unsigned var
Date: Wed, 02 Dec 2009 12:26:18 -0600 [thread overview]
Message-ID: <4B16B14A.40709@sandeen.net> (raw)
In-Reply-To: <4B16AFCA.5040302@sandeen.net>
(whoops meant to include 2 fixes in that)
cvtnum() returns -1LL for unparseable values, but if we
assign to a signed var, we can't test it:
There are problems in mincore & madvise.
xfs_io> mincore 0 xxx
range (0:0) is beyond mapping (0:1048576)
Use a temporary signed var so we can detect the error:
xfs_io> mincore 0 xxx
non-numeric length argument -- xxx
and also test whether it may overflow a size_t.
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
diff --git a/io/mincore.c b/io/mincore.c
index f863f84..d534540 100644
--- a/io/mincore.c
+++ b/io/mincore.c
@@ -30,7 +30,7 @@ mincore_f(
int argc,
char **argv)
{
- off64_t offset;
+ off64_t offset, llength;
size_t length;
size_t blocksize, sectsize;
void *start;
@@ -49,12 +49,17 @@ mincore_f(
argv[1]);
return 0;
}
- length = cvtnum(blocksize, sectsize, argv[2]);
- if (length < 0) {
+ llength = cvtnum(blocksize, sectsize, argv[2]);
+ if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[2]);
return 0;
- }
+ } else if (llength > (size_t)llength) {
+ printf(_("length argument too large -- %lld\n"),
+ llength);
+ return 0;
+ } else
+ length = (size_t)llength;
} else {
return command_usage(&mincore_cmd);
}
diff --git a/io/madvise.c b/io/madvise.c
index 694cd41..cd16a4c 100644
--- a/io/madvise.c
+++ b/io/madvise.c
@@ -52,7 +52,7 @@ madvise_f(
int argc,
char **argv)
{
- off64_t offset;
+ off64_t offset, llength;
size_t length;
void *start;
int advise = MADV_NORMAL, c;
@@ -89,12 +89,17 @@ madvise_f(
return 0;
}
optind++;
- length = cvtnum(blocksize, sectsize, argv[optind]);
- if (length < 0) {
+ llength = cvtnum(blocksize, sectsize, argv[optind]);
+ if (llength < 0) {
printf(_("non-numeric length argument -- %s\n"),
argv[optind]);
return 0;
- }
+ } else if (llength > (size_t)llength) {
+ printf(_("length argument too large -- %lld\n"),
+ llength);
+ return 0;
+ } else
+ length = (size_t)llength;
} else {
return command_usage(&madvise_cmd);
}
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2009-12-02 18:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-02 18:19 [PATCH] xfs_io: don't assign cvtnum() return to unsigned var Eric Sandeen
2009-12-02 18:26 ` Eric Sandeen [this message]
2009-12-02 19:06 ` [PATCH V3] " Eric Sandeen
2009-12-03 16:59 ` Christoph Hellwig
2009-12-03 16:58 ` [PATCH] " Christoph Hellwig
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=4B16B14A.40709@sandeen.net \
--to=sandeen@sandeen.net \
--cc=xfs@oss.sgi.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox