Description:
For bug: https://bugs.launchpad.net/linaro-qa/+bug/1327251
Purpose of Change: Because of code changes in socket.c file for 32bit-userspace, return value changed to EINVAL in case of 32bit-userspace/64-bit-kernelspace.
Test changed to check if 32user/64kernel , then return value should be checked to EINVAL ,
for other systems return value should be EOPNOTSUPP


Kernel : 3.10.0-123.13.2
Signed-off-by: snehalphule <snehal@linux.vnet.ibm.com>

--- ltp-full-20140828/testcases/kernel/syscalls/sendmsg/sendmsg01.c.orig    2015-01-23 00:54:22.804582530 -0600
+++ ltp-full-20140828/testcases/kernel/syscalls/sendmsg/sendmsg01.c    2015-01-23 00:57:26.149032808 -0600
@@ -677,6 +677,38 @@ static void setup4(void)
     control->cmsg_type = SCM_RIGHTS;
     *(int *)CMSG_DATA(control) = tfd;
     controllen = control->cmsg_len;
+       
+        // In case of Compact (32bit) user space and 64bit kernel space, return value is EINVAL
+        if (tdat[testno].flags == (unsigned)~MSG_CMSG_COMPAT)
+        {
+            char user_space_bit[BUFSIZ];
+            char kernel_arch[BUFSIZ];
+            int kernel_space_bit;
+
+            FILE *pipe = popen("getconf LONG_BIT", "r");
+            if (fgets(user_space_bit, BUFSIZ, pipe) != NULL)
+            {
+               pipe = popen("arch", "r");
+               if (fgets(kernel_arch, BUFSIZ, pipe) != NULL)
+               {
+                   // Remove carriage return from the buffer
+                   size_t len = strlen(user_space_bit);
+                   if (len > 0 && user_space_bit[len-1] == '\n') { user_space_bit[--len] = '\0';}
+                   len = strlen(kernel_arch);
+                   if (len > 0 && kernel_arch[len-1] == '\n') { kernel_arch[--len] = '\0';}
+
+                   // Check if Kernel used is 64 bit or 32 bit
+                   if (!strcmp(kernel_arch, "ppc64") || !strcmp(kernel_arch, "s390x") || !strcmp(kernel_arch, "x86_64"))
+                      kernel_space_bit = 64;
+                   else
+                      kernel_space_bit = 32;
+
+                   // Only if it is Compact user space (32bit), then return value is EINVAL
+                   if (atoi(user_space_bit) == 32  &&  kernel_space_bit == 64)
+                   tdat[testno].experrno = EINVAL;
+               }
+            } 
+         }
 }
 
 static void cleanup4(void)