Add configure check for GRND_* defines
Add getrandom to syscalls number list for common architectures
Replace syscall with ltp_syscall

Signed-off-by: Jan Stancek <jstan...@redhat.com>
---
 configure.ac                                      |  1 +
 m4/ltp-getrandom.m4                               | 25 +++++++++++++++++
 testcases/kernel/include/arm.in                   |  1 +
 testcases/kernel/include/i386.in                  |  1 +
 testcases/kernel/include/ia64.in                  |  1 +
 testcases/kernel/include/linux_syscall_numbers.h  | 27 ++++++++++++++++++
 testcases/kernel/include/powerpc.in               |  1 +
 testcases/kernel/include/powerpc64.in             |  1 +
 testcases/kernel/include/regen.sh                 |  2 +-
 testcases/kernel/include/s390.in                  |  1 +
 testcases/kernel/include/s390x.in                 |  1 +
 testcases/kernel/include/x86_64.in                |  1 +
 testcases/kernel/syscalls/getrandom/getrandom01.c | 34 +++++++++++++----------
 testcases/kernel/syscalls/getrandom/getrandom02.c | 30 ++++++++++++--------
 testcases/kernel/syscalls/getrandom/getrandom03.c | 11 ++------
 testcases/kernel/syscalls/getrandom/getrandom04.c | 13 ++-------
 16 files changed, 105 insertions(+), 46 deletions(-)
 create mode 100644 m4/ltp-getrandom.m4

diff --git a/configure.ac b/configure.ac
index 0ca21a6..a078a34 100644
--- a/configure.ac
+++ b/configure.ac
@@ -176,5 +176,6 @@ LTP_CHECK_TIMERFD
 LTP_CHECK_CAN_SUPPORT
 LTP_CHECK_IOVEC
 LTP_CHECK_KEYCTL
+LTP_CHECK_GETRANDOM_SUPPORT
 
 AC_OUTPUT
