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