[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1303887309.2699.58.camel@edumazet-laptop>
Date: Wed, 27 Apr 2011 08:55:09 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: Lifeng Sun <lifongsun@...il.com>
Cc: linux-kernel@...r.kernel.org, netdev <netdev@...r.kernel.org>
Subject: Re: [PATCH] Applying inappropriate ioctl operation on socket
should return ENOTTY
Le mercredi 27 avril 2011 à 14:37 +0800, Lifeng Sun a écrit :
> On 07:58 Wed 04/27/11 Apr, Eric Dumazet wrote:
> > Really ?
> >
> > EINVAL is ok too : Request or argp is not valid.
>
> I'm afraid not. SUSv4 specifies, say,
>
> int tcsetattr(int fildes, int optional_actions,
> const struct termios *termios_p);
>
> ERROR:
> [EINVAL]
> The optional_actions argument is not a supported value, or an
> attempt was made to change an attribute represented in the
> termios structure to an unsupported value.
>
> [ENOTTY]
> The file associated with fildes is not a terminal.
>
> which means when we apply tcsetattr (implemented by ioctl) to _any_
> non-terminal file descriptor, it should set errno to ENOTTY rather
> than EINVAL.
Thats not so simple. This is a known and documented artifact.
In old days, ioctl() had a meaning for TTYS (mostly).
man isatty
ERRORS
EBADF fd is not a valid file descriptor.
EINVAL fd refers to a file other than a terminal. POSIX.1-2001 specifies the error ENOTTY for this case.
This is not because POSIX changes rules that we must change kernel and break applications.
Conformant applications use isatty(fd) and test result code being 1 or not 1
This way, they work with linux 1.0, 2.0, 2.2, 2.4, .... and other OSes as well.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists