[ktap] [PATCH 0/4] suggestion on kernel interface

From: Yann Droneaud <ydroneaud@xxxxxxxxxx>

To: ktap@xxxxxxxxxxxxx

Date: Mon, 4 Nov 2013 22:22:38 +0100

Hi,
Please find some patches that could help to improve
the kernel interface used by ktap.
I've seen ktap briefly part of linux-next and look at it
in order to make it use O_CLOEXEC. But while looking
at this issue I've found some oddities on the kernel
interface exposed by ktap.
These are only suggestion and not definitive patches.
In particular, adding patches changing anon_inode_getfile
and adding O_CLOEXEC are of no use if the following changes
are implemented instead.
In particular, Ktap kernel interface should probably
be defined by write() (and read()) instead of ioctl().
See "Linux Device Drivers, 3rd edition",
"Chapter 6: Advanced Char Driver Operations",
especially "ioctl" (page 136) and
"Device Control Without ioctl" (page 146)
http://lwn.net/images/pdf/LDD3/ch06.pdf
Additionally, but not implemented in this patchset,
- the "chunk" should be put after the "parm" header,
same apply for args, otherwise, using pointer makes
ktap not usable by a 32 bits program running on 64 bits
host, but who would do this ...
- use a "flags" field instead of so many 'int' in ktap_parm
which map to a boolean value;
- add a version and/or magic field in the ktap_parm to make
it possible to support further versions and able to reject
random stream;
- merge transport with ktapvm handling would make it safer
to read traces: only one device to open, writing on ktapvm
device would upload opcodes, start/stop execution,
reading on ktapvm device would retrieve the traces;
- move code reading/writing from userspace together in the same
module to make it easier to audit.
As a starting point, you could have a look at the uverbs API
from the InfiniBand / RDMA subsystem:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/uverbs_main.c#n587http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/uverbs_cmd.c
Regards.
Yann Droneaud (4):
ktap: use anon_inode_getfd()
ktap: add support for passing opening flags in ioctl
ktap: add support for write() operation
ktap: remove uneeded ioctls
include/ktap_types.h | 8 -------
interpreter/ktap.c | 65 +++++++++++++++++++---------------------------------
2 files changed, 24 insertions(+), 49 deletions(-)
--
1.8.3.1