Patch "bpf: Fix handling of XADD on BTF memory" has been added to the 5.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    bpf: Fix handling of XADD on BTF memory

to the 5.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bpf-fix-handling-of-xadd-on-btf-memory.patch
and it can be found in the queue-5.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 306e259cd614f4b4223661a63738fdb6c64d90f3
Author: Jann Horn <jannh@xxxxxxxxxx>
Date:   Fri Apr 17 02:00:07 2020 +0200

    bpf: Fix handling of XADD on BTF memory
    
    commit 8ff3571f7e1bf3f293cc5e3dc14f2943f4fa7fcf upstream.
    
    check_xadd() can cause check_ptr_to_btf_access() to be executed with
    atype==BPF_READ and value_regno==-1 (meaning "just check whether the access
    is okay, don't tell me what type it will result in").
    Handle that case properly and skip writing type information, instead of
    indexing into the registers at index -1 and writing into out-of-bounds
    memory.
    
    Note that at least at the moment, you can't actually write through a BTF
    pointer, so check_xadd() will reject the program after calling
    check_ptr_to_btf_access with atype==BPF_WRITE; but that's after the
    verifier has already corrupted memory.
    
    This patch assumes that BTF pointers are not available in unprivileged
    programs.
    
    Fixes: 9e15db66136a ("bpf: Implement accurate raw_tp context access via BTF")
    Signed-off-by: Jann Horn <jannh@xxxxxxxxxx>
    Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/20200417000007.10734-2-jannh@xxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index e4357a301fb8f..1381913cb10ba 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -2885,7 +2885,7 @@ static int check_ptr_to_btf_access(struct bpf_verifier_env *env,
 	if (ret < 0)
 		return ret;
 
-	if (atype == BPF_READ) {
+	if (atype == BPF_READ && value_regno >= 0) {
 		if (ret == SCALAR_VALUE) {
 			mark_reg_unknown(env, regs, value_regno);
 			return 0;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux