• Michael Ellerman's avatar
    powerpc/lib: Fix the feature fixup tests to actually work · cad0e390
    Michael Ellerman authored
    The code patching code has always been a bit confused about whether
    it's best to use void *, unsigned int *, char *, etc. to point to
    instructions. In fact in the feature fixups tests we use both unsigned
    int[] and u8[] in different places.
    
    Unfortunately the tests that use unsigned int[] calculate the size of
    the code blocks using subtraction of those unsigned int pointers, and
    then pass the result to memcmp(). This means we're only comparing 1/4
    of the bytes we need to, because we need to multiply by
    sizeof(unsigned int) to get the number of *bytes*.
    
    The result is that the tests do all the patching and then only compare
    some of the resulting code, so patching bugs that only effect that
    last 3/4 of the code could slip through undetected. It turns out that
    hasn't been happening, although one test had a bad expected case (see
    previous commit).
    
    Fix it for now by multiplying the size by 4 in the affected functions.
    
    Fixes: 362e7701 ("powerpc: Add self-tests of the feature fixup code")
    Epic-brown-paper-bag-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    cad0e390
feature-fixups.c 14.3 KB