Bug 1283181
| Summary: | multipathd crash when admin try to remove non-multipath device | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | masanari iida <masanari_iida> | ||||
| Component: | device-mapper-multipath | Assignee: | Ben Marzinski <bmarzins> | ||||
| Status: | CLOSED ERRATA | QA Contact: | Lin Li <lilin> | ||||
| Severity: | medium | Docs Contact: | |||||
| Priority: | unspecified | ||||||
| Version: | 6.7 | CC: | agk, bmarzins, dwysocha, heinzm, lilin, msnitzer, prajnoha, prockai, rbalakri, zkabelac | ||||
| Target Milestone: | rc | ||||||
| Target Release: | --- | ||||||
| Hardware: | All | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | device-mapper-multipath-0.4.9.89.el6 | Doc Type: | Bug Fix | ||||
| Doc Text: |
Cause: Multipathd wasn't checking if a pointer was NULL before dereferencing it on a failed command line remove for a missing path device
Consequence: multipathd would crash if users tried to remove a path that it wasn't monitoring with the "multipathd del path" command
Fix: multipathd now checks if the pointer is NULL before dereferencing it.
Result: multipathd no longer crashed when users try to remove paths that are not being monitored.
|
Story Points: | --- | ||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2016-05-10 20:13:30 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: | |||||||
| Attachments: |
|
||||||
Created attachment 1096021 [details]
corefile of multipathd collected by abrt
Additional information Following commands also cause the multipathd to crash remove path sda (sda is not managed by multipathd.) remove path 8:48 (8:48 = /dev/sdc. It _is_ managed by multipathd.) del path 8:48 (8:48 = /dev/sdc. It _is_ managed by multipathd.) "del/remove path" with correct device (/dev/sdc or sdc) works fine. But "del/remove path" with any other word crash the multipathd. :( Program terminated with signal SIGSEGV, Segmentation fault.
#0 ev_remove_path (devname=0x7fcb88001fa0 "sda", vecs=0x1914c10,
del_sysdev=0x0) at main.c:595
595 main.c: No such file or directory.
[Current thread is 1 (LWP 1723)]
(gdb)
(gdb) info shared
From To Syms Read Shared Object Library
0x000000349e4077a0 0x000000349e436cf8 Yes (*) ./lib64/libdevmapper.so.1.02
0x000000349d814550 0x000000349d832af8 Yes ./lib64/libreadline.so.6
0x00000034a8006a30 0x00000034a801cec8 Yes ./lib64/libncurses.so.5
0x000000349c000de0 0x000000349c001998 Yes ./lib64/libdl.so.2
0x000000307680ec90 0x00000030768359b8 Yes ./lib64/libmultipath.so
0x0000003076c021b0 0x0000003076c05f58 Yes ./lib64/libmpathpersist.so.0
0x0000003076402910 0x0000003076412f78 Yes ./lib64/libgcc_s.so.1
0x000000349c805760 0x000000349c811148 Yes ./lib64/libpthread.so.0
0x000000349c41eaa0 0x000000349c5400cc Yes ./lib64/libc.so.6
0x000000349dc058d0 0x000000349dc15cb8 Yes ./lib64/libselinux.so.1
0x000000349e003e80 0x000000349e02e618 Yes ./lib64/libsepol.so.1
0x00000034a7002930 0x00000034a7009a78 Yes ./lib64/libudev.so.0
0x00000034ae40c840 0x00000034ae415c08 Yes ./lib64/libtinfo.so.5
0x000000349bc00b00 0x000000349bc19feb Yes ./lib64/ld-linux-x86-64.so.2
0x00007fcb8ebcfb50 0x00007fcb8ebd0478 Yes ./lib64/multipath/libcheckdirectio.so
0x00007fcb8e9ce570 0x00007fcb8e9ce721 Yes ./lib64/libaio.so.1
0x00007fcb8e7cd460 0x00007fcb8e7cd578 Yes ./lib64/multipath/libprioconst.so
(*): Shared library is missing debugging information.
(gdb) bt
#0 ev_remove_path (devname=0x7fcb88001fa0 "sda", vecs=0x1914c10,
del_sysdev=0x0) at main.c:595
#1 0x000000000040ac9d in parse_cmd (cmd=<optimized out>,
reply=0x7fcb8e7cbd80, len=0x7fcb8e7cbd9c, data=0x1914c10) at cli.c:407
#2 0x0000000000407fc3 in uxsock_trigger (
str=0x7fcb88001d10 "remove path sda", reply=0x7fcb8e7cbd80,
len=0x7fcb8e7cbd9c, trigger_data=<optimized out>) at main.c:718
#3 0x00000000004095d8 in uxsock_listen (
uxsock_trigger=0x407f70 <uxsock_trigger>, trigger_data=0x1914c10)
at uxlsnr.c:148
#4 0x0000000000405ddb in uxlsnrloop (ap=0x1914c10) at main.c:895
#5 0x000000349c807a51 in start_thread (arg=0x7fcb8e7cc700)
at pthread_create.c:301
#6 0x000000349c4e896d in clone ()
at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
Reproduced on device-mapper-multipath-0.4.9-87.el6 1). Configure multipath /dev/sda and /dev/sdb are a member of multipath. (iscsi device). /dev/sdc and /dev/sdd are not member of multipath. # multipath -ll mpathb (360fff19abdd9552f8a36e5355226ba27) dm-0 EQLOGIC,100E-00 size=50G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 3:0:0:0 sdb 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 0:0:0:0 sda 8:0 active ready running 2). # multipathd -k multipathd> list paths hcil dev dev_t pri dm_st chk_st dev_st next_check 3:0:0:0 sdb 8:16 1 active ready running XX........ 4/20 0:0:0:0 sda 8:0 1 active ready running X......... 3/20 multipathd> del path sdc # <= multipathd segv and automatically back to shell prompt. 3). # dmesg multipathd[2031]: segfault at 0 ip 0000000000408aff sp 00007f73e6759c00 error 6 in multipathd (deleted)[400000+10000] 4). check /var/log/messages Feb 24 04:03:43 storageqe-84 kernel: multipathd[2031]: segfault at 0 ip 0000000000408aff sp 00007f73e6759c00 error 6 in multipathd (deleted)[400000+10000] Feb 24 04:03:43 storageqe-84 abrt[53057]: File '/sbin/multipathd' seems to be deleted Feb 24 04:03:43 storageqe-84 abrt[53057]: Saved core dump of pid 2024 (/sbin/multipathd) to /var/spool/abrt/ccpp-2016-02-24-04:03:43-2024 (1945600 bytes) Verified on device-mapper-multipath-0.4.9-92.el6 1).1). Configure multipath /dev/sda and /dev/sdb are a member of multipath. (iscsi device). /dev/sdc and /dev/sdd are not member of multipath. # multipath -ll mpathb (360fff19abdd9552f8a36e5355226ba27) dm-0 EQLOGIC,100E-00 size=50G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 3:0:0:0 sdb 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 0:0:0:0 sda 8:0 active ready running 2).multipathd -k multipathd> list paths hcil dev dev_t pri dm_st chk_st dev_st next_check 3:0:0:0 sdb 8:16 1 active ready running XXXXXXXXX. 19/20 0:0:0:0 sda 8:0 1 active ready running XXXXXXXXX. 19/20 multipathd> del path sdc ok multipathd> multipathd no longer crashed 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, 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://rhn.redhat.com/errata/RHBA-2016-0777.html |
Description of problem: multipathd crash when admin try to remove non-multipath device from CLI. Version-Release number of selected component (if applicable): device-mapper-multipath-0.4.9-87.el6.x86_64 How reproducible: 100% Steps to Reproduce: 1.Configure multipath /dev/sda and /dev/sdb are not a member of multipath. /dev/sdc and /dev/sdd are member of multipath. (iscsi device). # multipath -ll mpatha (1IET 00010001) dm-0 IET,VIRTUAL-DISK size=204M features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 33:0:0:1 sdc 8:32 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 34:0:0:1 sdd 8:48 active ready running 2. # multipathd -k multipathd> list paths hcil dev dev_t pri dm_st chk_st dev_st next_check 33:0:0:1 sdc 8:32 1 active ready running XXXXXXXXX. 18/20 34:0:0:1 sdd 8:48 1 active ready running XXXXXXXXX. 19/20 multipathd> del path sda # <= multipathd segv and automatically back to shell prompt. 3. kernel: multipathd[6043]: segfault at 0 ip 0000000000408aff sp 00007f7614dc1c00 error 6 in multipathd[400000+10000] abrtd: Directory 'ccpp-2015-11-18-21:08:48-6041' creation detected abrt[6081]: Saved core dump of pid 6041 (/sbin/multipathd) to /var/spool/abrt/ccpp-2015-11-18-21:08:48-6041 (1957888 bytes) Actual results: multipathd segv Expected results: multipathd CLI interface return warning about non-multipath device remove. Additional info: # grep -v "#" /etc/multipath.conf defaults { user_friendly_names yes } blacklist { devnode "^(sda|sdb)[0-9]*" } blacklist_exceptions { wwid 00010001 } Business impact: none