• Christian Borntraeger's avatar
    s390/lib: fix memcmp and strstr · e2efc424
    Christian Borntraeger authored
    if two string compare equal the clcle instruction will update the
    string addresses to point _after_ the string. This might already
    be on a different page, so we should not use these pointer to
    calculate the difference as in that case the calculation of the
    difference can cause oopses.
    
    The return value of memcmp does not need the difference, we
    can just reuse the condition code and return for CC=1 (All bytes
    compared, first operand low) -1 and for CC=2 (All bytes compared,
    first operand high) +1
    strstr also does not need the diff.
    While fixing this, make the common function clcle "correct on its
    own" by using l1 instead of l2 for the first length. strstr will
    call this with l2 for both strings.
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Fixes: db7f5eef ("s390/lib: use basic blocks for inline assemblies")
    Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    e2efc424
string.c 7.48 KB