• Kumar Kartikeya Dwivedi's avatar
    bpf: Add support for custom exception callbacks · b9ae0c9d
    Kumar Kartikeya Dwivedi authored
    By default, the subprog generated by the verifier to handle a thrown
    exception hardcodes a return value of 0. To allow user-defined logic
    and modification of the return value when an exception is thrown,
    introduce the 'exception_callback:' declaration tag, which marks a
    callback as the default exception handler for the program.
    
    The format of the declaration tag is 'exception_callback:<value>', where
    <value> is the name of the exception callback. Each main program can be
    tagged using this BTF declaratiion tag to associate it with an exception
    callback. In case the tag is absent, the default callback is used.
    
    As such, the exception callback cannot be modified at runtime, only set
    during verification.
    
    Allowing modification of the callback for the current program execution
    at runtime leads to issues when the programs begin to nest, as any
    per-CPU state maintaing this information will have to be saved and
    restored. We don't want it to stay in bpf_prog_aux as this takes a
    global effect for all programs. An alternative solution is spilling
    the callback pointer at a known location on the program stack on entry,
    and then passing this location to bpf_throw as a parameter.
    
    However, since exceptions are geared more towards a use case where they
    are ideally never invoked, optimizing for this use case and adding to
    the complexity has diminishing returns.
    Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20230912233214.1518551-7-memxor@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    b9ae0c9d
verifier.c 594 KB