Re: [selinux-testsuite][PATCH] use extfs ioctls only when running on ext[234]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Odd, I have the following diff locally.


On 01/23/2013 11:50 AM, Jan Stancek wrote:


----- Original Message -----
From: "Stephen Smalley" <sds@xxxxxxxxxxxxx>
To: "Jan Stancek" <jstancek@xxxxxxxxxx>
Cc: selinux@xxxxxxxxxxxxx, serge@xxxxxxxxxx, jburke@xxxxxxxxxx
Sent: Wednesday, 23 January, 2013 4:41:38 PM
Subject: Re: [selinux-testsuite][PATCH] use extfs ioctls only when running on ext[234]

On 01/23/2013 08:27 AM, Jan Stancek wrote:
EXT2_* ioctls are likely to fail on other filesystems,
for example: xfs.

Signed-off-by: Jan Stancek <jstancek@xxxxxxxxxx>
---
   tests/ioctl/Makefile       |    6 ++++++
   tests/ioctl/test_ioctl.c   |    2 ++
   tests/ioctl/test_noioctl.c |    2 ++
   3 files changed, 10 insertions(+), 0 deletions(-)

Shouldn't really be a compile-time flag but rather a runtime test of
the
filesystem type, right?  Otherwise it presumes you built it on the
same
system and in the same filesystem where you will run it.

Correct, I assumed everyone is running it with 'make test'.


I thought however that your earlier patch to switch it to using
FS_IOC_
command values would have
addressed the issue of other filesystem types already?  What error
are
you getting from xfs?

ioctl(3, FS_IOC32_SETVERSION or FS_IOC_SETVERSION or SONYPI_IOCGBAT1CAP, 0x7fffb5eeac24) = -1 ENOTTY (Inappropriate ioctl for device)

The code already checks for one errno value to
distinguish the not-supported case.

I can't see any check for errno in this test:
$ grep "errno" -r tests/ioctl/
$

Regards,
Jan

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.


diff --git a/tests/ioctl/test_ioctl.c b/tests/ioctl/test_ioctl.c
index 0852f41..a0fe365 100644
--- a/tests/ioctl/test_ioctl.c
+++ b/tests/ioctl/test_ioctl.c
@@ -6,9 +6,7 @@
 #include <sys/stat.h>
 #include <linux/fs.h>
 #include <unistd.h>
-
-#define EXT2_IOC_GETVERSION FS_IOC_GETVERSION
-#define EXT2_IOC_SETVERSION FS_IOC_SETVERSION
+#include <errno.h>
 
 /*
  * Test the ioctl() calls on a file whose name is given as the first
@@ -30,37 +28,37 @@ int main(int argc, char **argv) {
 
   /* This one should hit the FILE__GETATTR or FILE__IOCTL test */
   rc = ioctl(fd, FIGETBSZ, &val);
-  if( rc != 0 ) {
+  if( rc < 0 ) {
     perror("test_ioctl:FIGETBSZ");
     exit(1);
   }
 
   /* This one should hit the FILE__IOCTL test */
   rc = ioctl(fd, FIOCLEX);
-  if( rc != 0 ) {
+  if( rc < 0 ) {
     perror("test_ioctl:FIOCLEX");
     exit(1);
   }
 
   /* This one should hit the FD__USE or FILE__IOCTL test */
   rc = ioctl(fd, FIONBIO, &val);
-  if( rc != 0 ) {
+  if( rc < 0 ) {
     perror("test_ioctl:FIONBIO");
     exit(1);
   }
 
   /* This one should hit the FILE__GETATTR or FILE__READ test */
-  rc = ioctl(fd, EXT2_IOC_GETVERSION, &val);
-  if( rc != 0 ) {
-    perror("test_ioctl:EXT2_IOC_GETVERSION");
+  rc = ioctl(fd, FS_IOC_GETVERSION, &val);
+  if( rc < 0 && errno != ENOTTY) {
+    perror("test_ioctl:FS_IOC_GETVERSION");
     exit(1);
   }
 
   /* This one should hit the FILE__SETATTR or FILE__WRITE test */
   val = 0;
-  rc = ioctl(fd, EXT2_IOC_SETVERSION, &val);
-  if( rc != 0 ) {
-    perror("test_ioctl:EXT2_IOC_SETVERSION");
+  rc = ioctl(fd, FS_IOC_SETVERSION, &val);
+  if( rc < 0 && errno != ENOTTY) {
+    perror("test_ioctl:FS_IOC_SETVERSION");
     exit(1);
   }
 
diff --git a/tests/ioctl/test_noioctl.c b/tests/ioctl/test_noioctl.c
index ef3fac5..f615054 100644
--- a/tests/ioctl/test_noioctl.c
+++ b/tests/ioctl/test_noioctl.c
@@ -11,9 +11,7 @@
 #include <sys/utsname.h>
 #include <unistd.h>
 #include <string.h>
-
-#define EXT2_IOC_GETVERSION FS_IOC_GETVERSION
-#define EXT2_IOC_SETVERSION FS_IOC_SETVERSION
+#include <errno.h>
 
 /*
  * Test the ioctl() calls on a file whose name is given as the first
@@ -25,7 +23,7 @@
 int main(int argc, char **argv) {
   struct utsname uts;
   int fd;
-  int rc, oldkernel = 1;
+  int rc, useaccessmode = 1;
   int val;
 
   if (uname(&uts) < 0) {
@@ -34,7 +32,7 @@ int main(int argc, char **argv) {
   }
 
   if (strverscmp(uts.release, "2.6.27") >= 0 && strverscmp(uts.release, "2.6.39") < 0)
-    oldkernel = 0;
+    useaccessmode = 0;
 
   fd = open(argv[1], O_RDONLY, 0);
  
@@ -59,11 +57,11 @@ int main(int argc, char **argv) {
 
   /*
    * This one depends on kernel version:
-   * New:  Should hit the FILE__IOCTL test and fail.
-   * Old:  Should only check FD__USE and succeed.
+   * >= 2.6.27 and < 2.6.39:  Should hit the FILE__IOCTL test and fail.
+   * < 2.6.27 or >= 2.6.39:  Should only check FD__USE and succeed.
    */
   rc = ioctl(fd, FIONBIO, &val);
-  if( !rc == !oldkernel ) {
+  if( !rc == !useaccessmode ) {
     printf("test_noioctl:FIONBIO");
     exit(1);
   }
@@ -73,17 +71,18 @@ int main(int argc, char **argv) {
    * New:  Should hit the FILE__READ test and succeed.
    * Old:  Should hit the FILE__GETATTR test and fail.
    */
-  rc = ioctl(fd, EXT2_IOC_GETVERSION, &val);
-  if( !rc != !oldkernel ) {
-    perror("test_noioctl:EXT2_IOC_GETVERSION");
+  rc = ioctl(fd, FS_IOC_GETVERSION, &val);
+  if( (useaccessmode && rc == 0) ||
+      (!useaccessmode && rc < 0 && errno != ENOTTY) ) {
+    perror("test_noioctl:FS_IOC_GETVERSION");
     exit(1);
   }
 
-  /* This one should hit the FILE__WRITE test and fail. */
+  /* This one should hit the FILE__WRITE or FILE_SETATTR test and fail. */
   val = 0;
-  rc = ioctl(fd, EXT2_IOC_SETVERSION, &val);
+  rc = ioctl(fd, FS_IOC_SETVERSION, &val);
   if( rc == 0 ) {
-    perror("test_noioctl:EXT2_IOC_SETVERSION");
+    perror("test_noioctl:FS_IOC_SETVERSION");
     exit(1);
   }
 

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux