Bug 2145225
Summary: | multipath doesn't verify the argument count in config option strings it passes to the kernel | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 9 | Reporter: | Lin Li <lilin> |
Component: | device-mapper-multipath | Assignee: | Ben Marzinski <bmarzins> |
Status: | CLOSED ERRATA | QA Contact: | Lin Li <lilin> |
Severity: | medium | Docs Contact: | |
Priority: | unspecified | ||
Version: | 9.2 | CC: | agk, bmarzins, heinzm, msnitzer, prajnoha, zkabelac |
Target Milestone: | rc | Keywords: | Triaged |
Target Release: | 9.2 | ||
Hardware: | x86_64 | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | device-mapper-multipath-0.8.7-17.el9 | Doc Type: | Bug Fix |
Doc Text: |
Cause: Multipath doesn't verify that the argument count in the "features", "path_selector", and "hardware_handler" option strings it passes to the kernel. If users don't match the count to the actual number of arguments, the kernel will fail to parse the device table
Consequence: Multipath will be unable to create or reload devices with an incorrect argument count, and will not warn users what the problem is.
Fix: multipath now verifies the argument count of configuration strings, and warns users when the count doesn't match the number of arguments.
Result: Users now are notified why their devices aren't created or reloaded, when they have an invalid argument count in their configuration.
|
Story Points: | --- |
Clone Of: | Environment: | ||
Last Closed: | 2023-05-09 08:14:07 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
Lin Li
2022-11-23 14:56:36 UTC
I'm not sure that multipath should validate the string arguments that it passes directly to the kernel. This would cause multipath to be unable to use new device-mapper capabilities, without updating the userspace tools. These patches are unlikely to be acceptable upstream, where multipath has to work correctly on a variety of kernels. But what it should do is make sure that the argument count matches the actual number of arguments. If this is off, it messes up the kernel's table parsing, and causes it fail with useless error messages. I'm using this bug to make multipath validate the argument count in the "features", "hardware_handler", and "path_selector" configuration options. In the values for each of those options, multipath will make sure that the count argument matches the number of arguments that follow it. Verified on device-mapper-multipath-0.8.7-17.el9 [root@storageqe-25 ~]# rpm -qa | grep multipath device-mapper-multipath-libs-0.8.7-17.el9.x86_64 device-mapper-multipath-0.8.7-17.el9.x86_64 [root@storageqe-25 ~]# multipath -ll 360a98000324669436c2b45666c567858 dm-3 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 7:0:1:0 sdf 8:80 active ready running | `- 8:0:1:0 sdn 8:208 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 7:0:0:0 sdb 8:16 active ready running `- 8:0:0:0 sdj 8:144 active ready running 360a98000324669436c2b45666c56785a dm-4 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 7:0:1:1 sdg 8:96 active ready running | `- 8:0:1:1 sdo 8:224 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 7:0:0:1 sdc 8:32 active ready running `- 8:0:0:1 sdk 8:160 active ready running 360a98000324669436c2b45666c567861 dm-5 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 7:0:1:2 sdh 8:112 active ready running | `- 8:0:1:2 sdp 8:240 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 7:0:0:2 sdd 8:48 active ready running `- 8:0:0:2 sdl 8:176 active ready running 360a98000324669436c2b45666c567863 dm-6 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 7:0:1:3 sdi 8:128 active ready running | `- 8:0:1:3 sdq 65:0 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 7:0:0:3 sde 8:64 active ready running `- 8:0:0:3 sdm 8:192 active ready running Edit /etc/multipath.conf [root@storageqe-25 ~]# cat /etc/multipath.conf # device-mapper-multipath configuration file # For a complete list of the default configuration values, run either: # # multipath -t # or # # multipathd show config # For a list of configuration options with descriptions, see the # multipath.conf man page. defaults { user_friendly_names yes find_multipaths yes } blacklist { } devices { device { vendor "NETAPP" product "LUN" path_grouping_policy multibus path_checker tur features "3 no_path_retry queue pg_init_retries 50" <-------------- hardware_handler 0 prio ontap failback immediate rr_weight uniform rr_min_io 128 flush_on_last_del yes dev_loss_tmo infinity retain_attached_hw_handler yes detect_prio yes } } [root@storageqe-25 ~]# service multipathd reload Redirecting to /bin/systemctl reload multipathd.service [root@storageqe-25 ~]# multipath -ll 16455.179235 | /etc/multipath.conf line 25, invalid argument count for features:, got '3' expected '4' <---------- 360a98000324669436c2b45666c567858 dm-3 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw `-+- policy='service-time 0' prio=30 status=active |- 7:0:0:0 sdb 8:16 active ready running |- 7:0:1:0 sdf 8:80 active ready running |- 8:0:0:0 sdj 8:144 active ready running `- 8:0:1:0 sdn 8:208 active ready running 360a98000324669436c2b45666c56785a dm-4 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw `-+- policy='service-time 0' prio=30 status=active |- 7:0:0:1 sdc 8:32 active ready running |- 7:0:1:1 sdg 8:96 active ready running |- 8:0:0:1 sdk 8:160 active ready running `- 8:0:1:1 sdo 8:224 active ready running 360a98000324669436c2b45666c567861 dm-5 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw `-+- policy='service-time 0' prio=30 status=active |- 7:0:0:2 sdd 8:48 active ready running |- 7:0:1:2 sdh 8:112 active ready running |- 8:0:0:2 sdl 8:176 active ready running `- 8:0:1:2 sdp 8:240 active ready running 360a98000324669436c2b45666c567863 dm-6 NETAPP,LUN size=2.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw `-+- policy='service-time 0' prio=30 status=active |- 7:0:0:3 sde 8:64 active ready running |- 7:0:1:3 sdi 8:128 active ready running |- 8:0:0:3 sdm 8:192 active ready running `- 8:0:1:3 sdq 65:0 active ready running Test result: Users now are notified why their devices aren't created or reloaded, when they have an invalid argument count in their configuration. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Moderate: device-mapper-multipath security and bug fix update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2023:2459 |