1*4882a593SmuzhiyunFrom 0168696f95b5c610c3861ced8ef98accd1a83b91 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Benjamin Marzinski <bmarzins@redhat.com> 3*4882a593SmuzhiyunDate: Tue, 27 Sep 2022 12:36:37 +0200 4*4882a593SmuzhiyunSubject: [PATCH] multipathd: ignore duplicated multipathd command keys 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunmultipath adds rather than or-s the values of command keys. Fix this. 7*4882a593SmuzhiyunAlso, return an invalid fingerprint if a key is used more than once. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunCVE: CVE-2022-41974 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunReferences: 12*4882a593Smuzhiyunhttps://nvd.nist.gov/vuln/detail/CVE-2022-41974 13*4882a593Smuzhiyunhttps://github.com/opensvc/multipath-tools/issues/59 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunUpstream-Status: Backport 16*4882a593Smuzhiyun[https://github.com/openSUSE/multipath-tools/commit/fbbf280a0e26026c19879d938ebb2a8200b6357c] 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunSigned-off-by: Benjamin Marzinski <bmarzins@redhat.com> 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunSigned-off-by: Yogita Urade <yogita.urade@windriver.com> 21*4882a593Smuzhiyun--- 22*4882a593Smuzhiyun multipathd/cli.c | 8 ++-- 23*4882a593Smuzhiyun multipathd/main.c | 104 +++++++++++++++++++++++----------------------- 24*4882a593Smuzhiyun 2 files changed, 57 insertions(+), 55 deletions(-) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyundiff --git a/multipathd/cli.c b/multipathd/cli.c 27*4882a593Smuzhiyunindex 800c0fbe..0a266761 100644 28*4882a593Smuzhiyun--- a/multipathd/cli.c 29*4882a593Smuzhiyun+++ b/multipathd/cli.c 30*4882a593Smuzhiyun@@ -336,9 +336,11 @@ fingerprint(vector vec) 31*4882a593Smuzhiyun if (!vec) 32*4882a593Smuzhiyun return 0; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun- vector_foreach_slot(vec, kw, i) 35*4882a593Smuzhiyun- fp += kw->code; 36*4882a593Smuzhiyun- 37*4882a593Smuzhiyun+ vector_foreach_slot(vec, kw, i) { 38*4882a593Smuzhiyun+ if (fp & kw->code) 39*4882a593Smuzhiyun+ return (uint64_t)-1; 40*4882a593Smuzhiyun+ fp |= kw->code; 41*4882a593Smuzhiyun+ } 42*4882a593Smuzhiyun return fp; 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyundiff --git a/multipathd/main.c b/multipathd/main.c 46*4882a593Smuzhiyunindex 8baf9abe..975287d2 100644 47*4882a593Smuzhiyun--- a/multipathd/main.c 48*4882a593Smuzhiyun+++ b/multipathd/main.c 49*4882a593Smuzhiyun@@ -1522,61 +1522,61 @@ uxlsnrloop (void * ap) 50*4882a593Smuzhiyun /* Tell main thread that thread has started */ 51*4882a593Smuzhiyun post_config_state(DAEMON_CONFIGURE); 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun- set_handler_callback(LIST+PATHS, cli_list_paths); 54*4882a593Smuzhiyun- set_handler_callback(LIST+PATHS+FMT, cli_list_paths_fmt); 55*4882a593Smuzhiyun- set_handler_callback(LIST+PATHS+RAW+FMT, cli_list_paths_raw); 56*4882a593Smuzhiyun- set_handler_callback(LIST+PATH, cli_list_path); 57*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS, cli_list_maps); 58*4882a593Smuzhiyun- set_handler_callback(LIST+STATUS, cli_list_status); 59*4882a593Smuzhiyun- set_unlocked_handler_callback(LIST+DAEMON, cli_list_daemon); 60*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+STATUS, cli_list_maps_status); 61*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+STATS, cli_list_maps_stats); 62*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+FMT, cli_list_maps_fmt); 63*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+RAW+FMT, cli_list_maps_raw); 64*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+TOPOLOGY, cli_list_maps_topology); 65*4882a593Smuzhiyun- set_handler_callback(LIST+TOPOLOGY, cli_list_maps_topology); 66*4882a593Smuzhiyun- set_handler_callback(LIST+MAPS+JSON, cli_list_maps_json); 67*4882a593Smuzhiyun- set_handler_callback(LIST+MAP+TOPOLOGY, cli_list_map_topology); 68*4882a593Smuzhiyun- set_handler_callback(LIST+MAP+FMT, cli_list_map_fmt); 69*4882a593Smuzhiyun- set_handler_callback(LIST+MAP+RAW+FMT, cli_list_map_fmt); 70*4882a593Smuzhiyun- set_handler_callback(LIST+MAP+JSON, cli_list_map_json); 71*4882a593Smuzhiyun- set_handler_callback(LIST+CONFIG+LOCAL, cli_list_config_local); 72*4882a593Smuzhiyun- set_handler_callback(LIST+CONFIG, cli_list_config); 73*4882a593Smuzhiyun- set_handler_callback(LIST+BLACKLIST, cli_list_blacklist); 74*4882a593Smuzhiyun- set_handler_callback(LIST+DEVICES, cli_list_devices); 75*4882a593Smuzhiyun- set_handler_callback(LIST+WILDCARDS, cli_list_wildcards); 76*4882a593Smuzhiyun- set_handler_callback(RESET+MAPS+STATS, cli_reset_maps_stats); 77*4882a593Smuzhiyun- set_handler_callback(RESET+MAP+STATS, cli_reset_map_stats); 78*4882a593Smuzhiyun- set_handler_callback(ADD+PATH, cli_add_path); 79*4882a593Smuzhiyun- set_handler_callback(DEL+PATH, cli_del_path); 80*4882a593Smuzhiyun- set_handler_callback(ADD+MAP, cli_add_map); 81*4882a593Smuzhiyun- set_handler_callback(DEL+MAP, cli_del_map); 82*4882a593Smuzhiyun- set_handler_callback(SWITCH+MAP+GROUP, cli_switch_group); 83*4882a593Smuzhiyun+ set_handler_callback(LIST|PATHS, cli_list_paths); 84*4882a593Smuzhiyun+ set_handler_callback(LIST|PATHS|FMT, cli_list_paths_fmt); 85*4882a593Smuzhiyun+ set_handler_callback(LIST|PATHS|RAW|FMT, cli_list_paths_raw); 86*4882a593Smuzhiyun+ set_handler_callback(LIST|PATH, cli_list_path); 87*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS, cli_list_maps); 88*4882a593Smuzhiyun+ set_handler_callback(LIST|STATUS, cli_list_status); 89*4882a593Smuzhiyun+ set_unlocked_handler_callback(LIST|DAEMON, cli_list_daemon); 90*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|STATUS, cli_list_maps_status); 91*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|STATS, cli_list_maps_stats); 92*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|FMT, cli_list_maps_fmt); 93*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|RAW|FMT, cli_list_maps_raw); 94*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|TOPOLOGY, cli_list_maps_topology); 95*4882a593Smuzhiyun+ set_handler_callback(LIST|TOPOLOGY, cli_list_maps_topology); 96*4882a593Smuzhiyun+ set_handler_callback(LIST|MAPS|JSON, cli_list_maps_json); 97*4882a593Smuzhiyun+ set_handler_callback(LIST|MAP|TOPOLOGY, cli_list_map_topology); 98*4882a593Smuzhiyun+ set_handler_callback(LIST|MAP|FMT, cli_list_map_fmt); 99*4882a593Smuzhiyun+ set_handler_callback(LIST|MAP|RAW|FMT, cli_list_map_fmt); 100*4882a593Smuzhiyun+ set_handler_callback(LIST|MAP|JSON, cli_list_map_json); 101*4882a593Smuzhiyun+ set_handler_callback(LIST|CONFIG|LOCAL, cli_list_config_local); 102*4882a593Smuzhiyun+ set_handler_callback(LIST|CONFIG, cli_list_config); 103*4882a593Smuzhiyun+ set_handler_callback(LIST|BLACKLIST, cli_list_blacklist); 104*4882a593Smuzhiyun+ set_handler_callback(LIST|DEVICES, cli_list_devices); 105*4882a593Smuzhiyun+ set_handler_callback(LIST|WILDCARDS, cli_list_wildcards); 106*4882a593Smuzhiyun+ set_handler_callback(RESET|MAPS|STATS, cli_reset_maps_stats); 107*4882a593Smuzhiyun+ set_handler_callback(RESET|MAP|STATS, cli_reset_map_stats); 108*4882a593Smuzhiyun+ set_handler_callback(ADD|PATH, cli_add_path); 109*4882a593Smuzhiyun+ set_handler_callback(DEL|PATH, cli_del_path); 110*4882a593Smuzhiyun+ set_handler_callback(ADD|MAP, cli_add_map); 111*4882a593Smuzhiyun+ set_handler_callback(DEL|MAP, cli_del_map); 112*4882a593Smuzhiyun+ set_handler_callback(SWITCH|MAP|GROUP, cli_switch_group); 113*4882a593Smuzhiyun set_unlocked_handler_callback(RECONFIGURE, cli_reconfigure); 114*4882a593Smuzhiyun- set_handler_callback(SUSPEND+MAP, cli_suspend); 115*4882a593Smuzhiyun- set_handler_callback(RESUME+MAP, cli_resume); 116*4882a593Smuzhiyun- set_handler_callback(RESIZE+MAP, cli_resize); 117*4882a593Smuzhiyun- set_handler_callback(RELOAD+MAP, cli_reload); 118*4882a593Smuzhiyun- set_handler_callback(RESET+MAP, cli_reassign); 119*4882a593Smuzhiyun- set_handler_callback(REINSTATE+PATH, cli_reinstate); 120*4882a593Smuzhiyun- set_handler_callback(FAIL+PATH, cli_fail); 121*4882a593Smuzhiyun- set_handler_callback(DISABLEQ+MAP, cli_disable_queueing); 122*4882a593Smuzhiyun- set_handler_callback(RESTOREQ+MAP, cli_restore_queueing); 123*4882a593Smuzhiyun- set_handler_callback(DISABLEQ+MAPS, cli_disable_all_queueing); 124*4882a593Smuzhiyun- set_handler_callback(RESTOREQ+MAPS, cli_restore_all_queueing); 125*4882a593Smuzhiyun+ set_handler_callback(SUSPEND|MAP, cli_suspend); 126*4882a593Smuzhiyun+ set_handler_callback(RESUME|MAP, cli_resume); 127*4882a593Smuzhiyun+ set_handler_callback(RESIZE|MAP, cli_resize); 128*4882a593Smuzhiyun+ set_handler_callback(RELOAD|MAP, cli_reload); 129*4882a593Smuzhiyun+ set_handler_callback(RESET|MAP, cli_reassign); 130*4882a593Smuzhiyun+ set_handler_callback(REINSTATE|PATH, cli_reinstate); 131*4882a593Smuzhiyun+ set_handler_callback(FAIL|PATH, cli_fail); 132*4882a593Smuzhiyun+ set_handler_callback(DISABLEQ|MAP, cli_disable_queueing); 133*4882a593Smuzhiyun+ set_handler_callback(RESTOREQ|MAP, cli_restore_queueing); 134*4882a593Smuzhiyun+ set_handler_callback(DISABLEQ|MAPS, cli_disable_all_queueing); 135*4882a593Smuzhiyun+ set_handler_callback(RESTOREQ|MAPS, cli_restore_all_queueing); 136*4882a593Smuzhiyun set_unlocked_handler_callback(QUIT, cli_quit); 137*4882a593Smuzhiyun set_unlocked_handler_callback(SHUTDOWN, cli_shutdown); 138*4882a593Smuzhiyun- set_handler_callback(GETPRSTATUS+MAP, cli_getprstatus); 139*4882a593Smuzhiyun- set_handler_callback(SETPRSTATUS+MAP, cli_setprstatus); 140*4882a593Smuzhiyun- set_handler_callback(UNSETPRSTATUS+MAP, cli_unsetprstatus); 141*4882a593Smuzhiyun- set_handler_callback(FORCEQ+DAEMON, cli_force_no_daemon_q); 142*4882a593Smuzhiyun- set_handler_callback(RESTOREQ+DAEMON, cli_restore_no_daemon_q); 143*4882a593Smuzhiyun- set_handler_callback(GETPRKEY+MAP, cli_getprkey); 144*4882a593Smuzhiyun- set_handler_callback(SETPRKEY+MAP+KEY, cli_setprkey); 145*4882a593Smuzhiyun- set_handler_callback(UNSETPRKEY+MAP, cli_unsetprkey); 146*4882a593Smuzhiyun- set_handler_callback(SETMARGINAL+PATH, cli_set_marginal); 147*4882a593Smuzhiyun- set_handler_callback(UNSETMARGINAL+PATH, cli_unset_marginal); 148*4882a593Smuzhiyun- set_handler_callback(UNSETMARGINAL+MAP, cli_unset_all_marginal); 149*4882a593Smuzhiyun+ set_handler_callback(GETPRSTATUS|MAP, cli_getprstatus); 150*4882a593Smuzhiyun+ set_handler_callback(SETPRSTATUS|MAP, cli_setprstatus); 151*4882a593Smuzhiyun+ set_handler_callback(UNSETPRSTATUS|MAP, cli_unsetprstatus); 152*4882a593Smuzhiyun+ set_handler_callback(FORCEQ|DAEMON, cli_force_no_daemon_q); 153*4882a593Smuzhiyun+ set_handler_callback(RESTOREQ|DAEMON, cli_restore_no_daemon_q); 154*4882a593Smuzhiyun+ set_handler_callback(GETPRKEY|MAP, cli_getprkey); 155*4882a593Smuzhiyun+ set_handler_callback(SETPRKEY|MAP|KEY, cli_setprkey); 156*4882a593Smuzhiyun+ set_handler_callback(UNSETPRKEY|MAP, cli_unsetprkey); 157*4882a593Smuzhiyun+ set_handler_callback(SETMARGINAL|PATH, cli_set_marginal); 158*4882a593Smuzhiyun+ set_handler_callback(UNSETMARGINAL|PATH, cli_unset_marginal); 159*4882a593Smuzhiyun+ set_handler_callback(UNSETMARGINAL|MAP, cli_unset_all_marginal); 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun umask(077); 162*4882a593Smuzhiyun uxsock_listen(&uxsock_trigger, ux_sock, ap); 163*4882a593Smuzhiyun-- 164*4882a593Smuzhiyun2.31.1 165