> Yamato,
> 
> You would like to say something here ?
> 
> Regards--
> Subrata

Sorry to be late to reply.



> > io_submit case always failed on ppc64.
> > 
> > ----------
> > [EMAIL PROTECTED] cvs_ltp]# uname -a
> > Linux ovislp1.upt.austin.ibm.com 2.6.18-92.el5 #1 SMP Tue Apr 29
> > 13:21:29 EDT
> > 2008 ppc64 ppc64 ppc64 GNU/Linux
> > [EMAIL PROTECTED] cvs_ltp]# rpm -qa | grep libaio
> > libaio-0.3.106-3.2
> > libaio-0.3.106-3.2
> > libaio-devel-0.3.106-3.2
> > libaio-devel-0.3.106-3.2
> > [EMAIL PROTECTED] cvs_ltp]#
> > testcases/kernel/syscalls/io_submit/io_submit01 
> > io_submit01    1  PASS  :  expected failure - returned value = 22 :
> > Invalid argument
> > io_submit01    2  FAIL  :  unexpected returned value - -22 - expected
> > -14
> > io_submit01    3  PASS  :  expected failure - returned value = 9 : Bad
> > file descriptor
> > 
> > There could be an issue with the test case here. What is done is "
> > io_submit(ctx, 0, (void*)-1 ) ".So in compat_sys_io_submit(), we 
> > allocate memory on the user space stack using
> > compat_alloc_user_space. 
> > We then copy from the address specified in the syscall to the address 
> > allocated via the compat_alloc_user_space call. Now, if the size
> > field 
> > is zero, no copy takes place. This valid address (stack pointer or
> > an address close to it) is then used in sys_io_submit and we dont see 
> > the EFAULT. In order to see this fault, we would have to set nr>0 and 
> > copy_iocb() catches the invalid address specified in the system call. 
> > Retrying the test with nr>0 results in an EFAULT.
> > 
> > Signed-off-by: Sridhar Vinay <[EMAIL PROTECTED]>
> > Signed-off-by: Jin Bing Guo <[EMAIL PROTECTED]>

I've understood the explanation and I've confirmed the correctness.
But I think the behavior of io_submit(ctx, 0, (void*)-1 ) on ppc64 is
interesting. So I don't like to throw io_submit(ctx, 0, (void*)-1 )
test case away <A>. Also I'd like to dig the kernel more <B>.

For <B> I'd like to submit following patch to lkml in the future:
diff --git a/fs/compat.c b/fs/compat.c
index 5f9ec44..5bfa69f 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -584,6 +584,16 @@ compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 
__user *iocb)
        if (nr > MAX_AIO_SUBMITS)
                nr = MAX_AIO_SUBMITS;
        
+       /* sys_io_submit() uses newly allocated buffer(iocb64) from safety 
+          area. But access_ok checking is needed to make the behavior
+          of compat_sys_io_submit same to sys_io_submit.
+
+          Without the checking
+          comapt_sys_io_submit(ctx, 0, (void*)-1 ) returns -EINVAL.
+          sys_io_submit(ctx, 0, (void*)-1 ) returns -EFAULT. */
+       if (unlikely(!access_ok(VERIFY_READ, iocb, (nr*sizeof(*iocb)))))
+               return -EFAULT;
+
        iocb64 = compat_alloc_user_space(nr * sizeof(*iocb64));
        ret = copy_iocb(nr, iocb, iocb64);
        if (!ret)


For <A> I've revised the patch.

Signed-off-by: Sridhar Vinay <[EMAIL PROTECTED]>
Signed-off-by: Jin Bing Guo <[EMAIL PROTECTED]>
Signed-off-by: Masatake YAMATO <[EMAIL PROTECTED]>

--- a/testcases/kernel/syscalls/io_submit/io_submit01.c
+++ b/testcases/kernel/syscalls/io_submit/io_submit01.c
@@ -128,7 +128,7 @@ main(int argc, char** argv)
                  EFAULT One of the data structures points to invalid data.
                */
                expected_return = -EFAULT;
-               TEST(io_submit( ctx, 0, (void*)-1 ));
+               TEST(io_submit( ctx, 1, (void*)-1 ));
                if (TEST_RETURN == 0) {
                        tst_resm(TFAIL, "call succeeded unexpectedly");
                } else if (TEST_RETURN == expected_return) {
@@ -141,6 +141,34 @@ main(int argc, char** argv)
                                 expected_return);
                }
 
+               /* Special case EFAULT or EINVAL (indetermination)
+                 
+                 The errno depends on the per architecture implementation
+                 of io_submit. On the architecture using compat_sys_io_submit
+                 as its implementation, errno is set to -EINVAL. */
+               {
+                       long expected_fault  = -EFAULT;  
+                       long expected_inval  = -EINVAL;  
+
+                 
+                       TEST(io_submit( ctx, 0, (void*)-1 ));
+                       if (TEST_RETURN == 0) {
+                               tst_resm(TFAIL, "call succeeded unexpectedly");
+                       } else if (TEST_RETURN == expected_fault
+                                  || TEST_RETURN == expected_inval) {
+                               tst_resm(TPASS, "expected failure - "
+                                        "returned value = %d : %s", (-1 * 
TEST_RETURN),
+                                        strerror(-1 * TEST_RETURN));
+                       } else {
+                               tst_resm(TFAIL, "unexpected returned value - %d 
- "
+                                        "expected %d(%s) or %d(%s)", 
TEST_RETURN,
+                                        expected_fault, strerror(-1 * 
expected_fault),
+                                        expected_inval, strerror(-1 * 
expected_inval));
+                       }
+
+               }
+
+
                /*
                  EBADF  The file descriptor specified in the first iocb is 
invalid.
                */

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to