ipmi: Disable sysfs access and requests in maintenance mode
authorCorey Minyard <corey@minyard.net>
Thu, 7 Aug 2025 21:05:24 +0000 (16:05 -0500)
committerCorey Minyard <corey@minyard.net>
Mon, 8 Sep 2025 15:21:41 +0000 (10:21 -0500)
If the driver goes into any maintenance mode, disable sysfs access until
it is done.

If the driver goes into reset maintenance mode, disable all messages
until it is done.

Signed-off-by: Corey Minyard <corey@minyard.net>
Tested-by: Frederick Lawler <fred@cloudflare.com>
drivers/char/ipmi/ipmi_msghandler.c

index 18266ba..73d3408 100644 (file)
@@ -2319,6 +2319,11 @@ static int i_ipmi_request(struct ipmi_user     *user,
 
        if (!run_to_completion)
                mutex_lock(&intf->users_mutex);
+       if (intf->maintenance_mode_state == IPMI_MAINTENANCE_MODE_STATE_RESET) {
+               /* No messages while the BMC is in reset. */
+               rv = -EBUSY;
+               goto out_err;
+       }
        if (intf->in_shutdown) {
                rv = -ENODEV;
                goto out_err;
@@ -2615,6 +2620,12 @@ retry_bmc_lock:
            (bmc->dyn_id_set && time_is_after_jiffies(bmc->dyn_id_expiry)))
                goto out_noprocessing;
 
+       /* Don't allow sysfs access when in maintenance mode. */
+       if (intf->maintenance_mode_state) {
+               rv = -EBUSY;
+               goto out_noprocessing;
+       }
+
        prev_guid_set = bmc->dyn_guid_set;
        __get_guid(intf);