Skip to contentSkip to conversation

lkdtm: update block layer crashpoints

PATCH In review Kevin Mitchell 4 participants 9 messages Aug 19, 2021 – Aug 24, 2021

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

v2 cover lkdtm: update block layer crashpoints

This is v2 of https://lkml.org/lkml/2021/8/16/1497.

These patches update the lkdtm crashpoints in the block layer that have been moved or removed. In response to feedback, I've renamed the SCSI_DISPATCH_CMD crashpoint to SCSI_QUEUE_RQ to correspond to the new function that it hooks into. I have also added a commit to remove IDE_CORE_CP.

#1 lore raw

PATCH v2 1/2 lkdtm: replace SCSI_DISPATCH_CMD with SCSI_QUEUE_RQ

When scsi_dispatch_cmd was moved to scsi_lib.c and made static, some compilers (i.e., at least gcc 8.4.0) decided to compile this inline. This is a problem for lkdtm.ko, which inserted a kprobe on this function for the SCSI_DISPATCH_CMD crashpoint.

Move this crashpoint one function up the call chain to scsi_queue_rq. Though this is also a static function, it should never be inlined because it is assigned as a structure entry. Therefore, kprobe_register should always be able to find it.

Fixes 82042a2cdb55 ("scsi: move scsi_dispatch_cmd to scsi_lib.c")
---
 Documentation/fault-injection/provoke-crashes.rst | 2 +-
 drivers/misc/lkdtm/core.c                         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/fault-injection/provoke-crashes.rst +1 -1
index a20ba5d93932..18de17354206 100644
@@ -29,7 +29,7 @@ recur_count
 cpoint_name
 	Where in the kernel to trigger the action. It can be
 	one of INT_HARDWARE_ENTRY, INT_HW_IRQ_EN, INT_TASKLET_ENTRY,
-	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_DISPATCH_CMD,
+	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ,
 	IDE_CORE_CP, or DIRECT
 
 cpoint_type
drivers/misc/lkdtm/core.c +1 -1
index 9dda87c6b54a..016cb0b150fc 100644
@@ -82,7 +82,7 @@ static struct crashpoint crashpoints[] = {
 	CRASHPOINT("FS_DEVRW",		 "ll_rw_block"),
 	CRASHPOINT("MEM_SWAPOUT",	 "shrink_inactive_list"),
 	CRASHPOINT("TIMERADD",		 "hrtimer_start"),
-	CRASHPOINT("SCSI_DISPATCH_CMD",	 "scsi_dispatch_cmd"),
+	CRASHPOINT("SCSI_QUEUE_RQ",	 "scsi_queue_rq"),
 	CRASHPOINT("IDE_CORE_CP",	 "generic_ide_ioctl"),
 #endif
 };
Signature · 1 line
2.32.0
Acked-by on v2 1/2
#2 lore raw

Re: [PATCH v2 1/2] lkdtm: replace SCSI_DISPATCH_CMD with SCSI_QUEUE_RQ

Quoted 5 lines · Kevin Mitchell

When scsi_dispatch_cmd was moved to scsi_lib.c and made static, some compilers (i.e., at least gcc 8.4.0) decided to compile this inline. This is a problem for lkdtm.ko, which inserted a kprobe on this function for the SCSI_DISPATCH_CMD crashpoint.

Quoted 7 lines

Move this crashpoint one function up the call chain to scsi_queue_rq. Though this is also a static function, it should never be inlined because it is assigned as a structure entry. Therefore, kprobe_register should always be able to find it.

Fixes 82042a2cdb55 ("scsi: move scsi_dispatch_cmd to scsi_lib.c")

Thanks!

-Kees

Quoted 34 lines
---
 Documentation/fault-injection/provoke-crashes.rst | 2 +-
 drivers/misc/lkdtm/core.c                         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/fault-injection/provoke-crashes.rst +1 -1
index a20ba5d93932..18de17354206 100644
@@ -29,7 +29,7 @@ recur_count
 cpoint_name
 	Where in the kernel to trigger the action. It can be
 	one of INT_HARDWARE_ENTRY, INT_HW_IRQ_EN, INT_TASKLET_ENTRY,
-	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_DISPATCH_CMD,
+	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ,
 	IDE_CORE_CP, or DIRECT
 
 cpoint_type
drivers/misc/lkdtm/core.c +1 -1
index 9dda87c6b54a..016cb0b150fc 100644
@@ -82,7 +82,7 @@ static struct crashpoint crashpoints[] = {
 	CRASHPOINT("FS_DEVRW",		 "ll_rw_block"),
 	CRASHPOINT("MEM_SWAPOUT",	 "shrink_inactive_list"),
 	CRASHPOINT("TIMERADD",		 "hrtimer_start"),
-	CRASHPOINT("SCSI_DISPATCH_CMD",	 "scsi_dispatch_cmd"),
+	CRASHPOINT("SCSI_QUEUE_RQ",	 "scsi_queue_rq"),
 	CRASHPOINT("IDE_CORE_CP",	 "generic_ide_ioctl"),
 #endif
 };
