xfs
[Top] [All Lists]

[PATCH V2] xfs_io: test for invalid -Tr flag combination before open

To: Eric Sandeen <sandeen@xxxxxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
Subject: [PATCH V2] xfs_io: test for invalid -Tr flag combination before open
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Thu, 27 Feb 2014 14:41:51 -0600
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <530F9F37.8020408@xxxxxxxxxx>
References: <530F9F37.8020408@xxxxxxxxxx>
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.3.0
Coverity spotted this.

It complained that we didn't close the fd before returning in
the error case of incompatible options, but in reality, we wouldn't
have gotten that far because open(O_RDONLY|O_TMPFILE) would be
rejected with EINVAL.

So the error handling test would never actually be true.

Fix this by moving the error checking prior to the open so
the user gets a more useful error message than "Invalid Argument."

Reviewed-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
---

V2: New summary & commit message

diff --git a/io/open.c b/io/open.c
index 6bb0d46..c106fa7 100644
--- a/io/open.c
+++ b/io/open.c
@@ -342,6 +342,11 @@ open_f(
        if (optind != argc - 1)
                return command_usage(&open_cmd);
 
+       if ((flags & (IO_READONLY|IO_TMPFILE)) == (IO_READONLY|IO_TMPFILE)) {
+               fprintf(stderr, _("-T and -r options are incompatible\n"));
+               return -1;
+       }
+
        fd = openfile(argv[optind], &geometry, flags, mode);
        if (fd < 0)
                return 0;
@@ -349,11 +354,6 @@ open_f(
        if (!platform_test_xfs_fd(fd))
                flags |= IO_FOREIGN;
 
-       if ((flags & (IO_READONLY|IO_TMPFILE)) == (IO_READONLY|IO_TMPFILE)) {
-               fprintf(stderr, _("-T and -r options are incompatible\n"));
-               return -1;
-       }
-
        addfile(argv[optind], fd, &geometry, flags);
        return 0;
 }

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


<Prev in Thread] Current Thread [Next in Thread>