• Tony Lindgren's avatar
    ARM: OMAP2+: Remove bogus IS_ERR_OR_NULL checking from id.c · b1dd11d6
    Tony Lindgren authored
    Commit 6770b211 (ARM: OMAP2+: Export SoC information to userspace)
    had some broken return value handling as noted by Russell King:
    
    +       soc_dev = soc_device_register(soc_dev_attr);
    +       if (IS_ERR_OR_NULL(soc_dev)) {
    +               kfree(soc_dev_attr);
    +               return;
    +       }
    +
    +       parent = soc_device_to_device(soc_dev);
    +       if (!IS_ERR_OR_NULL(parent))
    +               device_create_file(parent, &omap_soc_attr);
    
    This is nonsense.  For the first, IS_ERR() is sufficient.  For the second,
    tell me what error checking is required in the return value of this
    function:
    
    struct device *soc_device_to_device(struct soc_device *soc_dev)
    {
            return &soc_dev->dev;
    }
    
    when you've already determined that the passed soc_dev is a valid pointer.
    If you read the comments against the prototype:
    
    /**
     * soc_device_to_device - helper function to fetch struct device
     * @soc: Previously registered SoC device container
     */
    struct device *soc_device_to_device(struct soc_device *soc);
    
    if "soc" is valid, it means the "previously registered SoC device container"
    must have succeeded and that can only happen if the struct device has been
    registered.  Ergo, there will always be a valid struct device pointer for
    any registered SoC device container.  Therefore, if soc_device_register()
    succeeds, then the return value from soc_device_to_device() will always be
    valid and no error checking of it is required.
    
    Simples.  The rule as ever applies here: get to know the APIs your using
    and don't fumble around in the dark hoping that you'll get this stuff
    right.
    
    Fix it as noted by Russell.
    Reported-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    b1dd11d6
id.c 15 KB