[Bug 218597] [CRYPTODEV] spurious wakeup and synchronisation problem
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Wed Apr 12 16:07:03 UTC 2017
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218597
Bug ID: 218597
Summary: [CRYPTODEV] spurious wakeup and synchronisation
problem
Product: Base System
Version: CURRENT
Hardware: Any
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: kern
Assignee: freebsd-bugs at FreeBSD.org
Reporter: alexandre.martins at stormshield.eu
Created attachment 181725
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=181725&action=edit
proposed patch
I using a dual core ARMADA 38X platform that contains a CESA module to
accelerate cryptography operations.
I have some crashes when using the cryptodev through OpenSSL.
The crash only happen when the following conditions are met:
- Multi-core system is used
- Hardware acceleration is used
- Hardware acceleration perform an interruption to signal the operations
completion
That are the scenario, first:
- A process ask a cryptographic operation
- The crypto operation is send to the CESA
- msleep is called, but the process seems to be migrated on another CPU, and
msleep return immediately (spurious wakeup)
(I puted a KASSERT that check if the CRYPTO_F_DONE is present and it rise)
- The operation looks like complete and memory is freed
- The CESA performs the cryptographic operation on the freed memory that may
cause corruption in some other parts of the kernel.
Second:
- The call to crypto_dispatch is done, but the scheduler prempt the process
before the lock on ces->lock is done
- The CESA perform the operation and crypto_done is called by the ithread
- The flag CRYPTO_F_DONE is put and scheduler preempt the ithread
- The user process continue, take the lock and check the flag, that is
present, and doesn't call msleep.
- It free the memory, and return to the userland
- The ithread is resumed and calls the callbacks that crash by accessing the
freed memory.
I attach my proposed patch to fix that issue
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list