summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-01-09 12:46:11 +0100
committerAleksander Morgado <aleksander@aleksander.es>2020-02-12 11:00:47 +0100
commitfc47fa7fa3f3529744e681953300f4b4bd10e5d1 (patch)
treed84ef63cb83ad217820e3d2da80c8ec42b376720
parente8d81836cb346af259ef26790595e77588c6cf6b (diff)
base-sim: don't allow sending PIN/PUK if not required
This avoids issues when e.g. sending SIM-PIN while the modem is already unlocked or when SIM-PIN is not enabled. Under those conditions, the needlessly sent SIM-PIN unlock attempt may fail while libmm-glib/mmcli reports a successful operation. E.g.: # mmcli --sim=/org/freedesktop/ModemManager1/SIM/0 --pin=3497 successfully sent PIN code to the SIM But in reality... Wed Nov 20 14:38:52 2019 daemon.debug [4254]: <debug> [1574260732.489513] Verifying PIN... Wed Nov 20 14:38:52 2019 daemon.debug [4254]: [/dev/cdc-wdm0] sent message... <<<<<< RAW: <<<<<< length = 27 <<<<<< data = 01:1A:00:00:0B:02:00:09:00:26:00:0E:00:02:06:00:01:04:33:34:39:37:01:02:00:06:00 Wed Nov 20 14:38:52 2019 daemon.debug [4254]: [/dev/cdc-wdm0] sent generic request (translated)... <<<<<< QMUX: <<<<<< length = 26 <<<<<< flags = 0x00 <<<<<< service = "uim" <<<<<< client = 2 <<<<<< QMI: <<<<<< flags = "none" <<<<<< transaction = 9 <<<<<< tlv_length = 14 <<<<<< message = "Verify PIN" (0x0026) <<<<<< TLV: <<<<<< type = "Info" (0x02) <<<<<< length = 6 <<<<<< value = 01:04:33:34:39:37 <<<<<< translated = [ pin_id = 'pin1' pin_value = '3497' ] Wed Nov 20 14:38:52 2019 daemon.debug [4254]: [/dev/cdc-wdm0] received message... <<<<<< RAW: <<<<<< length = 30 <<<<<< data = 01:1D:00:80:0B:02:02:09:00:26:00:11:00:02:04:00:01:00:52:00:13:02:00:69:84:10:02:00:03:0A Wed Nov 20 14:38:52 2019 daemon.debug [4254]: [/dev/cdc-wdm0] received generic response (translated)... <<<<<< QMUX: <<<<<< length = 29 <<<<<< flags = 0x80 <<<<<< service = "uim" <<<<<< client = 2 <<<<<< QMI: <<<<<< flags = "response" <<<<<< transaction = 9 <<<<<< tlv_length = 17 <<<<<< message = "Verify PIN" (0x0026) <<<<<< TLV: <<<<<< type = "Result" (0x02) <<<<<< length = 4 <<<<<< value = 01:00:52:00 <<<<<< translated = FAILURE: AccessDenied As we already know what the current lock status is, just abort the user operation if the unlock operation isn't required. (cherry picked from commit fd052c8e584a41efc211690e993f6ef0ee3092ac)
-rw-r--r--src/mm-base-sim.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mm-base-sim.c b/src/mm-base-sim.c
index 3a5b1f75..2850cb19 100644
--- a/src/mm-base-sim.c
+++ b/src/mm-base-sim.c
@@ -635,6 +635,14 @@ mm_base_sim_send_pin (MMBaseSim *self,
return;
}
+ /* Only allow sending SIM-PIN if really SIM-PIN locked */
+ if (mm_iface_modem_get_unlock_required (MM_IFACE_MODEM (self->priv->modem)) != MM_MODEM_LOCK_SIM_PIN) {
+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_WRONG_STATE,
+ "Cannot send PIN: device is not SIM-PIN locked");
+ g_object_unref (task);
+ return;
+ }
+
MM_BASE_SIM_GET_CLASS (self)->send_pin (self,
pin,
(GAsyncReadyCallback)send_pin_ready,
@@ -661,6 +669,14 @@ mm_base_sim_send_puk (MMBaseSim *self,
return;
}
+ /* Only allow sending SIM-PUK if really SIM-PUK locked */
+ if (mm_iface_modem_get_unlock_required (MM_IFACE_MODEM (self->priv->modem)) != MM_MODEM_LOCK_SIM_PUK) {
+ g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_WRONG_STATE,
+ "Cannot send PUK: device is not SIM-PUK locked");
+ g_object_unref (task);
+ return;
+ }
+
MM_BASE_SIM_GET_CLASS (self)->send_puk (self,
puk,
new_pin,