mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
[NET]: Fix ipx/econet/appletalk/irda ioctl crashes
Fix kernel oopses whenever somebody issues compatible ioctl on AppleTalk, Econet, IPX or IRDA socket. For AppleTalk/Econet/IRDA it restores state in which these sockets were before compat_ioctl was introduced to the socket ops, for IPX it implements support for 4 ioctls which were not implemented before - as these ioctls use structures which match between 32bit and 64bit userspace, no special code is needed, just call 64bit ioctl handler. Signed-off-by: Petr Vandrovec <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
f1465f7ea9
commit
f6c90b71a3
4 changed files with 86 additions and 0 deletions
|
|
@ -1830,6 +1830,19 @@ static int irda_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
/*
|
||||
* Function irda_ioctl (sock, cmd, arg)
|
||||
*/
|
||||
static int irda_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
/*
|
||||
* All IRDA's ioctl are standard ones.
|
||||
*/
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Function irda_setsockopt (sock, level, optname, optval, optlen)
|
||||
*
|
||||
|
|
@ -2476,6 +2489,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_stream_ops) = {
|
|||
.getname = irda_getname,
|
||||
.poll = irda_poll,
|
||||
.ioctl = irda_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = irda_compat_ioctl,
|
||||
#endif
|
||||
.listen = irda_listen,
|
||||
.shutdown = irda_shutdown,
|
||||
.setsockopt = irda_setsockopt,
|
||||
|
|
@ -2497,6 +2513,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_seqpacket_ops) = {
|
|||
.getname = irda_getname,
|
||||
.poll = datagram_poll,
|
||||
.ioctl = irda_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = irda_compat_ioctl,
|
||||
#endif
|
||||
.listen = irda_listen,
|
||||
.shutdown = irda_shutdown,
|
||||
.setsockopt = irda_setsockopt,
|
||||
|
|
@ -2518,6 +2537,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_dgram_ops) = {
|
|||
.getname = irda_getname,
|
||||
.poll = datagram_poll,
|
||||
.ioctl = irda_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = irda_compat_ioctl,
|
||||
#endif
|
||||
.listen = irda_listen,
|
||||
.shutdown = irda_shutdown,
|
||||
.setsockopt = irda_setsockopt,
|
||||
|
|
@ -2540,6 +2562,9 @@ static const struct proto_ops SOCKOPS_WRAPPED(irda_ultra_ops) = {
|
|||
.getname = irda_getname,
|
||||
.poll = datagram_poll,
|
||||
.ioctl = irda_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = irda_compat_ioctl,
|
||||
#endif
|
||||
.listen = sock_no_listen,
|
||||
.shutdown = irda_shutdown,
|
||||
.setsockopt = irda_setsockopt,
|
||||
|
|
|
|||
Loading…
Reference in a new issue