----- Original Message -----
> From: "Cyril Hrubis" <[email protected]>
> To: "snehalphule" <[email protected]>
> Cc: [email protected], "Chuck Ebbert" <[email protected]>
> Sent: Tuesday, 3 February, 2015 10:37:52 AM
> Subject: Re: [LTP] proposed patch to fix sendmsg01 invalid flags set w/
> control ; returned -1 (expected -1), errno 22
> (expected 95)
>
> Hi!
> > *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 <[email protected]>
>
> I can see this exact failure when I compile the testsuite with -m32 on
> 64bit hardware as well. But the patch below is wrong on several levels.
>
> My guess is that the root of the problem is similar to the problem fixed in:
>
> commit 1153a8438fe45530eb480d902271476c2e330663
> Author: Chuck Ebbert <[email protected]>
> Date: Wed Oct 1 17:10:32 2014 -0500
>
> recvfrom01: fix test for invalid message flags
Agreed. We have seen in past, that this (.flags = ~MSG_CMSG_COMPAT)
leads to undefined behavior.
>
>
> The test passes ~MSG_CMSG_COMPAT as flags and expect to hit particular safety
> check. The difference may be that the order of checks is different for compat
> syscalls, but that is just a guess. This would need more investigation to
> figure out what is wrong.
I'm now trying to find that check. But even then, I'd still prefer to
remove that case.
Regards,
Jan
>
> > --- 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)
> >
> >
> >
>
> > ------------------------------------------------------------------------------
> > Dive into the World of Parallel Programming. The Go Parallel Website,
> > sponsored by Intel and developed in partnership with Slashdot Media, is
> > your
> > hub for all things parallel software development, from weekly thought
> > leadership blogs to news, videos, case studies, tutorials and more. Take a
> > look and join the conversation now. http://goparallel.sourceforge.net/
>
> > _______________________________________________
> > Ltp-list mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ltp-list
>
>
> --
> Cyril Hrubis
> [email protected]
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming. The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net/
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list