Op 04-10-2019 om 21:37 schreef Eric Biggers:
On Fri, Oct 04, 2019 at 03:29:33PM +0200, Gert Robben wrote:
Op 04-10-2019 om 08:16 schreef Ard Biesheuvel:
On Thu, 3 Oct 2019 at 23:26, Gert Robben <t2@xxxxxxx> wrote:
Op 03-10-2019 om 15:39 schreef Ard Biesheuvel:
Commit 79c65d179a40e145 ("crypto: cbc - Convert to skcipher") updated
the generic CBC template wrapper from a blkcipher to a skcipher algo,
to get away from the deprecated blkcipher interface. However, as a side
effect, drivers that instantiate CBC transforms using the blkcipher as
a fallback no longer work, since skciphers can wrap blkciphers but not
the other way around. This broke the geode-aes driver.
So let's fix it by moving to the sync skcipher interface when allocating
the fallback.
Cc: Gert Robben <t2@xxxxxxx>
Cc: Jelle de Jong <jelledejong@xxxxxxxxxxxxx>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>
---
Gert, Jelle,
If you can, please try this patch and report back to the list if it solves
the Geode issue for you.
Thanks for the patch!
I tried it on Alix 2C2 / Geode LX800 with Linux 5.4-rc1 (also 5.1-5.3 fwiw).
At least now openssl doesn't give those errors anymore.
(openssl speed -evp aes-128-cbc -elapsed -engine afalg)
But looking at the results (<6MB/s), apparently it's not using geode-aes
(>30MB/s?).
In dmesg can be seen:
alg: skcipher: ecb-aes-geode encryption test failed (wrong result) on
test vector 1, cfg="out-of-place"
alg: skcipher: cbc-aes-geode encryption test failed (wrong result) on
test vector 2, cfg="out-of-place"
Geode LX AES 0000:00:01.2: GEODE AES engine enabled.
In /proc/crypto, drivers cbc-aes-geode/ecb-aes-geode are listed with
"selftest: unknown". Driver "geode-aes" has "selftest: passed".
I'm happy to test other patches.
Oops, mistake there on my part
Can you replace the two instances of
skcipher_request_set_crypt(req, dst, src, nbytes, desc->info);
with
skcipher_request_set_crypt(req, src, dst, nbytes, desc->info);
please?
Yes, with that change, now it works in 5.4-rc1:
# openssl speed -evp aes-128-cbc -elapsed -engine afalg
- - - 8< - - -
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192
bytes 16384 bytes
aes-128-cbc 125.63k 499.39k 1858.18k 6377.00k 25753.93k
31167.08k
I also quickly tried nginx https, that seems to transfer a file correctly.
And a bit faster, but not by this much, I have to look into that further.
For now I assume the kernel part seems to be working fine.
Thanks, much appreciated!
Gert
Can you check whether it passes the extra self-tests too? I.e. enable
CONFIG_CRYPTO_MANAGER_EXTRA_TESTS.
Yes, with that option dmesg says additionally (I did several reboots):
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=24 klen=16"; expected_error=-22, cfg="random:
inplace use_finup src_divs=[18.14%@alignmask+19, 81.86%@+25] iv_offset=22"
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=148 klen=16"; expected_error=-22, cfg="random:
inplace use_digest nosimd src_divs=[100.0%@+22] iv_offset=50"
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=168 klen=16"; expected_error=-22, cfg="random:
use_digest nosimd src_divs=[76.11%@alignmask+18, 13.8%@+4056,
4.57%@+3984, 5.36%@+506, 0.68%@+3989, 0.17%@+1620, 0.3%@+4025] iv_offset=27"
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=33 klen=16"; expected_error=-22, cfg="random:
may_sleep use_digest src_divs=[97.79%@+20, 2.21%@+4016] iv_offset=38"
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=202 klen=16"; expected_error=-22, cfg="random:
inplace use_final nosimd src_divs=[<reimport,nosimd>100.0%@+15]
iv_offset=44"
alg: skcipher: ecb-aes-geode encryption unexpectedly succeeded on test
vector "random: len=60 klen=16"; expected_error=-22, cfg="random:
use_digest src_divs=[83.68%@+1899, 7.27%@alignmask+1670, 5.73%@+11,
3.32%@+3985]"
Regards, Gert