Skip to content
  • Howard McLauchlan's avatar
    mm: make should_failslab always available for fault injection · 4f6923fb
    Howard McLauchlan authored
    should_failslab() is a convenient function to hook into for directed
    error injection into kmalloc().  However, it is only available if a
    config flag is set.
    
    The following BCC script, for example, fails kmalloc() calls after a
    btrfs umount:
    
        from bcc import BPF
    
        prog = r"""
        BPF_HASH(flag);
    
        #include <linux/mm.h>
    
        int kprobe__btrfs_close_devices(void *ctx) {
                u64 key = 1;
                flag.update(&key, &key);
                return 0;
        }
    
        int kprobe__should_failslab(struct pt_regs *ctx) {
                u64 key = 1;
                u64 *res;
                res = flag.lookup(&key);
                if (res != 0) {
                    bpf_override_return(ctx, -ENOMEM);
                }
                return 0;
        }
        """
        b = BPF(text=prog)
    
        while 1:
            b.kprobe_poll()
    
    This patch refactors the should_failslab implementation so that the
    function is always available for error injection, independent of flags.
    
    This change would be similar in nature to commit f5490d3ec921 ("block:
    Add should_fail_bio() for bpf error injection").
    
    Link: http://lkml.kernel.org/r/20180222020320.6944-1-hmclauchlan@fb.com
    
    
    Signed-off-by: default avatarHoward McLauchlan <hmclauchlan@fb.com>
    Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Akinobu Mita <akinobu.mita@gmail.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Josef Bacik <jbacik@fb.com>
    Cc: Johannes Weiner <jweiner@fb.com>
    Cc: Alexei Starovoitov <ast@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4f6923fb