lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250620173121.15752-1-abd.masalkhi@gmail.com>
Date: Fri, 20 Jun 2025 17:31:21 +0000
From: Abd-Alrhman Masalkhi <abd.masalkhi@...il.com>
To: wsa+renesas@...g-engineering.com,
	linux-i2c@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [RFC] i2c: Skip i2c_for_each_dev() when detection is not supported

While reviewing the I2C core, I noticed that i2c_for_each_dev() is
invoked in i2c_register_driver() regardless of whether the driver
actually supports device detection, as follow:

    /* When registration returns, the driver core
     * will have called probe() for all matching-dbut-unbound devices.
     */
    res = driver_register(&driver->driver);
    if (res)
        return res;

    pr_debug("driver [%s] registered\n", driver->driver.name);

    i2c_for_each_dev(driver, __process_new_driver);


However, the first check inside i2c_detect() is:

    if (!driver->detect || !address_list)
        return 0;

This check happens only after iterating over all registered I2C devices
via i2c_for_each_dev(). Unless I am missing something, this seems to me
just wasting processing time for drivers that do not support detection.

To avoid this, I propose guarding the call to i2c_for_each_dev() like this:

    /* When registration returns, the driver core
     * will have called probe() for all matching-dbut-unbound devices.
     */
    res = driver_register(&driver->driver);
    if (res)
        return res;

    pr_debug("driver [%s] registered\n", driver->driver.name);

    if (driver->detect && driver->address_list)
        i2c_for_each_dev(driver, __process_new_driver);

This would ensure that i2c_detect() is only called when there is an
actual possibility of detection succeeding, making the driver registration
path more efficient.

Please let me know if this change makes sense. I would be happy to submit
a patch.

Best regards,
Abd-Alrhman Masalkhi

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