Signature · 1 line
2.32.0
Signature · 1 line
Kees Cook
#4 lore raw

PATCH v2 2/2 lkdtm: remove IDE_CORE_CP crashpoint

In reply to Kevin Mitchell

With the removal of the legacy IDE driver in kb7fb14d3ac63 ("ide: remove the legacy ide driver"), this crashpoint no longer points to a valid function.

---
 Documentation/fault-injection/provoke-crashes.rst | 3 +--
 drivers/misc/lkdtm/core.c                         | 1 -
 2 files changed, 1 insertion(+), 3 deletions(-)
Documentation/fault-injection/provoke-crashes.rst +1 -2
index 18de17354206..3abe84225613 100644
@@ -29,8 +29,7 @@ recur_count
 cpoint_name
 	Where in the kernel to trigger the action. It can be
 	one of INT_HARDWARE_ENTRY, INT_HW_IRQ_EN, INT_TASKLET_ENTRY,
-	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ,
-	IDE_CORE_CP, or DIRECT
+	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ, or DIRECT.
 
 cpoint_type
 	Indicates the action to be taken on hitting the crash point.
drivers/misc/lkdtm/core.c +0 -1
index 016cb0b150fc..e50e7bfc4674 100644
@@ -83,7 +83,6 @@ static struct crashpoint crashpoints[] = {
 	CRASHPOINT("MEM_SWAPOUT",	 "shrink_inactive_list"),
 	CRASHPOINT("TIMERADD",		 "hrtimer_start"),
 	CRASHPOINT("SCSI_QUEUE_RQ",	 "scsi_queue_rq"),
-	CRASHPOINT("IDE_CORE_CP",	 "generic_ide_ioctl"),
 #endif
 };
 
Signature · 1 line
2.32.0
Acked-by on v2 2/2
#5 lore raw

Re: [PATCH v2 2/2] lkdtm: remove IDE_CORE_CP crashpoint

Quoted 5 lines · Kevin Mitchell

With the removal of the legacy IDE driver in kb7fb14d3ac63 ("ide: remove the legacy ide driver"), this crashpoint no longer points to a valid function.

Hah, whoops. Yes. :)

Thanks!

-Kees

Quoted 34 lines
---
 Documentation/fault-injection/provoke-crashes.rst | 3 +--
 drivers/misc/lkdtm/core.c                         | 1 -
 2 files changed, 1 insertion(+), 3 deletions(-)
Documentation/fault-injection/provoke-crashes.rst +1 -2
index 18de17354206..3abe84225613 100644
@@ -29,8 +29,7 @@ recur_count
 cpoint_name
 	Where in the kernel to trigger the action. It can be
 	one of INT_HARDWARE_ENTRY, INT_HW_IRQ_EN, INT_TASKLET_ENTRY,
-	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ,
-	IDE_CORE_CP, or DIRECT
+	FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ, or DIRECT.
 
 cpoint_type
 	Indicates the action to be taken on hitting the crash point.
drivers/misc/lkdtm/core.c +0 -1
index 016cb0b150fc..e50e7bfc4674 100644
@@ -83,7 +83,6 @@ static struct crashpoint crashpoints[] = {
 	CRASHPOINT("MEM_SWAPOUT",	 "shrink_inactive_list"),
 	CRASHPOINT("TIMERADD",		 "hrtimer_start"),
 	CRASHPOINT("SCSI_QUEUE_RQ",	 "scsi_queue_rq"),
-	CRASHPOINT("IDE_CORE_CP",	 "generic_ide_ioctl"),
 #endif
 };
 
Signature · 1 line
2.32.0
Signature · 1 line
Kees Cook
#7 lore raw
In reply to Kevin Mitchell

Hi Greg,

You weren't explicitly in the To: for this series (only Cc), but are you able to pick these up as well? I can resend them as a pull request if you need.

Thanks!

-Kees

Quoted 8 lines · Kevin Mitchell

This is v2 of https://lkml.org/lkml/2021/8/16/1497.

These patches update the lkdtm crashpoints in the block layer that have been moved or removed. In response to feedback, I've renamed the SCSI_DISPATCH_CMD crashpoint to SCSI_QUEUE_RQ to correspond to the new function that it hooks into. I have also added a commit to remove IDE_CORE_CP.

Signature · 1 line
Kees Cook
Reviewed-by on the v2 series
#8 lore raw
In reply to Kevin Mitchell

Kevin,

Quoted 7 lines

This is v2 of https://lkml.org/lkml/2021/8/16/1497.

These patches update the lkdtm crashpoints in the block layer that have been moved or removed. In response to feedback, I've renamed the SCSI_DISPATCH_CMD crashpoint to SCSI_QUEUE_RQ to correspond to the new function that it hooks into. I have also added a commit to remove IDE_CORE_CP.

These look good to me.

Signature · 1 line
Martin K. Petersen	Oracle Linux Engineering