Re: [kernel-hardening] Re: [PATCH v9 1/4] syscalls: Verify address limit before returning to user-mode

From: Christoph Hellwig
Date: Wed May 10 2017 - 03:36:25 EST


On Wed, May 10, 2017 at 08:27:47AM +0100, Al Viro wrote:
> And you *still* do the same. Christoph, this is ridiculous - the worst
> part of the area is not a couple of functions in fs/read_write.c, it's
> a fucking lot of ->read() and ->write() instances in shitty driver code,
> pardon the redundance. And _that_ is still done under set_fs(KERNEL_DS).

For now yes. But it provides a sane API on top, and then we can
start moving the drivers that matter to the iter variants and drop
support for the rest soon. Most in-kernel I/O is done to files, and
the rest to a very limited set of devices. (not accounting for sockets
through their own APIs, thats another story)

> That's what I'm objecting to. Centralized kernel_readv() et.al. - sure,
> and fs/read_write.c is the right place for those. No arguments here.
> Conversion to those - absolutely; drivers have no fucking business touching
> set_fs() at all. But your primitives are trouble waiting to happen.
> Let them take kvec arrays. And let them, in case when there's no
> ->read_iter()/->write_iter(), do set_fs(). Statically, without this
> if (iter->type & ITER_KVEC) ... stuff.

Oh weÄl. I can do that first, but I think eventually we'll have to
get back to what I've done now.