Re: [PATCH 0/3] Modernize tasklet callback API

Kees Cook
2020-07-16T21:24:42Z

On Thu, Jul 16, 2020 at 01:48:20PM -0700, Dmitry Torokhov wrote:
> On Thu, Jul 16, 2020 at 12:14 PM Kees Cook <keescook@chromium.org> wrote:
> >
> > On Thu, Jul 16, 2020 at 09:57:18AM +0200, Peter Zijlstra wrote:
> > > On Wed, Jul 15, 2020 at 08:08:44PM -0700, Kees Cook wrote:
> > > > Hi,
> > > >
> > > > This is the infrastructure changes to prepare the tasklet API for
> > > > conversion to passing the tasklet struct as the callback argument instead
> > > > of an arbitrary unsigned long. The first patch details why this is useful
> > > > (it's the same rationale as the timer_struct changes from a bit ago:
> > > > less abuse during memory corruption attacks, more in line with existing
> > > > ways of doing things in the kernel, save a little space in struct,
> > > > etc). Notably, the existing tasklet API use is much less messy, so there
> > > > is less to clean up.
> > >
> > > I would _MUCH_ rather see tasklets go the way of the dodo, esp. given
> > > that:
> > >
> > > > drivers/input/keyboard/omap-keypad.c | 2 +-
> > > > drivers/input/serio/hil_mlc.c | 2 +-
> > > > drivers/net/wan/farsync.c | 4 +--
> > > > drivers/s390/crypto/ap_bus.c | 2 +-
> > > > drivers/staging/most/dim2/dim2.c | 2 +-
> > > > drivers/staging/octeon/ethernet-tx.c | 2 +-
> > > > drivers/tty/vt/keyboard.c | 2 +-
> > > > drivers/usb/gadget/udc/snps_udc_core.c | 6 ++---
> > > > drivers/usb/host/fhci-sched.c | 2 +-
> > > > include/linux/interrupt.h | 37 ++++++++++++++++++++++----
> > > > kernel/backtracetest.c | 2 +-
> > > > kernel/debug/debug_core.c | 2 +-
> > > > kernel/irq/resend.c | 2 +-
> > > > kernel/softirq.c | 18 ++++++++++++-
> > > > net/atm/pppoatm.c | 2 +-
> > > > net/iucv/iucv.c | 2 +-
> > > > sound/drivers/pcsp/pcsp_lib.c | 2 +-
> > > > 17 files changed, 66 insertions(+), 25 deletions(-)
> > >
> > > there appear to be hardly any users left.. Can't we stage an extinction
> > > event here instead?
> >
> > Oh, I wish, but no. That's just the ones using DECLARE_TASKLET. There
> > are hundred(s?) more (see the referenced tree).
>
> Still, do we really need tasklets? Can we substitute timers executing
> immediately in their place?

If there is a direct replacement, then sure, I'd be happy to do
whatever, however it does not look mechanical to me. If there is a
mechanical way that will convert these two directories (as an example of
various complexities):

drivers/crypto/ccp/
drivers/gpu/drm/i915/gt/

then let's get it documented. But if not, let's write up a paragraph for
the deprecated.rst, mark it as deprecated in comments, and modernize the
API (which is a mostly mechanical change) to avoid it being a problem
for CFI, for memory corruption, and heap space, etc.

--
Kees Cook