diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2020-02-01 21:47:17 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2020-02-01 21:47:17 +1100 |
commit | 4c25df5640ae6e4491ee2c50d3f70c1559ef037d (patch) | |
tree | 9d68b0361918926d7d7b6d78090dcfb942ec4e72 /kernel/bpf/tnum.c | |
parent | 34b5a946a9543ce38d8ad1aacc4362533a813db7 (diff) | |
parent | 3d7dfd632f9b60cfce069b4da517e6b1a1c3f613 (diff) |
Merge branch 'topic/user-access-begin' into next
Merge the user_access_begin() series from Christophe. This is based on
a commit from Linus that went into v5.5-rc7.
Diffstat (limited to 'kernel/bpf/tnum.c')
-rw-r--r-- | kernel/bpf/tnum.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/bpf/tnum.c b/kernel/bpf/tnum.c index ca52b9642943..d4f335a9a899 100644 --- a/kernel/bpf/tnum.c +++ b/kernel/bpf/tnum.c @@ -44,14 +44,19 @@ struct tnum tnum_rshift(struct tnum a, u8 shift) return TNUM(a.value >> shift, a.mask >> shift); } -struct tnum tnum_arshift(struct tnum a, u8 min_shift) +struct tnum tnum_arshift(struct tnum a, u8 min_shift, u8 insn_bitness) { /* if a.value is negative, arithmetic shifting by minimum shift * will have larger negative offset compared to more shifting. * If a.value is nonnegative, arithmetic shifting by minimum shift * will have larger positive offset compare to more shifting. */ - return TNUM((s64)a.value >> min_shift, (s64)a.mask >> min_shift); + if (insn_bitness == 32) + return TNUM((u32)(((s32)a.value) >> min_shift), + (u32)(((s32)a.mask) >> min_shift)); + else + return TNUM((s64)a.value >> min_shift, + (s64)a.mask >> min_shift); } struct tnum tnum_add(struct tnum a, struct tnum b) |