On 2020/7/14 上午12:27, Khem Raj wrote:
>
>
> On 7/12/20 10:52 PM, Zhixiong Chi wrote:
>> Backport the CVE patch from the upstream:
>> git://sourceware.org/git/glibc.git
>> commit 79a4fa341b8a89cb03f84564fd72abaa1a2db394
>> commit beea361050728138b82c57dda0c4810402d342b9
>>
>> Signed-off-by: Zhixiong Chi <zhixiong....@windriver.com>
>> ---
>>   .../glibc/glibc/CVE-2020-6096-1.patch         | 193 ++++++++++++++++++
>>   .../glibc/glibc/CVE-2020-6096-2.patch         | 111 ++++++++++
>>   meta/recipes-core/glibc/glibc_2.30.bb         |   2 +
>>   3 files changed, 306 insertions(+)
>>   create mode 100644 meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
>>   create mode 100644 meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
>>
>> diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
>> b/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
>> new file mode 100644
>> index 0000000000..01c0328362
>> --- /dev/null
>> +++ b/meta/recipes-core/glibc/glibc/CVE-2020-6096-1.patch
>> @@ -0,0 +1,193 @@
>> +From 79a4fa341b8a89cb03f84564fd72abaa1a2db394 Mon Sep 17 00:00:00 2001
>> +From: Evgeny Eremin <e.ere...@omprussia.ru>
>> +Date: Wed, 8 Jul 2020 14:18:19 +0200
>> +Subject: [PATCH 1/2] arm: CVE-2020-6096: fix memcpy and memmove for
>> negative
>> + length [BZ #25620]
>> +
>> +Unsigned branch instructions could be used for r2 to fix the wrong
>> +behavior when a negative length is passed to memcpy and memmove.
>> +This commit fixes the generic arm implementation of memcpy amd memmove.
>> +
>> +CVE: CVE-2020-6096
>> +Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
>> +Signed-off-by: Zhixiong Chi <zhixiong....@windriver.com>
>
> This is needed on master as well, so please propose it for master and
> then backport it to release branches, dunfell will also need it.

For the master/dunfell branch, since we always upgrade the version to
cover some issues, as a result some CVE patches will be droped after
upgrading.

If the upstream doesn't upgrade any one package version for a long time,
our yocto team members will check it and resend the CVE patches for
master/dunfell branch.

And since the CVE patches are just helpful, our sustaining team will
focus on zeus branch and backport patches for zeus branch, That's the
reason why the almost all CVE patches from WindRiver are just for zeus
branch.  This strategy is just for CVE issues.

Thanks.

>
>> +---
>> + sysdeps/arm/memcpy.S  | 24 ++++++++++--------------
>> + sysdeps/arm/memmove.S | 24 ++++++++++--------------
>> + 2 files changed, 20 insertions(+), 28 deletions(-)
>> +
>> +diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S
>> +index 510e8adaf2..bcfbc51d99 100644
>> +--- a/sysdeps/arm/memcpy.S
>> ++++ b/sysdeps/arm/memcpy.S
>> +@@ -68,7 +68,7 @@ ENTRY(memcpy)
>> +         cfi_remember_state
>> +
>> +         subs    r2, r2, #4
>> +-        blt    8f
>> ++        blo    8f
>> +         ands    ip, r0, #3
>> +     PLD(    pld    [r1, #0]        )
>> +         bne    9f
>> +@@ -82,7 +82,7 @@ ENTRY(memcpy)
>> +         cfi_rel_offset (r6, 4)
>> +         cfi_rel_offset (r7, 8)
>> +         cfi_rel_offset (r8, 12)
>> +-        blt    5f
>> ++        blo    5f
>> +
>> +     CALGN(    ands    ip, r1, #31        )
>> +     CALGN(    rsb    r3, ip, #32        )
>> +@@ -98,9 +98,9 @@ ENTRY(memcpy)
>> + #endif
>> +
>> +     PLD(    pld    [r1, #0]        )
>> +-2:    PLD(    subs    r2, r2, #96        )
>> ++2:    PLD(    cmp    r2, #96            )
>> +     PLD(    pld    [r1, #28]        )
>> +-    PLD(    blt    4f            )
>> ++    PLD(    blo    4f            )
>> +     PLD(    pld    [r1, #60]        )
>> +     PLD(    pld    [r1, #92]        )
>> +
>> +@@ -108,9 +108,7 @@ ENTRY(memcpy)
>> + 4:        ldmia    r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
>> +         subs    r2, r2, #32
>> +         stmia    r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
>> +-        bge    3b
>> +-    PLD(    cmn    r2, #96            )
>> +-    PLD(    bge    4b            )
>> ++        bhs    3b
>> +
>> + 5:        ands    ip, r2, #28
>> +         rsb    ip, ip, #32
>> +@@ -222,7 +220,7 @@ ENTRY(memcpy)
>> +         strbge    r4, [r0], #1
>> +         subs    r2, r2, ip
>> +         strb    lr, [r0], #1
>> +-        blt    8b
>> ++        blo    8b
>> +         ands    ip, r1, #3
>> +         beq    1b
>> +
>> +@@ -236,7 +234,7 @@ ENTRY(memcpy)
>> +         .macro    forward_copy_shift pull push
>> +
>> +         subs    r2, r2, #28
>> +-        blt    14f
>> ++        blo    14f
>> +
>> +     CALGN(    ands    ip, r1, #31        )
>> +     CALGN(    rsb    ip, ip, #32        )
>> +@@ -253,9 +251,9 @@ ENTRY(memcpy)
>> +         cfi_rel_offset (r10, 16)
>> +
>> +     PLD(    pld    [r1, #0]        )
>> +-    PLD(    subs    r2, r2, #96        )
>> ++    PLD(    cmp    r2, #96            )
>> +     PLD(    pld    [r1, #28]        )
>> +-    PLD(    blt    13f            )
>> ++    PLD(    blo    13f            )
>> +     PLD(    pld    [r1, #60]        )
>> +     PLD(    pld    [r1, #92]        )
>> +
>> +@@ -280,9 +278,7 @@ ENTRY(memcpy)
>> +         mov    ip, ip, PULL #\pull
>> +         orr    ip, ip, lr, PUSH #\push
>> +         stmia    r0!, {r3, r4, r5, r6, r7, r8, r10, ip}
>> +-        bge    12b
>> +-    PLD(    cmn    r2, #96            )
>> +-    PLD(    bge    13b            )
>> ++        bhs    12b
>> +
>> +         pop    {r5 - r8, r10}
>> +         cfi_adjust_cfa_offset (-20)
>> +diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S
>> +index 954037ef3a..0d07b76ee6 100644
>> +--- a/sysdeps/arm/memmove.S
>> ++++ b/sysdeps/arm/memmove.S
>> +@@ -85,7 +85,7 @@ ENTRY(memmove)
>> +         add    r1, r1, r2
>> +         add    r0, r0, r2
>> +         subs    r2, r2, #4
>> +-        blt    8f
>> ++        blo    8f
>> +         ands    ip, r0, #3
>> +     PLD(    pld    [r1, #-4]        )
>> +         bne    9f
>> +@@ -99,7 +99,7 @@ ENTRY(memmove)
>> +         cfi_rel_offset (r6, 4)
>> +         cfi_rel_offset (r7, 8)
>> +         cfi_rel_offset (r8, 12)
>> +-        blt    5f
>> ++        blo     5f
>> +
>> +     CALGN(    ands    ip, r1, #31        )
>> +     CALGN(    sbcsne    r4, ip, r2        )  @ C is always set here
>> +@@ -114,9 +114,9 @@ ENTRY(memmove)
>> + #endif
>> +
>> +     PLD(    pld    [r1, #-4]        )
>> +-2:    PLD(    subs    r2, r2, #96        )
>> ++2:    PLD(    cmp    r2, #96            )
>> +     PLD(    pld    [r1, #-32]        )
>> +-    PLD(    blt    4f            )
>> ++    PLD(    blo     4f                      )
>> +     PLD(    pld    [r1, #-64]        )
>> +     PLD(    pld    [r1, #-96]        )
>> +
>> +@@ -124,9 +124,7 @@ ENTRY(memmove)
>> + 4:        ldmdb    r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
>> +         subs    r2, r2, #32
>> +         stmdb    r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
>> +-        bge    3b
>> +-    PLD(    cmn    r2, #96            )
>> +-    PLD(    bge    4b            )
>> ++        bhs     3b
>> +
>> + 5:        ands    ip, r2, #28
>> +         rsb    ip, ip, #32
>> +@@ -237,7 +235,7 @@ ENTRY(memmove)
>> +         strbge    r4, [r0, #-1]!
>> +         subs    r2, r2, ip
>> +         strb    lr, [r0, #-1]!
>> +-        blt    8b
>> ++        blo    8b
>> +         ands    ip, r1, #3
>> +         beq    1b
>> +
>> +@@ -251,7 +249,7 @@ ENTRY(memmove)
>> +         .macro    backward_copy_shift push pull
>> +
>> +         subs    r2, r2, #28
>> +-        blt    14f
>> ++        blo    14f
>> +
>> +     CALGN(    ands    ip, r1, #31        )
>> +     CALGN(    rsb    ip, ip, #32        )
>> +@@ -268,9 +266,9 @@ ENTRY(memmove)
>> +         cfi_rel_offset (r10, 16)
>> +
>> +     PLD(    pld    [r1, #-4]        )
>> +-    PLD(    subs    r2, r2, #96        )
>> ++    PLD(    cmp    r2, #96            )
>> +     PLD(    pld    [r1, #-32]        )
>> +-    PLD(    blt    13f            )
>> ++    PLD(    blo    13f            )
>> +     PLD(    pld    [r1, #-64]        )
>> +     PLD(    pld    [r1, #-96]        )
>> +
>> +@@ -295,9 +293,7 @@ ENTRY(memmove)
>> +         mov     r4, r4, PUSH #\push
>> +         orr     r4, r4, r3, PULL #\pull
>> +         stmdb   r0!, {r4 - r8, r10, ip, lr}
>> +-        bge    12b
>> +-    PLD(    cmn    r2, #96            )
>> +-    PLD(    bge    13b            )
>> ++        bhs    12b
>> +
>> +         pop    {r5 - r8, r10}
>> +         cfi_adjust_cfa_offset (-20)
>> +--
>> +2.17.0
>> +
>> diff --git a/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
>> b/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
>> new file mode 100644
>> index 0000000000..bfb2d7e7f5
>> --- /dev/null
>> +++ b/meta/recipes-core/glibc/glibc/CVE-2020-6096-2.patch
>> @@ -0,0 +1,111 @@
>> +From beea361050728138b82c57dda0c4810402d342b9 Mon Sep 17 00:00:00 2001
>> +From: Alexander Anisimov <a.anisi...@omprussia.ru>
>> +Date: Wed, 8 Jul 2020 14:18:31 +0200
>> +Subject: [PATCH 2/2] arm: CVE-2020-6096: Fix multiarch memcpy for
>> negative
>> + length [BZ #25620]
>> +
>> +Unsigned branch instructions could be used for r2 to fix the wrong
>> +behavior when a negative length is passed to memcpy.
>> +This commit fixes the armv7 version.
>> +
>> +CVE: CVE-2020-6096
>> +Upstream-Status: Backport [git://sourceware.org/git/glibc.git]
>> +Signed-off-by: Zhixiong Chi <zhixiong....@windriver.com>
>> +---
>> + sysdeps/arm/armv7/multiarch/memcpy_impl.S | 22 +++++++++++-----------
>> + 1 file changed, 11 insertions(+), 11 deletions(-)
>> +
>> +diff --git a/sysdeps/arm/armv7/multiarch/memcpy_impl.S
>> b/sysdeps/arm/armv7/multiarch/memcpy_impl.S
>> +index bf4ac7077f..379bb56fc9 100644
>> +--- a/sysdeps/arm/armv7/multiarch/memcpy_impl.S
>> ++++ b/sysdeps/arm/armv7/multiarch/memcpy_impl.S
>> +@@ -268,7 +268,7 @@ ENTRY(memcpy)
>> +
>> +     mov    dst, dstin    /* Preserve dstin, we need to return it.  */
>> +     cmp    count, #64
>> +-    bge    .Lcpy_not_short
>> ++    bhs    .Lcpy_not_short
>> +     /* Deal with small copies quickly by dropping straight into the
>> +        exit block.  */
>> +
>> +@@ -351,10 +351,10 @@ ENTRY(memcpy)
>> +
>> + 1:
>> +     subs    tmp2, count, #64    /* Use tmp2 for count.  */
>> +-    blt    .Ltail63aligned
>> ++    blo    .Ltail63aligned
>> +
>> +     cmp    tmp2, #512
>> +-    bge    .Lcpy_body_long
>> ++    bhs    .Lcpy_body_long
>> +
>> + .Lcpy_body_medium:            /* Count in tmp2.  */
>> + #ifdef USE_VFP
>> +@@ -378,7 +378,7 @@ ENTRY(memcpy)
>> +     add    src, src, #64
>> +     vstr    d1, [dst, #56]
>> +     add    dst, dst, #64
>> +-    bge    1b
>> ++    bhs    1b
>> +     tst    tmp2, #0x3f
>> +     beq    .Ldone
>> +
>> +@@ -412,7 +412,7 @@ ENTRY(memcpy)
>> +     ldrd    A_l, A_h, [src, #64]!
>> +     strd    A_l, A_h, [dst, #64]!
>> +     subs    tmp2, tmp2, #64
>> +-    bge    1b
>> ++    bhs    1b
>> +     tst    tmp2, #0x3f
>> +     bne    1f
>> +     ldr    tmp2,[sp], #FRAME_SIZE
>> +@@ -482,7 +482,7 @@ ENTRY(memcpy)
>> +     add    src, src, #32
>> +
>> +     subs    tmp2, tmp2, #prefetch_lines * 64 * 2
>> +-    blt    2f
>> ++    blo    2f
>> + 1:
>> +     cpy_line_vfp    d3, 0
>> +     cpy_line_vfp    d4, 64
>> +@@ -494,7 +494,7 @@ ENTRY(memcpy)
>> +     add    dst, dst, #2 * 64
>> +     add    src, src, #2 * 64
>> +     subs    tmp2, tmp2, #prefetch_lines * 64
>> +-    bge    1b
>> ++    bhs    1b
>> +
>> + 2:
>> +     cpy_tail_vfp    d3, 0
>> +@@ -615,8 +615,8 @@ ENTRY(memcpy)
>> + 1:
>> +     pld    [src, #(3 * 64)]
>> +     subs    count, count, #64
>> +-    ldrmi    tmp2, [sp], #FRAME_SIZE
>> +-    bmi    .Ltail63unaligned
>> ++    ldrlo    tmp2, [sp], #FRAME_SIZE
>> ++    blo    .Ltail63unaligned
>> +     pld    [src, #(4 * 64)]
>> +
>> + #ifdef USE_NEON
>> +@@ -633,7 +633,7 @@ ENTRY(memcpy)
>> +     neon_load_multi d0-d3, src
>> +     neon_load_multi d4-d7, src
>> +     subs    count, count, #64
>> +-    bmi    2f
>> ++    blo    2f
>> + 1:
>> +     pld    [src, #(4 * 64)]
>> +     neon_store_multi d0-d3, dst
>> +@@ -641,7 +641,7 @@ ENTRY(memcpy)
>> +     neon_store_multi d4-d7, dst
>> +     neon_load_multi d4-d7, src
>> +     subs    count, count, #64
>> +-    bpl    1b
>> ++    bhs    1b
>> + 2:
>> +     neon_store_multi d0-d3, dst
>> +     neon_store_multi d4-d7, dst
>> +--
>> +2.17.0
>> +
>> diff --git a/meta/recipes-core/glibc/glibc_2.30.bb
>> b/meta/recipes-core/glibc/glibc_2.30.bb
>> index e9286b6b49..b674b02706 100644
>> --- a/meta/recipes-core/glibc/glibc_2.30.bb
>> +++ b/meta/recipes-core/glibc/glibc_2.30.bb
>> @@ -45,6 +45,8 @@ SRC_URI = 
>> "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
>>              file://CVE-2020-10029.patch \
>>              file://CVE-2020-1751.patch \
>>              file://CVE-2020-1752.patch \
>> +           file://CVE-2020-6096-1.patch \
>> +           file://CVE-2020-6096-2.patch \
>>              "
>>   S = "${WORKDIR}/git"
>>   B = "${WORKDIR}/build-${TARGET_SYS}"
>>
>>
>> 
>>
>
-- 
---------------------
Thanks,
Zhixiong Chi
Tel: +86-10-8477-7036

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#140638): 
https://lists.openembedded.org/g/openembedded-core/message/140638
Mute This Topic: https://lists.openembedded.org/mt/75471629/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to