On 10 May 2019, at 9:45, Chris Mason wrote:

> On 10 May 2019, at 7:15, Johannes Thumshirn wrote:
>
>> Currently btrfs_csum_data() relied on the crc32c() wrapper around the 
>> crypto
>> framework for calculating the CRCs.
>>
>> As we have our own crypto_shash structure in the fs_info now, we can
>> directly call into the crypto framework without going trough the 
>> wrapper.
>
> It has been a while since I dug through the cryptoapi internals.  I 
> have one vague and somewhat unfounded concern, where we're defining 
> the disk format to be whatever is returned from looking up sha256 or 
> crc32c in the crypto tables.  I'm not really sure how to resolve this 
> since we obviously don't want our own sha256 implementation.
>
> I'm a little concerned about about btrfs_csum_data() and 
> btrfs_csum_final() below.  We're using two different 
> SHASH_DESC_ON_STACK() and then overwriting internals 
> (shash_desc_ctx()) with the assumption that whatever we're doing is 
> going to be the same as using the same shash_desc struct for both the 
> update and final calls.  I think we should be either using or adding a 
> helper to the crypto api for this.  We're digging too deep into 
> cryptoapi private structs with the current usage.

Looking at the callers of btrfs_csum_final() and btrfs_csum_data(), lets 
just pass the shash_desc from the callers.  That way you don't have to 
poke at memcpy and shash_desc_ctx().

I'm a little worried about stack usage (at least 360 bytes), but worst 
case we can do some percpu gymnastics.

-chris

Reply via email to