diff --git a/m4/ltp-getrandom.m4 b/m4/ltp-getrandom.m4
new file mode 100644
index 0000000..121820e
--- /dev/null
+++ b/m4/ltp-getrandom.m4
@@ -0,0 +1,25 @@
+dnl
+dnl Copyright (c) Linux Test Project, 2015
+dnl
+dnl This program is free software;  you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY;  without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+dnl the GNU General Public License for more details.
+dnl
+
+dnl
+dnl LTP_CHECK_GETRANDOM_SUPPORT
+dnl ----------------------------
+dnl
+AC_DEFUN([LTP_CHECK_GETRANDOM_SUPPORT],[
+AC_CHECK_HEADERS(linux/random.h,[
+       AC_CHECK_DECLS([GRND_NONBLOCK, GRND_RANDOM], [],[],[dnl
+#include <linux/random.h>
+#]) dnl AC_CHECK_DECLS
+])]
+)
diff --git a/testcases/kernel/include/arm.in b/testcases/kernel/include/arm.in
index a6d5a2c..841b064 100644
--- a/testcases/kernel/include/arm.in
+++ b/testcases/kernel/include/arm.in
@@ -333,3 +333,4 @@ accept4 (__NR_SYSCALL_BASE+366)
 fanotify_init (__NR_SYSCALL_BASE+367)
 fanotify_mark (__NR_SYSCALL_BASE+368)
 prlimit64 (__NR_SYSCALL_BASE+369)
+getrandom (__NR_SYSCALL_BASE+384)
diff --git a/testcases/kernel/include/i386.in b/testcases/kernel/include/i386.in
index 540d4a2..a4585c2 100644
--- a/testcases/kernel/include/i386.in
+++ b/testcases/kernel/include/i386.in
@@ -333,3 +333,4 @@ recvmmsg 337
 fanotify_init 338
 fanotify_mark 339
 prlimit64 340
+getrandom 355
diff --git a/testcases/kernel/include/ia64.in b/testcases/kernel/include/ia64.in
index 9ab1983..4f8fb74 100644
--- a/testcases/kernel/include/ia64.in
+++ b/testcases/kernel/include/ia64.in
@@ -292,3 +292,4 @@ recvmmsg 1322
 fanotify_init 1323
 fanotify_mark 1324
 prlimit64 1325
+getrandom 1339
diff --git a/testcases/kernel/include/linux_syscall_numbers.h 
b/testcases/kernel/include/linux_syscall_numbers.h
index 332cddd..e1ee38e 100644
--- a/testcases/kernel/include/linux_syscall_numbers.h
+++ b/testcases/kernel/include/linux_syscall_numbers.h
@@ -1810,6 +1810,9 @@
 # ifndef __NR_prlimit64
 #  define __NR_prlimit64 (__NR_SYSCALL_BASE+369)
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom (__NR_SYSCALL_BASE+384)
+# endif
 #endif
 
 
@@ -2874,6 +2877,9 @@
 # ifndef __NR_prlimit64
 #  define __NR_prlimit64 340
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 355
+# endif
 #endif
 
 
@@ -3760,6 +3766,9 @@
 # ifndef __NR_prlimit64
 #  define __NR_prlimit64 1325
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 1339
+# endif
 #endif
 
 
@@ -4790,6 +4799,9 @@
 # ifndef __NR_syscalls
 #  define __NR_syscalls 345
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 359
+# endif
 #endif
 
 
@@ -5820,6 +5832,9 @@
 # ifndef __NR_syscalls
 #  define __NR_syscalls 345
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 359
+# endif
 #endif
 
 
@@ -6802,6 +6817,9 @@
 # ifndef __NR_newfstatat
 #  define __NR_newfstatat 293
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 349
+# endif
 #endif
 
 
@@ -7784,6 +7802,9 @@
 # ifndef __NR_newfstatat
 #  define __NR_newfstatat 293
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 349
+# endif
 #endif
 
 
@@ -11721,6 +11742,9 @@
 # ifndef __NR_prlimit64
 #  define __NR_prlimit64 302
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom 318
+# endif
 #endif
 
 
@@ -12049,6 +12073,9 @@
 # ifndef __NR_getpriority
 #  define __NR_getpriority __LTP__NR_INVALID_SYSCALL
 # endif
+# ifndef __NR_getrandom
+#  define __NR_getrandom __LTP__NR_INVALID_SYSCALL
+# endif
 # ifndef __NR_getresgid
 #  define __NR_getresgid __LTP__NR_INVALID_SYSCALL
 # endif
diff --git a/testcases/kernel/include/powerpc.in 
b/testcases/kernel/include/powerpc.in
index 4824f83..4025436 100644
--- a/testcases/kernel/include/powerpc.in
+++ b/testcases/kernel/include/powerpc.in
@@ -340,3 +340,4 @@ recvmsg 342
 recvmmsg 343
 accept4 344
 syscalls 345
+getrandom 359
diff --git a/testcases/kernel/include/powerpc64.in 
b/testcases/kernel/include/powerpc64.in
index 4824f83..4025436 100644
--- a/testcases/kernel/include/powerpc64.in
+++ b/testcases/kernel/include/powerpc64.in
@@ -340,3 +340,4 @@ recvmsg 342
 recvmmsg 343
 accept4 344
 syscalls 345
+getrandom 359
diff --git a/testcases/kernel/include/regen.sh 
b/testcases/kernel/include/regen.sh
index c01bf1a..eebac0f 100755
--- a/testcases/kernel/include/regen.sh
+++ b/testcases/kernel/include/regen.sh
@@ -69,7 +69,7 @@ for arch in $(cat "${srcdir}/order") ; do
                nr="__NR_$1"
                shift
                if [ $# -eq 0 ] ; then
-                       err "invalid line found"
+                       err "invalid line found: $line"
                fi
                cat <<-EOF
                # ifndef ${nr}
diff --git a/testcases/kernel/include/s390.in b/testcases/kernel/include/s390.in
index 737a3ea..9c7cfa1 100644
--- a/testcases/kernel/include/s390.in
+++ b/testcases/kernel/include/s390.in
@@ -324,3 +324,4 @@ setgid 214
 setfsuid 215
 setfsgid 216
 newfstatat 293
+getrandom 349
diff --git a/testcases/kernel/include/s390x.in 
b/testcases/kernel/include/s390x.in
index 737a3ea..9c7cfa1 100644
--- a/testcases/kernel/include/s390x.in
+++ b/testcases/kernel/include/s390x.in
@@ -324,3 +324,4 @@ setgid 214
 setfsuid 215
 setfsgid 216
 newfstatat 293
+getrandom 349
diff --git a/testcases/kernel/include/x86_64.in 
b/testcases/kernel/include/x86_64.in
index 0b27aed..860e726 100644
--- a/testcases/kernel/include/x86_64.in
+++ b/testcases/kernel/include/x86_64.in
@@ -300,3 +300,4 @@ recvmmsg 299
 fanotify_init 300
 fanotify_mark 301
 prlimit64 302
+getrandom 318
diff --git a/testcases/kernel/syscalls/getrandom/getrandom01.c 
b/testcases/kernel/syscalls/getrandom/getrandom01.c
index d16cae5..9eadc3d 100644
--- a/testcases/kernel/syscalls/getrandom/getrandom01.c
+++ b/testcases/kernel/syscalls/getrandom/getrandom01.c
@@ -26,15 +26,18 @@
  *
  */
 
-#include <sys/syscall.h>
-#include <errno.h>
-#include <linux/random.h>
 #include "test.h"
-
-static int modes[] = {0, GRND_RANDOM, GRND_NONBLOCK,
-                                               GRND_RANDOM | GRND_NONBLOCK};
+#include "config.h"
 
 char *TCID = "getrandom01";
+
+#if HAVE_DECL_GRND_NONBLOCK && HAVE_DECL_GRND_RANDOM
+#include <linux/random.h>
+#include "linux_syscall_numbers.h"
+
+static int modes[] = { 0, GRND_RANDOM, GRND_NONBLOCK,
+                      GRND_RANDOM | GRND_NONBLOCK };
+
 int TST_TOTAL = ARRAY_SIZE(modes);
 
 int main(int ac, char **av)
@@ -48,18 +51,21 @@ int main(int ac, char **av)
                tst_count = 0;
 
                for (i = 0; i < TST_TOTAL; i++) {
-                       TEST(syscall(SYS_getrandom, NULL, 100, modes[i]));
-
-                       if (TEST_RETURN == -1 && TEST_ERRNO == ENOSYS)
-                               tst_brkm(TCONF, NULL,
-                                               "This test needs kernel 3.17 or 
newer");
-
-                       if (TEST_RETURN == -1)
+                       TEST(ltp_syscall(__NR_getrandom, NULL, 100, modes[i]));
+                       if (TEST_RETURN == -1) {
                                tst_resm(TPASS, "getrandom returned %ld",
                                                TEST_RETURN);
-                       else
+                       } else {
                                tst_resm(TFAIL | TTERRNO, "getrandom failed");
+                       }
                }
        }
        tst_exit();
 }
+
+#else
+int main(void)
+{
+       tst_brkm(TCONF, NULL, "GRND_NONBLOCK / GRND_RANDOM not defined");
+}
+#endif
diff --git a/testcases/kernel/syscalls/getrandom/getrandom02.c 
b/testcases/kernel/syscalls/getrandom/getrandom02.c
index b2ed06e..2250b46 100644
--- a/testcases/kernel/syscalls/getrandom/getrandom02.c
+++ b/testcases/kernel/syscalls/getrandom/getrandom02.c
@@ -27,15 +27,18 @@
  *
  */
 
-#include <sys/syscall.h>
-#include <errno.h>
-#include <linux/random.h>
 #include "test.h"
-
-static int modes[] = {0, GRND_RANDOM, GRND_NONBLOCK,
-                                               GRND_RANDOM | GRND_NONBLOCK};
+#include "config.h"
 
 char *TCID = "getrandom02";
+
+#if HAVE_DECL_GRND_NONBLOCK && HAVE_DECL_GRND_RANDOM
+#include <linux/random.h>
+#include "linux_syscall_numbers.h"
+
+static int modes[] = { 0, GRND_RANDOM, GRND_NONBLOCK,
+                      GRND_RANDOM | GRND_NONBLOCK };
+
 int TST_TOTAL = ARRAY_SIZE(modes);
 
 static unsigned char buf[256];
@@ -57,15 +60,11 @@ int main(int ac, char **av)
                        fill();
 
                        do {
-                                       TEST(syscall(SYS_getrandom, buf, size,
-                                                               modes[i]));
+                               TEST(ltp_syscall(__NR_getrandom, buf, size,
+                                       modes[i]));
                        } while ((modes[i] & GRND_NONBLOCK) && TEST_RETURN == -1
                                && TEST_ERRNO == EAGAIN);
 
-                       if (TEST_RETURN == -1 && TEST_ERRNO == ENOSYS)
-                               tst_brkm(TCONF, NULL,
-                                       "This test needs kernel 3.17 at least");
-
                        if (!check_content(TEST_RETURN))
                                tst_resm(TFAIL | TTERRNO, "getrandom failed");
                        else
@@ -101,3 +100,10 @@ static int check_content(int nb)
        }
        return 1;
 }
