linux-user: Add most IFTUN ioctls
The three options handling `struct sock_fprog` (TUNATTACHFILTER, TUNDETACHFILTER, and TUNGETFILTER) are not implemented. Linux kernel keeps a user space pointer in them which we cannot correctly handle. Signed-off-by: Josh Kunz <jkz@google.com> Signed-off-by: Shu-Chun Weng <scw@google.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200929014801.655524-1-scw@google.com> [lv: use 0 size in unlock_user()] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
committed by
Laurent Vivier
parent
8494645797
commit
6addf06a3c
@@ -720,3 +720,49 @@
|
||||
IOCTL(KCOV_DISABLE, 0, TYPE_NULL)
|
||||
IOCTL(KCOV_INIT_TRACE, IOC_R, TYPE_ULONG)
|
||||
#endif
|
||||
|
||||
IOCTL(TUNSETDEBUG, IOC_W, TYPE_INT)
|
||||
IOCTL(TUNSETIFF, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
|
||||
IOCTL(TUNSETPERSIST, IOC_W, TYPE_INT)
|
||||
IOCTL(TUNSETOWNER, IOC_W, TYPE_INT)
|
||||
IOCTL(TUNSETLINK, IOC_W, TYPE_INT)
|
||||
IOCTL(TUNSETGROUP, IOC_W, TYPE_INT)
|
||||
IOCTL(TUNGETFEATURES, IOC_R, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNSETOFFLOAD, IOC_W, TYPE_LONG)
|
||||
IOCTL_SPECIAL(TUNSETTXFILTER, IOC_W, do_ioctl_TUNSETTXFILTER,
|
||||
/*
|
||||
* We can't represent `struct tun_filter` in thunk so leaving
|
||||
* it uninterpreted. do_ioctl_TUNSETTXFILTER will do the
|
||||
* conversion.
|
||||
*/
|
||||
TYPE_PTRVOID)
|
||||
IOCTL(TUNGETIFF, IOC_R, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
|
||||
IOCTL(TUNGETSNDBUF, IOC_R, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNSETSNDBUF, IOC_W, MK_PTR(TYPE_INT))
|
||||
/*
|
||||
* TUNATTACHFILTER and TUNDETACHFILTER are not supported. Linux kernel keeps a
|
||||
* user pointer in TUNATTACHFILTER, which we are not able to correctly handle.
|
||||
*/
|
||||
IOCTL(TUNGETVNETHDRSZ, IOC_R, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNSETVNETHDRSZ, IOC_W, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNSETQUEUE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
|
||||
IOCTL(TUNSETIFINDEX , IOC_W, MK_PTR(TYPE_INT))
|
||||
/* TUNGETFILTER is not supported: see TUNATTACHFILTER. */
|
||||
IOCTL(TUNSETVNETLE, IOC_W, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNGETVNETLE, IOC_R, MK_PTR(TYPE_INT))
|
||||
#ifdef TUNSETVNETBE
|
||||
IOCTL(TUNSETVNETBE, IOC_W, MK_PTR(TYPE_INT))
|
||||
IOCTL(TUNGETVNETBE, IOC_R, MK_PTR(TYPE_INT))
|
||||
#endif
|
||||
#ifdef TUNSETSTEERINGEBPF
|
||||
IOCTL(TUNSETSTEERINGEBPF, IOC_W, MK_PTR(TYPE_INT))
|
||||
#endif
|
||||
#ifdef TUNSETFILTEREBPF
|
||||
IOCTL(TUNSETFILTEREBPF, IOC_W, MK_PTR(TYPE_INT))
|
||||
#endif
|
||||
#ifdef TUNSETCARRIER
|
||||
IOCTL(TUNSETCARRIER, IOC_W, MK_PTR(TYPE_INT))
|
||||
#endif
|
||||
#ifdef TUNGETDEVNETNS
|
||||
IOCTL(TUNGETDEVNETNS, IOC_R, TYPE_NULL)
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user