break;
 
                case BPF_ALU | BPF_END | BPF_FROM_BE:
+               case BPF_ALU64 | BPF_END | BPF_FROM_LE:
                        switch (imm32) {
                        case 16:
                                /* Emit 'ror %ax, 8' to swap lower 2 bytes */
 
        INSN_3(ALU64, DIV,  X),                 \
        INSN_3(ALU64, MOD,  X),                 \
        INSN_2(ALU64, NEG),                     \
+       INSN_3(ALU64, END, TO_LE),              \
        /*   Immediate based. */                \
        INSN_3(ALU64, ADD,  K),                 \
        INSN_3(ALU64, SUB,  K),                 \
                        break;
                }
                CONT;
+       ALU64_END_TO_LE:
+               switch (IMM) {
+               case 16:
+                       DST = (__force u16) __swab16(DST);
+                       break;
+               case 32:
+                       DST = (__force u32) __swab32(DST);
+                       break;
+               case 64:
+                       DST = (__force u64) __swab64(DST);
+                       break;
+               }
+               CONT;
 
        /* CALL */
        JMP_CALL:
 
                }
        }
 
+       if (class == BPF_ALU64 && op == BPF_END && (insn->imm == 16 || insn->imm == 32))
+               return false;
+
        if (class == BPF_ALU64 || class == BPF_JMP ||
-           /* BPF_END always use BPF_ALU class. */
            (class == BPF_ALU && op == BPF_END && insn->imm == 64))
                return true;
 
                } else {
                        if (insn->src_reg != BPF_REG_0 || insn->off != 0 ||
                            (insn->imm != 16 && insn->imm != 32 && insn->imm != 64) ||
-                           BPF_CLASS(insn->code) == BPF_ALU64) {
+                           (BPF_CLASS(insn->code) == BPF_ALU64 &&
+                            BPF_SRC(insn->code) != BPF_TO_LE)) {
                                verbose(env, "BPF_END uses reserved fields\n");
                                return -EINVAL;
                        }