Fwd: [Bug 205459] New: mips: bpf: test_bpf failures, eBPF JIT on mips32 outputs invalid 64-bit insns

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

 



[ Cc MIPS folks ]

Hassan, James, Paul, others, please take a look. Thanks!

-------- Forwarded Message --------
Subject: [Bug 205459] New: mips: bpf: test_bpf failures, eBPF JIT on mips32 outputs invalid 64-bit insns
Date: Thu, 07 Nov 2019 06:41:21 +0000
From: bugzilla-daemon@xxxxxxxxxxxxxxxxxxx
To: daniel@xxxxxxxxxxxxx

https://bugzilla.kernel.org/show_bug.cgi?id=205459

            Bug ID: 205459
           Summary: mips: bpf: test_bpf failures, eBPF JIT on mips32
                    outputs invalid 64-bit insns
           Product: Networking
           Version: 2.5
    Kernel Version: 5.2.17
          Hardware: Mips32
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: high
          Priority: P1
         Component: Other
          Assignee: stephen@xxxxxxxxxxxxxxxxxx
          Reporter: itugrok@xxxxxxxxx
        Regression: No

Created attachment 285809
  --> https://bugzilla.kernel.org/attachment.cgi?id=285809&action=edit
EXCEPTION/failures: kernel 5.2.17/mips32 (Debian 10.1)

Summary:
========

Linux 5.2.x added an eBPF JIT for MIPS32 (yay!). Based on discussion of the
original submission (https://www.spinics.net/lists/mips/msg77008.html) I
expected that:

  (1) all tests from module test_bpf.ko would pass, and
  (2) any previously JITed tests (i.e. cBPF) would still be JITed.

However, I can't reproduce the above based on my testing as per the attached
log.

Point (2) doesn't stand since the first ~30 tests are not JITed, but were
previously cBPF JITed for the most part.

As for point (1), the full test set doesn't complete, but errors out early on
with a "Reserved instruction in kernel code[#1]" error. Manually hopping
through some of the tests yields the same error for many:

  #68 ALU_MOV_K: 0x0000ffffffff0000 = 0x00000000ffffffff jited:1
  #73 ALU_ADD_X: 1 + 2 = 3 jited:1
  #74 ALU_ADD_X: 1 + 4294967294 = 4294967295 jited:1
  #75 ALU_ADD_X: 2 + 4294967294 = 0 jited:1
  #79 ALU_ADD_K: 1 + 2 = 3 jited:1
  (.. and so on ...)

Disassembling the JITed code for test #68 shows incorrect MIPS64 instructions:

  24 03 00 20     li    v1,32
  34 05 ff ff     li    a1,0xffff
  00 05 2c 38     dsll  a1,a1,0x10      <=== MIPS64 insn
  34 a5 ff ff     ori   a1,a1,0xffff
  00 05 2c 38     dsll  a1,a1,0x10      <=== MIPS64 insn
  34 06 ff ff     li    a2,0xffff
  00 06 34 38     dsll  a2,a2,0x10      <=== MIPS64 insn
  34 c6 ff ff     ori   a2,a2,0xffff

Since this was tested in the past, I'm really hoping there's a simple solution
to these problems, or else a case of "operator error". A review by someone more
knowledgeable with the MIPS32 eBPF JIT would be appreciated.

Steps to Reproduce:
===================

  # sysctl net.core.bpf_jit_enable=1
  # modprobe test_bpf
  <Kernel log with "Reserved instruction" exception>


Affected Systems Tested:
========================

  Debian 10.1 on QEMU/malta(mips32_be) [distro kernel 5.2.17-1~bpo10+1
(2019-09-30)]


Kernel Logs:
============

Boot log with test results up to first failure is attached.

--
You are receiving this mail because:
You are watching the assignee of the bug.



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux