Hello Corey Minyard,

Commit 75c486cb1bca ("ipmi:ssif: Clean up kthread on errors") from
Apr 13, 2026 (linux-next), leads to the following Smatch static
checker warning:

        drivers/char/ipmi/ipmi_ssif.c:1923 ssif_probe()
        error: 'ssif_info->thread' dereferencing possible ERR_PTR()

drivers/char/ipmi/ipmi_ssif.c
    1874         ssif_info->handlers.owner = THIS_MODULE;
    1875         ssif_info->handlers.start_processing = ssif_start_processing;
    1876         ssif_info->handlers.shutdown = shutdown_ssif;
    1877         ssif_info->handlers.get_smi_info = get_smi_info;
    1878         ssif_info->handlers.sender = sender;
    1879         ssif_info->handlers.request_events = request_events;
    1880         ssif_info->handlers.set_need_watch = ssif_set_need_watch;
    1881 
    1882         thread_num = ((i2c_adapter_id(ssif_info->client->adapter) << 
8) |
    1883                       ssif_info->client->addr);
    1884         init_completion(&ssif_info->wake_thread);
    1885         ssif_info->thread = kthread_run(ipmi_ssif_thread, ssif_info,
    1886                                         "kssif%4.4x", thread_num);
    1887         if (IS_ERR(ssif_info->thread)) {
                            ^^^^^^^^^^^^^^^^^

    1888                 rv = PTR_ERR(ssif_info->thread);
    1889                 dev_notice(&ssif_info->client->dev,
    1890                            "Could not start kernel thread: error %d\n",
    1891                            rv);
    1892                 goto out;
    1893         }
    1894 
    1895         dev_set_drvdata(&ssif_info->client->dev, ssif_info);
    1896         rv = device_add_group(&ssif_info->client->dev,
    1897                               &ipmi_ssif_dev_attr_group);
    1898         if (rv) {
    1899                 dev_err(&ssif_info->client->dev,
    1900                         "Unable to add device attributes: error %d\n",
    1901                         rv);
    1902                 goto out;
    1903         }
    1904 
    1905         rv = ipmi_register_smi(&ssif_info->handlers,
    1906                                ssif_info,
    1907                                &ssif_info->client->dev,
    1908                                slave_addr);
    1909         if (rv) {
    1910                 dev_err(&ssif_info->client->dev,
    1911                         "Unable to register device: error %d\n", rv);
    1912                 goto out_remove_attr;
    1913         }
    1914 
    1915  out:
    1916         if (rv) {
    1917                 /*
    1918                  * If ipmi_register_smi() starts the interface, it will
    1919                  * call shutdown and that will free the thread and set
    1920                  * it to NULL.  Otherwise it must be freed here.
    1921                  */
    1922                 if (ssif_info->thread) {

if (!IS_ERR_OR_NULL(ssif_info->thread))

--> 1923                         kthread_stop(ssif_info->thread);
    1924                         ssif_info->thread = NULL;
    1925                 }
    1926                 if (addr_info)
    1927                         addr_info->client = NULL;
    1928 
    1929                 dev_err(&ssif_info->client->dev,
    1930                         "Unable to start IPMI SSIF: %d\n", rv);
    1931                 i2c_set_clientdata(client, NULL);
    1932                 kfree(ssif_info);
    1933         }
    1934         kfree(resp);
    1935         mutex_unlock(&ssif_infos_mutex);
    1936         return rv;
    1937 
    1938 out_remove_attr:
    1939         device_remove_group(&ssif_info->client->dev, 
&ipmi_ssif_dev_attr_group);
    1940         dev_set_drvdata(&ssif_info->client->dev, NULL);
    1941         goto out;
    1942 }

This email is a free service from the Smatch-CI project [smatch.sf.net].

regards,
dan carpenter


_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to