+
+#else
+int main(void)
+{
+       tst_brkm(TCONF, NULL, "GRND_NONBLOCK / GRND_RANDOM not defined");
+}
+#endif
diff --git a/testcases/kernel/syscalls/getrandom/getrandom03.c 
b/testcases/kernel/syscalls/getrandom/getrandom03.c
index 0a07c26..5a223b1 100644
--- a/testcases/kernel/syscalls/getrandom/getrandom03.c
+++ b/testcases/kernel/syscalls/getrandom/getrandom03.c
@@ -30,10 +30,8 @@
  *  number of bytes required and expects success.
  */
 
-#include <errno.h>
-#include <linux/random.h>
-#include <sys/syscall.h>
 #include "test.h"
+#include "linux_syscall_numbers.h"
 
 #define MAX_SIZE 256
 
@@ -53,12 +51,7 @@ int main(int ac, char **av)
                tst_count = 0;
                for (i = 0; i < TST_TOTAL; i++) {
                        size = random() % MAX_SIZE;
-                       TEST(syscall(SYS_getrandom, buf, size, 0));
-
-                       if (TEST_RETURN == -1 && TEST_ERRNO == ENOSYS)
-                               tst_brkm(TCONF, NULL,
-                                       "This test needs kernel 3.17 or newer");
-
+                       TEST(ltp_syscall(__NR_getrandom, buf, size, 0));
                        if (TEST_RETURN != size)
                                tst_resm(TFAIL | TTERRNO, "getrandom failed");
                        else
diff --git a/testcases/kernel/syscalls/getrandom/getrandom04.c 
b/testcases/kernel/syscalls/getrandom/getrandom04.c
index e049af8..cbe05fe 100644
--- a/testcases/kernel/syscalls/getrandom/getrandom04.c
+++ b/testcases/kernel/syscalls/getrandom/getrandom04.c
@@ -30,12 +30,9 @@
  *  descriptors to 3 and expects success.
  */
 
-#include <sys/syscall.h>
-#include <errno.h>
-#include <linux/random.h>
-#include <sys/resource.h>
 #include "test.h"
-
+#include "linux_syscall_numbers.h"
+#include <sys/resource.h>
 
 char *TCID = "getrandom04";
 int TST_TOTAL = 1;
@@ -54,11 +51,7 @@ int main(int ac, char **av)
        if (r == -1)
                tst_brkm(TBROK | TTERRNO, NULL, "setrlimit failed");
 
-       TEST(syscall(SYS_getrandom, buf, 100, 0));
-       if (TEST_RETURN == -1 && TEST_ERRNO == ENOSYS)
-               tst_brkm(TCONF, NULL,
-                       "This test needs kernel 3.17 or newer");
-
+       TEST(ltp_syscall(__NR_getrandom, buf, 100, 0));
        if (TEST_RETURN == -1)
                tst_resm(TFAIL | TTERRNO, "getrandom failed");
        else
-- 
1.8.3.1


------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to