All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] bio-integrity: Fix regression if profile verify_fn is NULL
@ 2017-08-02 12:27 Milan Broz
  2017-08-02 12:55 ` Christoph Hellwig
  2017-08-06 13:30 ` [RFC PATCH] bio-integrity: Fix regression if profile verify_fn is NULL Thorsten Leemhuis
  0 siblings, 2 replies; 15+ messages in thread
From: Milan Broz @ 2017-08-02 12:27 UTC (permalink / raw)
  To: linux-block; +Cc: hch, axboe, mpatocka, dm-devel, Milan Broz

In dm-integrity target we register integrity profile that have
both generate_fn and verify_fn callbacks set to NULL.

This is used if dm-integrity is stacked under a dm-crypt device
for authenticated encryption (integrity payload contains authentication
tag and IV seed).

In this case the verification is done through own crypto API
processing inside dm-crypt; integrity profile is only holder
of these data. (And memory is owned by dm-crypt as well.)

After the commit (and previous changes)
  Commit 7c20f11680a441df09de7235206f70115fbf6290
  Author: Christoph Hellwig <hch@lst.de>
  Date:   Mon Jul 3 16:58:43 2017 -0600

    bio-integrity: stop abusing bi_end_io

we get this crash:

: BUG: unable to handle kernel NULL pointer dereference at   (null)
: IP:   (null)
: *pde = 00000000
...
:
: Workqueue: kintegrityd bio_integrity_verify_fn
: task: f48ae180 task.stack: f4b5c000
: EIP:   (null)
: EFLAGS: 00210286 CPU: 0
: EAX: f4b5debc EBX: 00001000 ECX: 00000001 EDX: 00000000
: ESI: 00001000 EDI: ed25f000 EBP: f4b5dee8 ESP: f4b5dea4
:  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
: CR0: 80050033 CR2: 00000000 CR3: 32823000 CR4: 001406d0
: Call Trace:
:  ? bio_integrity_process+0xe3/0x1e0
:  bio_integrity_verify_fn+0xea/0x150
:  process_one_work+0x1c7/0x5c0
:  worker_thread+0x39/0x380
:  kthread+0xd6/0x110
:  ? process_one_work+0x5c0/0x5c0
:  ? kthread_worker_fn+0x100/0x100
:  ? kthread_worker_fn+0x100/0x100
:  ret_from_fork+0x19/0x24
: Code:  Bad EIP value.
: EIP:   (null) SS:ESP: 0068:f4b5dea4
: CR2: 0000000000000000

Patch just skip the whole verify workqueue if verify_fn is set to NULL.

Signed-off-by: Milan Broz <gmazyland@gmail.com>
---
 block/bio-integrity.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 83e92beb3c9f..b9d1580bfc13 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -387,7 +387,9 @@ static void bio_integrity_verify_fn(struct work_struct *work)
  */
 bool __bio_integrity_endio(struct bio *bio)
 {
-	if (bio_op(bio) == REQ_OP_READ && !bio->bi_status) {
+	struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
+
+	if (bi->profile->verify_fn && bio_op(bio) == REQ_OP_READ && !bio->bi_status) {
 		struct bio_integrity_payload *bip = bio_integrity(bio);
 
 		INIT_WORK(&bip->bip_work, bio_integrity_verify_fn);
-- 
2.13.3

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2017-08-09 14:07 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-02 12:27 [RFC PATCH] bio-integrity: Fix regression if profile verify_fn is NULL Milan Broz
2017-08-02 12:55 ` Christoph Hellwig
2017-08-02 13:15   ` Milan Broz
2017-08-02 14:11     ` Martin K. Petersen
2017-08-02 15:24       ` Milan Broz
2017-08-03 14:10   ` [PATCH] bio-integrity: revert "stop abusing bi_end_io" Mikulas Patocka
2017-08-05 13:44     ` Christoph Hellwig
2017-08-05 14:46       ` Mikulas Patocka
2017-08-05 20:25         ` Martin K. Petersen
2017-08-06 18:49           ` Mikulas Patocka
2017-08-07 15:48             ` Martin K. Petersen
2017-08-08  6:47               ` Milan Broz
2017-08-05 20:19       ` Martin K. Petersen
2017-08-09 14:07         ` Christoph Hellwig
2017-08-06 13:30 ` [RFC PATCH] bio-integrity: Fix regression if profile verify_fn is NULL Thorsten Leemhuis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.