* [LTP] [PATCH v3] dup3(2): add EINVAL error number test
@ 2013-11-21 10:36 Xiaoguang Wang
2013-11-28 14:35 ` chrubis
0 siblings, 1 reply; 5+ messages in thread
From: Xiaoguang Wang @ 2013-11-21 10:36 UTC (permalink / raw)
To: ltp-list
add EINVAL error number test
Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
---
runtest/syscalls | 1 +
testcases/kernel/syscalls/.gitignore | 1 +
testcases/kernel/syscalls/dup3/dup3_02.c | 123 +++++++++++++++++++++++++++++++
3 files changed, 125 insertions(+)
create mode 100644 testcases/kernel/syscalls/dup3/dup3_02.c
diff --git a/runtest/syscalls b/runtest/syscalls
index fa01ff7..e7e8a9a 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -118,6 +118,7 @@ dup204 dup204
dup205 dup205
dup3_01 dup3_01
+dup3_02 dup3_02
epoll_create1_01 epoll_create1_01
epoll01 epoll-ltp
diff --git a/testcases/kernel/syscalls/.gitignore b/testcases/kernel/syscalls/.gitignore
index 0130a53..e100dd9 100644
--- a/testcases/kernel/syscalls/.gitignore
+++ b/testcases/kernel/syscalls/.gitignore
@@ -96,6 +96,7 @@
/dup2/dup204
/dup2/dup205
/dup3/dup3_01
+/dup3/dup3_02
/epoll/epoll-ltp
/epoll_create1/epoll_create1_01
/eventfd/eventfd01
diff --git a/testcases/kernel/syscalls/dup3/dup3_02.c b/testcases/kernel/syscalls/dup3/dup3_02.c
new file mode 100644
index 0000000..121414c
--- /dev/null
+++ b/testcases/kernel/syscalls/dup3/dup3_02.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2013 Fujitsu Ltd.
+ * Author: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * Description:
+ * Verify that,
+ * 1. dup3() fails with -1 return value and sets errno to EINVAL
+ * if flags contain an invalid value or oldfd was equal to newfd.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/types.h>
+
+#include "test.h"
+#include "usctest.h"
+#include "safe_macros.h"
+#include "linux_syscall_numbers.h"
+
+
+static void setup(void);
+static void cleanup(void);
+
+#define INVALID_FLAG -1
+
+static int old_fd;
+static int new_fd;
+
+static struct test_case_t {
+ int *oldfd;
+ int *newfd;
+ int flags;
+ int exp_errno;
+} test_cases[] = {
+ {&old_fd, &old_fd, O_CLOEXEC, EINVAL},
+ {&old_fd, &old_fd, 0, EINVAL},
+ {&old_fd, &new_fd, INVALID_FLAG, EINVAL}
+};
+
+char *TCID = "dup3_02";
+int TST_TOTAL = ARRAY_SIZE(test_cases);
+static int exp_enos[] = {EINVAL, 0};
+
+int main(int ac, char **av)
+{
+ int lc;
+ int i;
+ char *msg;
+
+ msg = parse_opts(ac, av, NULL, NULL);
+ if (msg != NULL)
+ tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
+
+ setup();
+
+ TEST_EXP_ENOS(exp_enos);
+
+ for (lc = 0; TEST_LOOPING(lc); lc++) {
+ tst_count = 0;
+
+ for (i = 0; i < TST_TOTAL; i++) {
+ TEST(ltp_syscall(__NR_dup3, *(test_cases[i].oldfd),
+ *(test_cases[i].newfd), test_cases[i].flags));
+
+ if (TEST_RETURN != -1) {
+ tst_resm(TFAIL, "dup3 succeeded unexpectedly");
+ continue;
+ }
+
+ if (TEST_ERRNO == test_cases[i].exp_errno) {
+ tst_resm(TPASS | TTERRNO,
+ "dup3 failed as expected");
+ } else {
+ tst_resm(TFAIL | TTERRNO,
+ "dup3 failed unexpectedly; expected:"
+ "%d - %s", test_cases[i].exp_errno,
+ strerror(test_cases[i].exp_errno));
+ }
+ }
+ }
+
+ cleanup();
+ tst_exit();
+}
+
+static void setup(void)
+{
+ tst_sig(NOFORK, DEF_HANDLER, cleanup);
+
+ tst_tmpdir();
+
+ TEST_PAUSE;
+
+ old_fd = SAFE_CREAT(cleanup, "testeinval.file", 0644);
+ new_fd = -1;
+}
+
+static void cleanup(void)
+{
+ TEST_CLEANUP;
+
+ SAFE_CLOSE(cleanup, old_fd);
+
+ tst_rmdir();
+}
--
1.8.2.1
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [LTP] [PATCH v3] dup3(2): add EINVAL error number test
2013-11-21 10:36 [LTP] [PATCH v3] dup3(2): add EINVAL error number test Xiaoguang Wang
@ 2013-11-28 14:35 ` chrubis
2013-11-28 16:55 ` Markos Chandras
0 siblings, 1 reply; 5+ messages in thread
From: chrubis @ 2013-11-28 14:35 UTC (permalink / raw)
To: Xiaoguang Wang; +Cc: ltp-list
Hi!
> +static void cleanup(void)
> +{
> + TEST_CLEANUP;
> +
> + SAFE_CLOSE(cleanup, old_fd);
Take care not to call cleanup() from within a cleanup()
If the close() here will fail, the cleanup will be called, then the
close() will fail and the cleanup will be called... untill the end of
the stack and the test will eventually SegFault.
Also if the SAFE_CREAT() in setup() will fail, the close() will fail
too, because the old_fd will be set to -1.
I've fixed that this time and pushed (see diff bellow), thanks.
@@ -117,7 +117,8 @@ static void cleanup(void)
{
TEST_CLEANUP;
- SAFE_CLOSE(cleanup, old_fd);
+ if (old_fd > 0)
+ SAFE_CLOSE(NULL, old_fd);
tst_rmdir();
}
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [LTP] [PATCH v3] dup3(2): add EINVAL error number test
2013-11-28 14:35 ` chrubis
@ 2013-11-28 16:55 ` Markos Chandras
2013-11-28 17:09 ` chrubis
0 siblings, 1 reply; 5+ messages in thread
From: Markos Chandras @ 2013-11-28 16:55 UTC (permalink / raw)
To: ltp-list
On 11/28/2013 02:35 PM, chrubis@suse.cz wrote:
> Hi!
>> +static void cleanup(void)
>> +{
>> + TEST_CLEANUP;
>> +
>> + SAFE_CLOSE(cleanup, old_fd);
>
> Take care not to call cleanup() from within a cleanup()
>
> If the close() here will fail, the cleanup will be called, then the
> close() will fail and the cleanup will be called... untill the end of
> the stack and the test will eventually SegFault.
>
> Also if the SAFE_CREAT() in setup() will fail, the close() will fail
> too, because the old_fd will be set to -1.
>
> I've fixed that this time and pushed (see diff bellow), thanks.
>
>
> @@ -117,7 +117,8 @@ static void cleanup(void)
> {
> TEST_CLEANUP;
>
> - SAFE_CLOSE(cleanup, old_fd);
> + if (old_fd > 0)
> + SAFE_CLOSE(NULL, old_fd);
>
> tst_rmdir();
> }
>
Hello,
This test does not seem to compile on uClibc based systems
I am getting this:
dup3_02.c:53: error: 'O_CLOEXEC' undeclared here (not in a function)
--
markos
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [LTP] [PATCH v3] dup3(2): add EINVAL error number test
2013-11-28 16:55 ` Markos Chandras
@ 2013-11-28 17:09 ` chrubis
[not found] ` <52977A31.8060400@imgtec.com>
0 siblings, 1 reply; 5+ messages in thread
From: chrubis @ 2013-11-28 17:09 UTC (permalink / raw)
To: Markos Chandras; +Cc: ltp-list
Hi!
> >> +static void cleanup(void)
> >> +{
> >> + TEST_CLEANUP;
> >> +
> >> + SAFE_CLOSE(cleanup, old_fd);
> >
> > Take care not to call cleanup() from within a cleanup()
> >
> > If the close() here will fail, the cleanup will be called, then the
> > close() will fail and the cleanup will be called... untill the end of
> > the stack and the test will eventually SegFault.
> >
> > Also if the SAFE_CREAT() in setup() will fail, the close() will fail
> > too, because the old_fd will be set to -1.
> >
> > I've fixed that this time and pushed (see diff bellow), thanks.
> >
> >
> > @@ -117,7 +117,8 @@ static void cleanup(void)
> > {
> > TEST_CLEANUP;
> >
> > - SAFE_CLOSE(cleanup, old_fd);
> > + if (old_fd > 0)
> > + SAFE_CLOSE(NULL, old_fd);
> >
> > tst_rmdir();
> > }
> >
>
> Hello,
>
> This test does not seem to compile on uClibc based systems
>
> I am getting this:
> dup3_02.c:53: error: 'O_CLOEXEC' undeclared here (not in a function)
Looking at fcntl.h in uClibc git the O_CLOEXEC is defined only on
__USE_GNU
Does adding
#define _GNU_SOURCE
before the includes help?
If not, your uClibc version does not yet support it and we will have to
add:
#ifndef O_CLOEXEC
# define O_CLOEXEC 02000000
#endif
To fix it.
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [LTP] [PATCH v3] dup3(2): add EINVAL error number test
[not found] ` <52977A31.8060400@imgtec.com>
@ 2013-11-28 17:21 ` chrubis
0 siblings, 0 replies; 5+ messages in thread
From: chrubis @ 2013-11-28 17:21 UTC (permalink / raw)
To: Markos Chandras; +Cc: ltp-list
Hi!
> >>
> >> This test does not seem to compile on uClibc based systems
> >>
> >> I am getting this:
> >> dup3_02.c:53: error: 'O_CLOEXEC' undeclared here (not in a function)
> >
> > Looking at fcntl.h in uClibc git the O_CLOEXEC is defined only on
> > __USE_GNU
> >
> > Does adding
> >
> > #define _GNU_SOURCE
> >
> > before the includes help?
>
> Yeah that fixes it. Thanks!
>
Fix is pushed.
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-11-28 17:22 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-21 10:36 [LTP] [PATCH v3] dup3(2): add EINVAL error number test Xiaoguang Wang
2013-11-28 14:35 ` chrubis
2013-11-28 16:55 ` Markos Chandras
2013-11-28 17:09 ` chrubis
[not found] ` <52977A31.8060400@imgtec.com>
2013-11-28 17:21 ` chrubis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox