Re: [LTP] [PATCH] fsync02: fix error of overflow from MUL

Garrett Cooper
2011-01-19T08:47:34Z

[-- Attachment #1: Type: text/plain, Size: 2528 bytes --]

On Wed, Jan 19, 2011 at 12:19 AM, Peng Haitao <penght@cn.fujitsu.com> wrote:
> Hi Garrett,
>
> If the third argument is SEEK_SET of function fsync(), offset can not be
> negative. But when overflow from MUL, the offset is negative.
>
> Signed-off-by: Peng Haitao <penght@cn.fujitsu.com>
>
> ---
>  testcases/kernel/syscalls/fsync/fsync02.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/fsync/fsync02.c b/testcases/kernel/syscalls/fsync/fsync02.c
> index 213eac3..64bb012 100644
> --- a/testcases/kernel/syscalls/fsync/fsync02.c
> +++ b/testcases/kernel/syscalls/fsync/fsync02.c
> @@ -102,7 +102,7 @@ int main(int ac, char **av)
>                }
>
>                for (i = 1; i <= data_blocks; i++) {
> -                       offset = (i * BLOCKSIZE * max_block) / data_blocks - BUFSIZ;
> +                       offset = (BLOCKSIZE * max_block) / data_blocks * i - BUFSIZ;
>                        if ((offsetret = lseek(fd, offset, SEEK_SET)) != offset)
>                                tst_brkm(TBROK|TERRNO, cleanup, "lseek failed: %ld, %ld", offsetret, offset);
>                        if ((ret = write(fd, pbuf, BUFSIZ)) != BUFSIZ)
> @@ -197,4 +197,4 @@ void cleanup()
>
>        tst_rmdir();
>
> -}
> \ No newline at end of file
> +}
> --
> 1.7.3.1
>
> --
> Best Regards,
> Peng Haitao
>
>

How about the following item?
Please try the attached patch over the following -- it's just
there for review.
Thanks,
-Garrett

$ git diff testcases/kernel/syscalls/fsync/fsync02.c
diff --git a/testcases/kernel/syscalls/fsync/fsync02.c
b/testcases/kernel/syscalls/fsync/fsync02.c
index 213eac3..6227a84 100644
--- a/testcases/kernel/syscalls/fsync/fsync02.c
+++ b/testcases/kernel/syscalls/fsync/fsync02.c
@@ -102,7 +102,8 @@ int main(int ac, char **av)
}

for (i = 1; i <= data_blocks; i++) {
- offset = (i * BLOCKSIZE * max_block) /
data_blocks - BUFSIZ;
+ offset = i * ((BLOCKSIZE * max_block) / data_blocks);
+ offset -= BUFSIZ;
if ((offsetret = lseek(fd, offset, SEEK_SET)) != offset)
tst_brkm(TBROK|TERRNO, cleanup, "lseek
failed: %ld, %ld", offsetret, offset);
if ((ret = write(fd, pbuf, BUFSIZ)) != BUFSIZ)
@@ -197,4 +198,4 @@ void cleanup()

tst_rmdir();

-}
\ No newline at end of file
+}

[-- Attachment #2: 0001-Sort-multipliers-to-avoid-accidental-overflow.patch --]
[-- Type: text/x-patch, Size: 1688 bytes --]

From 1a1478a4162cdf2966077101911987fd22300bde Mon Sep 17 00:00:00 2001
From: Garrett Cooper <yanegomi@gmail.com>
Date: Wed, 19 Jan 2011 00:42:31 -0800
Subject: [PATCH] Sort multipliers to avoid accidental overflow.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------1.7.3.5"

This is a multi-part message in MIME format.
--------------1.7.3.5
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit

Signed-off-by: Peng Haitao <penght@cn.fujitsu.com>
Signed-off-by: Garrett Cooper <yanegomi@gmail.com>
---
testcases/kernel/syscalls/fsync/fsync02.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

--------------1.7.3.5
Content-Type: text/x-patch; name="0001-Sort-multipliers-to-avoid-accidental-overflow.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-Sort-multipliers-to-avoid-accidental-overflow.patch"

diff --git a/testcases/kernel/syscalls/fsync/fsync02.c b/testcases/kernel/syscalls/fsync/fsync02.c
index 213eac3..6227a84 100644
--- a/testcases/kernel/syscalls/fsync/fsync02.c
+++ b/testcases/kernel/syscalls/fsync/fsync02.c
@@ -102,7 +102,8 @@ int main(int ac, char **av)
}

for (i = 1; i <= data_blocks; i++) {
- offset = (i * BLOCKSIZE * max_block) / data_blocks - BUFSIZ;
+ offset = i * ((BLOCKSIZE * max_block) / data_blocks);
+ offset -= BUFSIZ;
if ((offsetret = lseek(fd, offset, SEEK_SET)) != offset)
tst_brkm(TBROK|TERRNO, cleanup, "lseek failed: %ld, %ld", offsetret, offset);
if ((ret = write(fd, pbuf, BUFSIZ)) != BUFSIZ)
@@ -197,4 +198,4 @@ void cleanup()

tst_rmdir();

-}
\ No newline at end of file
+}

--------------1.7.3.5--

[-- Attachment #3: Type: text/plain, Size: 372 bytes --]

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl

[-- Attachment #4: Type: text/plain, Size: 155 bytes --]