Test for statement:
"If shmaddr is NULL, the system chooses a suitable (unused) address
at which to attach the segment."

Signed-off-by: DAN LI <[email protected]>
---
 testcases/kernel/syscalls/ipc/shmat/shmat01.c | 41 ++++++++++++++++++---------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/testcases/kernel/syscalls/ipc/shmat/shmat01.c 
b/testcases/kernel/syscalls/ipc/shmat/shmat01.c
index 3461782..13c9b1b 100644
--- a/testcases/kernel/syscalls/ipc/shmat/shmat01.c
+++ b/testcases/kernel/syscalls/ipc/shmat/shmat01.c
@@ -46,7 +46,7 @@
 #define CASE1          20

 char *TCID = "shmat01";
-int TST_TOTAL = 3;
+int TST_TOTAL = 4;

 int shm_id_1 = -1;

@@ -70,6 +70,7 @@ int main(int argc, char *argv[])
 {
        int lc, i;
        char *msg;
+       void *attchaddr;

        msg = parse_opts(argc, argv, NULL, NULL);
        if (msg != NULL)
@@ -85,10 +86,10 @@ int main(int argc, char *argv[])

                        base_addr = probe_free_addr();

-                       addr = shmat(*(TC[i].shmid), base_addr + TC[i].offset,
-                                    TC[i].flags);
-                       TEST_ERRNO = errno;
+                       attchaddr = (i ? base_addr + TC[i].offset : NULL);
+                       addr = shmat(*(TC[i].shmid), attchaddr, TC[i].flags);

+                       TEST_ERRNO = errno;
                        if (addr == (void *)-1) {
                                tst_brkm(TFAIL | TTERRNO, cleanup,
                                         "shmat call failed");
@@ -148,11 +149,20 @@ static void check_functionality(int i)
                 * If this fails the program will get a SIGSEGV, dump
                 * core and exit.
                 */
-
                *shared = CASE0;
                break;
        case 1:
                /*
+                * Check the functionality of the first call by simply
+                * "writing" a value to the shared memory space.
+                * If this fails the program will get a SIGSEGV, dump
+                * core and exit.
+                */
+
+               *shared = CASE0;
+               break;
+       case 2:
+               /*
                 * Check the functionality of the second call by writing
                 * a value to the shared memory space and then checking
                 * that the original address given was rounded down as
@@ -167,7 +177,7 @@ static void check_functionality(int i)
                        fail = 1;
                }
                break;
-       case 2:
+       case 3:
                /*
                 * This time the shared memory is read only.  Read the value
                 * and check that it is equal to the value set in case #2,
@@ -195,20 +205,25 @@ void setup(void)
        if (TC == NULL)
                tst_brkm(TFAIL | TERRNO, cleanup, "failed to allocate memory");

-       /* a straight forward read/write attach */
+       /* set NULL as attaching address*/
        TC[0].shmid = &shm_id_1;
        TC[0].offset = 0;
        TC[0].flags = 0;

-       /* an attach using unaligned memory */
+       /* a straight forward read/write attach */
        TC[1].shmid = &shm_id_1;
-       TC[1].offset = SHMLBA - 1;
-       TC[1].flags = SHM_RND;
+       TC[1].offset = 0;
+       TC[1].flags = 0;

-       /* a read only attach */
+       /* an attach using unaligned memory */
        TC[2].shmid = &shm_id_1;
-       TC[2].offset = 0;
-       TC[2].flags = SHM_RDONLY;
+       TC[2].offset = SHMLBA - 1;
+       TC[2].flags = SHM_RND;
+
+       /* a read only attach */
+       TC[3].shmid = &shm_id_1;
+       TC[3].offset = 0;
+       TC[3].flags = SHM_RDONLY;

        tst_tmpdir();

-- 
1.8.1




------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to