From: Halesh S <halesh.sadashiv@ap.sony.com>
To: linux-kernel@vger.kernel.org
Subject: Re: Regarding select() on PPC
Date: Mon, 22 Sep 2008 14:47:03 +0000 (UTC) [thread overview]
Message-ID: <loom.20080922T143915-56@post.gmane.org> (raw)
In-Reply-To: loom.20080919T140301-79@post.gmane.org
Halesh S <halesh.sadashiv <at> ap.sony.com> writes:
>
> Hi all,
>
> Please find the below testcase.
>
> #include <stdio.h>
> #include <sys/time.h>
> #include <sys/types.h>
> #include <unistd.h>
> #include <fcntl.h>
> #include <string.h>
> #include <time.h>
> #include <errno.h>
> #include <stdlib.h>
>
> int main()
> {
>
> int fd;
> fd_set rfds;
> struct timeval tv;
> int ret_val;
>
> if ((fd = open("test_file", O_RDWR|O_CREAT, 0664)) < 0)
> {
> printf("Open failed\n");
> }
>
> FD_ZERO(&rfds);
> FD_SET(fd, &rfds);
>
> /* Wait up to five seconds. */
> tv.tv_sec = 1;
> tv.tv_usec = 0;
>
> if ( (ret_val = select(-1, &rfds, NULL, NULL, &tv)) < 0)
> {
> if (errno == EINVAL)
> printf("OK\n");
> else
> printf("Not OK, Got errno %d\n", errno);
> }
> exit(0);
> }
>
> For negetive value of n (first argument to select) select fails with
> EINVAL error,
>
> But for the same when I tested for PowerPC it was giving EFAULT,
> Its on 2.6.16 kernel.
>
> Please let me know, If this is fixed or it's a issue in PPC.
> For other archs its working fine.
>
> Thanks,
> Halesh
>
>
On further investigation found, the above problem occurs only in PPC32.
Because select()->ppc_select()->sys_select() only for PPC32.
In the file powerpc/kernel/syscalls.c,
#ifdef CONFIG_PPC32
/*
* Due to some executables calling the wrong select we sometimes
* get wrong args. This determines how the args are being passed
* (a single ptr to them all args passed) then calls
* sys_select() with the appropriate args. -- Cort
*/
int
ppc_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp,
struct timeval __user *tvp)
{
if ( (unsigned long)n >= 4096 )
{
unsigned long __user *buffer = (unsigned long __user *)n;
if (!access_ok(VERIFY_READ, buffer, 5*sizeof(unsigned long))
|| __get_user(n, buffer)
|| __get_user(inp, ((fd_set __user * __user *)(buffer+1)))
|| __get_user(outp, ((fd_set __user * __user *)(buffer+2)))
|| __get_user(exp, ((fd_set __user * __user *)(buffer+3)))
|| __get_user(tvp, ((struct timeval __user * __user *)
(buffer+4))))
return -EFAULT;
}
return sys_select(n, inp, outp, exp, tvp);
}
#endif
What is the purpose of Argument check only for PPC32, is ther any specific
reason? Please let me know if so. Comments were not enough to understad the
actual reason reas for me.
On all archs I have checked like PPC64, ARM, i686 with invalid 'n' val returns
EINVAL, execpet on PPC32, this needs to be fixed ??
either man page / return value in kernel source.
- return -EFAULT
+ return -EINVAL
Please let me know regarding this issue.
Thanks,
Halesh
next prev parent reply other threads:[~2008-09-22 14:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-19 14:04 Regarding select() on PPC Halesh S
2008-09-22 14:47 ` Halesh S [this message]
2008-09-22 15:36 ` Andreas Schwab
2008-09-22 15:45 ` Halesh S
2008-09-23 4:25 ` Halesh S
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=loom.20080922T143915-56@post.gmane.org \
--to=halesh.sadashiv@ap.sony.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox